我正在运行一个 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)
我猜詹金斯中有一些设置需要更改以允许下载文件?我不确定还有什么可以取消下载。
我在最新版本的 Chromedriver 和 Google Chrome(130.0...) 上的 Rails 应用程序上遇到了类似的问题,您需要仔细检查 download_path:
完成这两个步骤后我的问题就解决了。