【问题标题】:WebDriverWait.until - javascript error: Cannot read property 'get' of undefinedWebDriverWait.until - javascript 错误:无法读取未定义的属性“获取”
【发布时间】:2020-06-16 04:14:31
【问题描述】:

我有一个访问网站和导出 Excel 文件的功能。为此,我从 selenium 导入:

from selenium.webdriver.support.ui import WebDriverWait

我在 WebDriverWait 的“直到”内调用函数 every_downloads_chrome

nameFile = WebDriverWait(driver, 120, 1).until(every_downloads_chrome)

# method to get the downloaded file name
def every_downloads_chrome(driver):
    if not driver.current_url.startswith("chrome://downloads"):
        driver.execute_script("window.open('');")
        driver.switch_to.window(driver.window_handles[1])
        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.fileUrl || e.file_url);
        """)

这适用于我的计算机,Windows 10 - Google Chrome 版本 79.0.3945.130(64 位)。但是,当我在“生产计算机”上尝试使用 Windows 10 - Google 80.0.3987.122(64 位)时,出现错误:

Erro Message: javascript error: Cannot read property 'get' of undefined
  (Session info: chrome=80.0.3987.122)
Traceback (most recent call last):
  File "<ipython-input-1-e86f4018e9d8>", line 394, in job
    nameFile = WebDriverWait(driver, 120, 1).until(every_downloads_chrome)
  File "C:\Users\***\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
    value = method(self._driver)
  File "<ipython-input-1-e86f4018e9d8>", line 91, in every_downloads_chrome
    """)
  File "C:\Users\***\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 636, in execute_script
    'args': converted_args})['value']
  File "C:\Users\***\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\***\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read property 'get' of undefined
  (Session info: chrome=80.0.3987.122)

【问题讨论】:

  • 我相信 .until 期待一个布尔值。看起来您正在返回文件路径?
  • 是的,该函数返回下载的Excel文件的文件路径。
  • 不要使用webdriverwait...只调用函数。
  • 我发现了问题:我有使用 downloads.Manager.get() 的 Selenium 测试,在 80 版之后不再有效:support.google.com/chrome/thread/28267973?hl=en

标签: python selenium google-chrome selenium-chromedriver webdriverwait


【解决方案1】:

问题:chrome 80 后downloads.Manager.get() 不起作用。

所以,我换了#方法来获取下载的文件名

def every_downloads_chrome(driver):
    if not driver.current_url.startswith("chrome://downloads"):
        driver.execute_script("window.open('');")
        driver.switch_to.window(driver.window_handles[1])
        driver.get("chrome://downloads/")
    return driver.execute_script("""
        var elements = document
        .querySelector('downloads-manager')
        .shadowRoot.querySelector('#downloadsList').items;
        if (elements.every(e => e.state === "COMPLETE"))
               return elements.map(elements =>elements.fileUrl || elements.file_url);
        """)

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多