Я пытаюсь использовать Selenium с Python (3) для нажмите кнопку отмены на странице chrome://downloads. Мой вариант использования заключается в том, что у меня есть запутанная ссылка, для которой каждый раз, когда пользователь нажимает на нее, генерируется случайный токен. Если вы не нажмете на нее, вы не сможете начать загрузку (кажется, она запускает часть js, генерирующую токен, но мне не удалось покопаться в коде, чтобы выяснить, как это происходит).
Чтобы мой тест прошел, все, что мне нужно, это убедиться в том, что:
- Начинается загрузка (но не выдает ошибку 404), и
- Файл, который он пытается загрузить, имеет правильный размер.
Теоретически это выглядит так: должно сработать, камнем преткновения является попытка получить доступ к любым элементам в тегах #shadow-root на странице chrome://downloads. Решение другого вопроса, который я привел выше, к сожалению, больше не работает:
Код: Выделить всё
driver = webdriver.Chrome("chromedriver.exe")
driver.get("chrome://downloads/")
manager = driver.find_element_by_css_selector('body/deep/downloads-manager')
item = manager.find_element_by_css_selector('body/deep/downloads-item')
shadow = driver.execute_script('return arguments[0].shadowRoot;', item)
link = shadow.find_element_by_css_selector('div#title-area>a')
file_url = link.get_attribute("href")
Код: Выделить всё
>>> item = manager.find_element_by_css_selector('body/deep/downloads-item')
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 430, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 659, in find_element
{"using": by, "value": value})['value']
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"body/deep/downloads-item"}
(Session info: chrome=80.0.3987.149)
Подробнее здесь: https://stackoverflow.com/questions/609 ... n-python-3
Мобильная версия