Не могу нажать на кнопку с селеном - PullRequest
1 голос
/ 10 января 2020

У меня есть следующий веб-сайт, на котором я хочу нажать на кнопку «ПРОПУСТИТЬ ЭТО ОБЪЯВЛЕНИЕ», которая появляется после ожидания x секунд.

enter image description here

My код выглядит следующим образом:

 import selenium
 from selenium import webdriver

 driver = webdriver.Chrome()
 driver.get('http://festyy.com/wpixmC')
 sleep(10)

 driver.find_element_by_xpath('/html/body/div[3]/div[1]/span[5]').click()

Однако, когда я проверяю элемент, я не вижу связанной ссылки, по которой можно щелкнуть. Кроме того, я получаю

ElementClickInterceptedException: Message: element click intercepted: Element <span class="skip-btn 
show" id="skip_button" style="cursor: pointer">...</span> is not clickable at point (765, 31). Other 
element would receive the click: <div style="position: absolute; top: 0px; left: 0px; width: 869px; 
height: 556px; z-index: 2147483647; pointer-events: auto;"></div>

Почему-то кажется, что все перенаправлено в больший класс? Как я могу преодолеть это? Когда я пытаюсь скопировать xpath, я получаю только следующее: /div

Заранее спасибо

1 Ответ

2 голосов
/ 10 января 2020

Похоже, что полученная вами ошибка ('элемент перехватил клик') связана с тем, что при загрузке страницы находится div, который занимает всю страницу, не давая Selenium нажать на кнопку пропуска .

Поэтому сначала необходимо удалить этот div, а затем выполнить следующее: driver.find_element_by_xpath('/html/body/div[3]/div[1]/span[5]').click()

Вы можете удалить div, запустив некоторый код JavaScript следующим образом:

driver.execute_script("""
var badDivSelector = document.evaluate('/html/body/div[7]', 
document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, 
null);
if (badDivSelector) {
var badDiv = badDivSelector.singleNodeValue;
badDiv.parentNode.removeChild(badDiv);
}
""")

Приведенный выше код находит полный раздел страницы (идентифицируемый xpath) и удаляет его со страницы.

Ваш окончательный код должен выглядеть примерно так:

import selenium
from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()
driver.get('http://festyy.com/wpixmC')

sleep(10)

driver.execute_script("""
var badDivSelector = document.evaluate('/html/body/div[7]', 
document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, 
null)
if (badDivSelector) {
var badDiv = badDivSelector.singleNodeValue;
badDiv.parentNode.removeChild(badDiv);
}
""")

driver.find_element_by_xpath('/html/body/div[3]/div[1]/span[5]').click()

....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...