python - 失败 - 在 Selenium 无头 Chrome 中下载时出现下载错误
问题描述
我正在尝试使用 Selenium 在 Chrome 中下载文件。我发现无头 Chrome 默认情况下不允许文件下载,并应用了解决方法。但是,实施该变通方法会导致某些文件Failed - Download Error
在 Chrome 中生成。
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': abs_path}}
driver.execute('send_command', params)
这是我的代码的样子:
chrome_options = webdriver.ChromeOptions()
prefs = {
"download.prompt_for_download": False, # allow automatic downloads
"plugins.always_open_pdf_externally": True, # allow download of pdf instead of open in plugin
"download.default_directory": path,
"safebrowsing.enabled": False # allow download of .msi, .exe files, etc.
}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': path}}
driver.execute('send_command', params)
for url in file_urls: # file_urls here is a list of download links
driver.get(url)
在搜索了 的常见原因后Download error
,我排除的事情是:
- 下载路径错误:下载路径相同的文件有的可以下载,有的可以
- 文件路径太长:一些可以下载的文件路径比有错误的文件路径长
删除解决方法后,所有文件都可以正常下载,但我将无法在无头模式下下载。任何的意见都将会有帮助。
附加信息:
ChromeDriver 版本:2.40.565498
Chrome 版本:67.0.3396.87
解决方案
您可以尝试禁用安全性,也许它会起作用
我建议不要在无头模式下运行,我们也在 Linux 服务器中运行 selenium,我们选择使用单独的 selenium docker 容器(webserver)并创建远程驱动程序而不是本地驱动程序:
检查此页面以获取更多信息
安装 docker 后,您可以使用此命令启动 selenium
docker run -d -p 4444:4444 -v /dev/shm:/dev/shm --network host selenium/standalone-chrome:3.141.59-neon
确保有--network host
,以便4444
可以从localhost
. 之后,您可以通过这样做简单地创建一个远程驱动程序
from selenium import webdriver
driver = webdriver.Remote(command_executor = exec_path or 'http://localhost:4444/wd/hub'))
这样你就不必担心硒的任何事情,专注于你的项目
推荐阅读
- django - 在 Django ModelAdmin 中,如何允许编辑 ForeignKey 对象但不允许重新分配?
- coldfusion - 如何知道从 upsert 查询中运行了什么
- c++ - get_time 未按预期运行
- python - 关于python中一个简单的递归函数
- python - 为什么它在 Python 编译器和 web.py 应用程序中的工作方式不同?
- ios - 如何通过 MVC 模式将 ViewController 与视图连接起来
- eclipse - Eclipse RSE 上的 Ctrl+单击导航
- tfs - 从 TFS 扩展中使用 TFS VSTS Rest API 时出现 401 错误
- image - Rmagick,imagemagick:使用-resize方法后图像不正确且模糊
- knex.js - Bookshelf.js:批量更新