#python #selenium #screen-scraping
#python #селен #очистка экрана
Вопрос:
Это мой код, с которым я пытаюсь взаимодействовать whoscored.com . Я использовал selenium раньше и знаю, что вы должны нажать «согласиться» на использование файлов cookie, прежде чем сможете делать что-либо еще на веб-сайте. Однако в этом случае селен, похоже, не может нажать на кнопку «Согласиться». Проблема в моем коде или веб-сайте?
Ошибка, которую я получаю, это
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
Мой код:
from selenium import webdriver
import time
driver = webdriver.Chrome("C:Program Files (x86)GoogleChromeApplicationchromedriver.exe")
driver.get("https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/6829/Stages/15151/PlayerStatistics/England-Premier-League-2017-2018")
time.sleep(10)
driver.find_element_by_xpath("/html/body/div[@id='qc-cmp2-container']/div[@id='qc-cmp2-main']/div[@class='sc-dnqmqq dkDDgT qc-cmp-cleanslate']/div[@id='qc-cmp2-ui']/div[@class='qc-cmp2-footer qc-cmp2-footer-overlay qc-cmp2-footer-scrolled']/div[@class='qc-cmp2-summary-buttons']/button[@class='sc-bwzfXH kTIxrL']").click()
Комментарии:
1. Я не вижу кнопки согласия на этой странице. Вы уверены?
2. Моим решением для другой страницы было установить расширение adblock. Я использовал драйвер firefox, поэтому я не знаю, как вы это делаете с драйвером Chrome.
3. попробуйте сделать это инкогнито, потому что, возможно, вы уже были на этом сайте раньше
4.Кроме того, используйте один
driver.implicitly_wait(10)
раз в самом начале вместо расточительногоtime.sleep(10)
.
Ответ №1:
Для меня работает поиск с более простым xpath
driver.find_element_by_xpath("//button[contains(., 'Agree')]").click()
//button
найдите все узлы, которые являются тегами кнопок
, и [contains(., 'Agree']
найдите все узлы, внутренний текст которых содержит подстроку «Согласен»
Комментарии:
1. Я подозреваю, что имена классов, которые вы используете, предназначены для динамического изменения. Обычно неправильно полагаться на поиск элемента по непонятным меткам, таким как
sc-dnqmqq dkDDgT qc-cmp-cleanslate
Ответ №2:
У меня была такая проблема, и я обнаружил, что этот код всегда работает лучше, чем метод ‘click ()’, даже если элемент не взаимодействует. проверьте это
yourElement = driver.find_elements_by_xpath(".//button[@class='sc-bwzfXH kTIxrL']")
driver.execute_script("arguments[0].click();", "yourElement")
хотелось бы, чтобы это помогло вам