通过Jenkins通过selenium下载文件,下载被取消?

问题描述 投票:0回答:1

我正在运行一个 python 脚本,它通过 selenium 打开 chrome 浏览器,导航到一个页面,然后单击一个下载 csv 文件的链接。

我可以在本地运行这个脚本,一切都按预期进行。如果我通过 Jenkins 管道运行脚本,则不会下载该文件。我已经打印了驱动程序的性能日志,我看到下载确实开始了,但最终被取消了:

{'message': {
  'method': 'Page.downloadProgress',
  'params': {
    'guid': '450ca6e7-b457-440c-b344-c9c672c46963',
    'receivedBytes': 0,
    'state': 'inProgress',
    'totalBytes': 0
  }
}, 'webview': 'B64F8253B02AB1AED58E1A976EECECC2'} 
{'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '450ca6e7-b457-440c-b344-c9c672c46963',
      'receivedBytes': 119233,
      'state': 'inProgress',
      'totalBytes': 0
    }
  },
  'webview': 'B64F8253B02AB1AED58E1A976EECECC2'} 
 {'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '450ca6e7-b457-440c-b344-c9c672c46963',
      'receivedBytes': 0,
      'state': 'canceled',
      'totalBytes': 0
    }
  },
  'webview': 'B64F8253B02AB1AED58E1A976EECECC2'}

当我在本地运行它时,日志看起来像这样:

{
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 0,
      'state': 'inProgress',
      'totalBytes': 0
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
} {
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 135665,
      'state': 'inProgress',
      'totalBytes': 0
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
} {
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 135665,
      'state': 'inProgress',
      'totalBytes': 0
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
} {
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 135665,
      'state': 'inProgress',
      'totalBytes': 135665
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
} {
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 135665,
      'state': 'inProgress',
      'totalBytes': 135665
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
} {
  'message': {
    'method': 'Page.downloadProgress',
    'params': {
      'guid': '393fac4c-527e-4c7d-829f-6b23c1232260',
      'receivedBytes': 135665,
      'state': 'completed',
      'totalBytes': 135665
    }
  },
  'webview': '929F090474357DB72423ECF9A5260AC8'
}

我通过 ChromeOptions() 设置文件的默认下载路径:

from selenium import webdriver

options = ChromeOptions()
download_path = os.path.join(os.getcwd(), 'tmp_downloads')
if not os.path.exists(download_path):
  os.makedirs(download_path)
chrome_prefs = {
  "download.default_directory": download_path,
  "download.prompt_for_download": False,
  "download.directory_upgrade": True
}
options.add_experimental_option("prefs", chrome_prefs)
options.add_argument("--headless=new")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(chrome_options=options)

我猜詹金斯中有一些设置需要更改以允许下载文件?我不确定还有什么可以取消下载。

python selenium-webdriver jenkins selenium-chromedriver
1个回答
0
投票

我在最新版本的 Chromedriver 和 Google Chrome(130.0...) 上的 Rails 应用程序上遇到了类似的问题,您需要仔细检查 download_path:

  1. 在您的选项中,您需要将路径设置为字符串:
    download.default_directory”:download_path.to_s => download_path 是字符串,在使用您的选项创建驱动程序后,请检查结果和输出以查看它是否获得此路径(被拒绝)
  2. 创建驱动程序后,您需要再次设置此目录以确保如下所示: @driver.download_path = 下载路径

完成这两个步骤后我的问题就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.