У меня есть веб-страницу со следующим:Правильный способ ждать ссылки нажмите селеном
<a id="show_more" class="friends_more" onclick="Friends.showMore(-1)"
style="display: block;">
<span class="_label">Show More Friends</span><span class="friends_more_icon"></span>
</a>
Я хочу нажать на эту ссылку в Python 3.5 с селеном в браузере Chrome. Если я использую WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, id_text)))
, а затем перейдите и щелкните по нему, ничего не произойдет. Однако, если я жду после того, как WebDriverWait
возвращает элемент, который можно щелкнуть, я могу щелкнуть его. Я попробовал 2 способа щелкнуть по ссылке:
more_friends_link = wait_for_id("show_more", driver)
ActionChains(driver).move_to_element(more_friends_link).click(more_friends_link).perform()
И
more_friends_link = wait_for_id("show_more", driver)
more_friends_link.click()
И оба пути работают нормально, если ждать дополнительно после WebDriverWait
возвращает элемент. Я не возражаю ждать, но я хочу выяснить, почему это происходит, поскольку ни один из методов щелчка не генерирует исключение, из-за чего я считаю, что элемент присутствует, видимый и кликабельный, но он не реагирует на щелчок.
UPD: Я забыл упомянуть, что сценарий работал нормально, пока сайт не изменил свой дизайн. Раньше ссылку можно было найти по тексту ссылки, и щелчок работал просто отлично.
UPD2: Так что в настоящее время мой код выглядит следующим образом:
more_friends_link = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "show_more")))
time.sleep(5)
more_friends_link.click()
моя цель состоит в том, чтобы заменить time.sleep(5)
с чем-то более значимым
Что делать, если вы добавляете 'driver.execute_script (" arguments [0] .scrollIntoView(); ", more_friends_link)' перед нажатием? – alecxe
Все еще не повезло - попробовал это :(Кстати, элемент виден в окне браузера. –
Из того, что я понимаю (на этот момент я могу только догадываться), кнопка «показать больше» отключается в то время как текущая страница/набор друзей загружается. Вероятно, это отключено нетрадиционным способом. В любом случае подумайте о добавлении ссылки на целевую страницу, если это возможно. Спасибо. – alecxe