问题描述
我具有访问网站并导出一些Excel文件的功能.为此,我从硒中导入:
I have a function to access a website and export some Excel file. For that, I import from selenium:
from selenium.webdriver.support.ui import WebDriverWait
然后我在 WebDriverWait 的直到"中调用函数 every_downloads_chrome .
And I call the function every_downloads_chrome inside the 'until' of WebDriverWait.
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位)上尝试生产计算机"时,出现错误:
This works on my computer, a Windows 10 - Google Chrome version 79.0.3945.130 (64 bits). However, when I try on the 'Production computer', with Windows 10 - Google 80.0.3987.122 (64 bits), I have the error:
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)
推荐答案
问题:在80版本的Chrome之后,downloads.Manager.get()无法正常工作.
The problem: downloads.Manager.get() doesn't work after version 80 of Chrome.
所以,我更改#方法来获取下载的文件名
So, I chang# 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 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);
""")
这篇关于WebDriverWait.until-JavaScript错误:无法读取未定义的属性"get"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!