ElementNotVisibleException: Сообщение: элемент не виден – Python3 SeleniumPython

Программы на Python
Anonymous
ElementNotVisibleException: Сообщение: элемент не виден – Python3 Selenium

Сообщение Anonymous »

Мне поручили написать анализатор для нажатия на ссылку href, которая выглядит как кнопка, на веб-сайте, и у меня возникли некоторые проблемы.

Вот html: https://pastebin.com/HDKLXpdJ

Вот исходный html: https://pastebin.com/PgT91kJs

Код Python:

Код: Выделить всё

browser = webdriver.Chrome()
...
try:

element = WebDriverWait(browser, 20).until(
EC.presence_of_element_located((By.ID, "reply-panel-reveal-btn")))

finally:
elem = browser.find_element_by_xpath("//A[@id='reply-panel-reveal-btn']").click()
Я получаю эту ошибку.

Код: Выделить всё

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
Я пробовал переключаться между ChromeDriver и GeckoDriver(FF), но снова и снова получаю одну и ту же ошибку. Я даже пробовал ждать загрузки 10 секунд, результат тот же.

Полный текст ошибки:

Код: Выделить всё

File "C:/Users/DEM/PycharmProjects/Test/Scrape.py", line 46, in  elem = browser.find_element_by_xpath("//A[@id='reply-panel-reveal-btn']").click()
File "C:\Users\DEM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 77, in click self._execute(Command.CLICK_ELEMENT)
File "C:\Users\DEM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 493, in _execute return self._parent.execute(command, params)
File "C:\Users\DEM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute self.error_handler.check_response(response)
File "C:\Users\DEM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
(Session info: chrome=61.0.3163.100)
(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64)
Ссылка на видео о том, как это должно работать:

https://streamable.com/e1uvm

Изменить:

Проблема решена, проверьте ответ @JeffC .

Правильный код:

Код: Выделить всё

browser = webdriver.Chrome()
...
element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "(//a[@id='reply-panel-reveal-btn'])[2]")));
element.click()
Проблема:

Я ждал присутствия элемента. Присутствие не означает, что элемент виден или доступен для клика, оно просто означает, что элемент находится в DOM. Также я ждал первого элемента, который оказался невидимым. Мне нужно было найти второй элемент и просто дождаться, пока на него щелкнут.

Подробнее здесь: https://stackoverflow.com/questions/467 ... 3-selenium

Вернуться в «Python»