Selenium Headless Chrome-如何查询下载状态?

时间:2019-09-04 01:34:32

标签: selenium google-chrome selenium-webdriver download selenium-chromedriver

我已经使用Selenium编写了一个(Python)脚本,以自动执行Box的某些下载操作(我知道有Box API,但是我正在访问学校资源,并且不确定该API可以与学校的外部认证很好地交互)。该脚本可以在非无头模式下使用Chrome驱动程序运行,但不能在无头模式下使用。

出现问题的步骤是尝试查询下载状态。我认为我的脚本实际上能够正确执行下载:我添加了some code from SO来禁用默认安全设置,以防止以无头模式下载。

我已经使用两种方法(都在Chrome中执行Javascript)成功查询了下载状态:

当我切换到无头模式时,两者都停止工作。

这是我正在使用的实际代码:

# Headless Chrome disables downloads by default (at least as of 2017).
# https://stackoverflow.com/questions/45631715/downloading-with-chrome-headless-and-selenium
def enable_download_in_headless_chrome(driver, download_dir):
    # add missing support for chrome "send_command"  to selenium webdriver
    driver.command_executor._commands["send_command"] = \
        ("POST", '/session/$sessionId/chromium/send_command')
    params = {
        'cmd': 'Page.setDownloadBehavior',
        'params': {'behavior': 'allow', 'downloadPath': download_dir},
    }
    return driver.execute("send_command", params)


def get_top_download_state(driver):
    """Call this after running driver.get("chrome://downloads")."""

    [state, percent, progress] = driver.execute_script("""
    var item = downloads.Manager.get().items_[0];
    var state = item.state;
    var percent = item.percent;
    var progress = item.progressStatusText;
    return [state, percent, progress];
    """)

    return state, percent, progress

第一种方法的错误表明未定义downloads。第二种方法的错误表明您无法获得shadowRoot的{​​{1}}属性(大概是查询选择器什么也没找到)。

0 个答案:

没有答案