从Headless Selenium下载不起作用

时间:2019-07-31 13:00:06

标签: python selenium selenium-chromedriver

我正在使用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)。

谢谢!

0 个答案:

没有答案