首页 > 解决方案 > 从 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)。

谢谢!

标签: pythonseleniumselenium-chromedriver

解决方案


推荐阅读