python - 从 Headless Selenium 下载无法正常工作
问题描述
我正在使用 chromedriver 下载文件。没有无头参数它工作得很好。但是,当我尝试以无头方式执行相同操作时,会出现以下错误:
every_downloads_chrome failed: Message: javascript error: downloads is not defined
(Session info: headless chrome=76.0.3809.87)
这是我用来下载文件的一段代码:
def open(self) -> None:
# Enable verbose logging
service_args = ["--verbose", "--log-path={}/chromedriver.log".format(self.download_dir)]
self.browser = webdriver.Chrome(chrome_options=self.options, service_args=service_args)
self.browser.command_executor._commands["send_command"] = (
"POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior',
'params': {'behavior': 'allow', 'downloadPath': self.download_dir}}
self.browser.execute("send_command", params)
self.browser.implicitly_wait(10)
这是我调用来检查文件是否已下载的函数:
def every_downloads_chrome(self, driver):
if not driver.current_url.startswith("chrome://downloads"):
driver.get("chrome://downloads/")
return driver.execute_script("""
var items = downloads.Manager.get().items_;
if (items.every(e => e.state === "COMPLETE"))
return items.map(e => e.file_url);
""")
尝试下载文件:
driver.execute_script("__doPostBack('...','')")
time.sleep(10)
WebDriverWait(driver, 600, 30).until(self.every_downloads_chrome)
该错误来自every_downloads_chrome 函数内的driver.execute_script 调用。
有人有什么主意吗?我还尝试删除 every_downloads_chrome_ 并仅包含一些 time.sleep(120),但该文件没有被下载(如果有帮助的话 - 他们有 ~10MB)。
谢谢!
解决方案
推荐阅读
- python - AssertionError: 形状的主体必须在形状之前(或同时)添加到空间中
- html - 矩形不填充 svg 的宽度
- javascript - 如何自定义 react-multi-corousel-jsm 库?
- python - 使用 Lambda 复制不适用于带有空格的文件
- java - 如何按数组对象的值对数组对象列表进行选择排序
- google-apps-script - 已部署 Google Apps 脚本(插件) - 从存储读取时发生服务器错误。错误代码 PERMISSION_DENIED
- node.js - Heroku 抱怨端口未绑定,但我看不出我的代码与其他解决方案的区别
- c# - 问答游戏 Unity
- javascript - js如何隐藏和显示
- flutter - 颤振发送通知给定日期和时间