我一直在使用此功能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
答案 0 :(得分:1)
根据错误消息:
TypeError: 'NoneType' object is not subscriptable
您的主要问题似乎是所使用的二进制版本之间的不兼容性:
支持 Chrome v69-71
支持 Chrome v71-73
因此 ChromeDriver v2.43 与 Chrome浏览器v73.0
之间存在明显的不匹配@Test
。driver.quit()
方法内调用tearDown(){}
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。当前GAed Chrome v73 存在一些问题,您可能希望降级为 Chrome v72 。您可以在以下位置找到一些相关的讨论: