Селен не находит ссылку - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь нажать кнопку «Войти» на этом сайте с Selenium: https://results.decisiondeskhq.com/2020/primary/colorado/president. Я щелкнул правой кнопкой мыши элемент в элементе inspect, скопировал xpath и поместил его в функцию find_element_by_xpath.

Вот мой код:

from selenium import webdriver

driver = webdriver.Chrome(executable_path="/users/aliallam/Desktop/scraper test/chromedriver")
url = 'https://results.decisiondeskhq.com/2020/primary/colorado/president'
driver.get(url)

driver.find_element_by_xpath('//*[@id="content"]/div/div/div/div/button').click()

Это сообщение об ошибке, которое я получаю:

Traceback (most recent call last):
  File "/Users/aliallam/Desktop/scraper test/sandbox2.py", line 7, in <module>
    driver.find_element_by_xpath('//*[@id="content"]/div/div/div/div/button').click()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/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":"xpath","selector":"//*[@id="content"]/div/div/div/div/button"}
  (Session info: chrome=80.0.3987.149)

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

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

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

, добавив задержку и подождать, прежде чем выбрать такой элемент:

delay = 10  # seconds
WebDriverWait(driver, delay).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'signup-boxes')))
# you can select element that you want ini here

для большего посещения ресурса здесь

0 голосов
/ 25 марта 2020

Элемент имеет уникальный идентификатор, поэтому вместо использования xpath вы должны использовать идентификатор и применить явное ожидание к элементу, чтобы скрипт ожидал, пока элемент присутствует, и, как указано выше, есть div элемента элемент, который вы пытаетесь щелкнуть, вам нужно использовать java скрипт click в этом случае.
Ваш код должен выглядеть так:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path="/users/aliallam/Desktop/scraper test/chromedriver")
url = 'https://results.decisiondeskhq.com/2020/primary/colorado/president'
driver.get(url)

element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "login-text-btn")))
driver.execute_script("arguments[0].click();", element)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...