javascript - 类型错误 : 'NoneType' object is not subscriptable while invoking execute_script() for Chrome Download Manager through Selenium

标签 javascript python selenium google-chrome selenium-chromedriver

我一直在用这个功能https://stackoverflow.com/a/48267887/11220889等待下载完成并在完成后返回文件路径。到目前为止,它一直运行良好。

函数

def every_downloads_chrome(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);
        ''')

怎么称呼

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

我收到错误

TypeError: 'NoneType' object is not subscriptable

因此,据我所知,发生了一些变化,导致函数无法返回路径。我相信这是由于 chrome 内部的变化,或者更具体地说是 chrome 驱动程序的变化。我做出这种假设的两个原因是:

1) 我在我同事使用的另一个代码中有这个函数,她调用我说它昨天产生了这个错误。

2)两个代码都没有改变,所以改变必须在 chrome 中

我想继续使用这个脚本,但如果不可能的话,还有另一个函数等待下载完成并返回路径,理想情况下是通过驱动程序而不是通过文件路径完成这一切,因为多个用户在多台机器上使用我的代码.

编辑:版本-

Name: selenium
Version: 3.141.0

Name: Chrome Browser
Version: 73.0.3683.86

Name: Chrome Driver
Version: 2.43.600210

Name: System
Version: Windows 10 Pro x64

最佳答案

根据错误信息:

TypeError: 'NoneType' object is not subscriptable

您的主要问题似乎是您正在使用的二进制文件版本之间的不兼容,如下所示:

  • 您正在使用 chromedriver=2.43
  • chromedriver=2.43 的发行说明明确提到以下内容:

Supports Chrome v69-71

Supports Chrome v71-73

因此 ChromeDriver v2.43Chrome 浏览器 v73.0 之间存在明显的不匹配


解决方案

  • ChromeDriver 升级到当前 ChromeDriver v2.46水平。
  • Chrome 版本保持在 Chrome v73 级别。 ( as per ChromeDriver v2.46 release notes )
  • 清理您的项目工作区,通过您的IDE重建您的项目,仅使用所需的依赖项。
  • 如果您的基础 Web Client 版本太旧,则将其卸载并安装最新的 GA 和发布版本的 Web Client
  • 执行你的@Test
  • 始终在 tearDown(){} 方法中调用 driver.quit() 以关闭和销毁 WebDriverWeb 客户端 实例优雅。

更新

当前 GAed Chrome v73 有一些问题,您可能希望降级到 Chrome v72。您可以在以下位置找到一些相关讨论:

关于javascript - 类型错误 : 'NoneType' object is not subscriptable while invoking execute_script() for Chrome Download Manager through Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55397792/

相关文章:

javascript - 在焦点自动完成中选择多个值

python - 使用 annotate 连接 3 个表获取数据

python - 良好的 Django 示例/教程/书籍开始?

java - if/else 语句失败

c# - 使用 Log4net 实现彩色日志

javascript - JSON = "XXX is Null or not an Object"在 ie6、ie7 中(不是 ie8、FF、Ch)

php - AJAX "load more"按钮 : disappears once clicked 问题

python - 从单一导入访问 python 应用程序中的全局变量

python - 单击 Selenium 容器中的每个 div

javascript - jQuery Mobile 和 Emberjs - 选择小部件