Я сталкиваюсь с этой ошибкой при Python Selenium с синхронизацией загрузки веб-страницы - PullRequest
0 голосов
/ 12 апреля 2020
# Path to the chromedriver program
service = Service('C:\Program Files (x86)\Google\chromedriver.exe')
service.start()

# Driver opens the remote with robinhood website
driver = webdriver.Remote(service.service_url)
driver.get('https://robinhood.com/crypto/BTC')

# We will grab the element id's to log on to Robinhood
# driver.find_element_by_id(“ID”).send_keys(“username”)
# driver.find_element_by_id (“ID”).send_keys(“password”)
# driver.find_element_by_id(“submit”).click()
signinButton = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "_3kh8OsNx6QdAbMaoKTi2Yq _1uaripz9PIQ8yApSTs6BKk")))

# driver.find_element_by_class_name('_3kh8OsNx6QdAbMaoKTi2Yq _1uaripz9PIQ8yApSTs6BKk')
signinButton.click()

# Closes the driver after timeout
driver.quit()

Я в основном открываю chrome webdriver и захожу на сайт robinhood, однако у меня проблема с загрузкой веб-страницы. Чтобы исправить это, я пытался использовать WebDriverWait, чтобы остановить нажатие кнопки до загрузки веб-страницы.

Проблема в том, что нажатие кнопки не выполняется один раз в 10 секунд и вместо этого выдает эту ошибку:

Traceback (most recent call last):
  File "D:/gitRepos/bitmine/runmine.py", line 25, in <module>
    signinButton = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "_3kh8OsNx6QdAbMaoKTi2Yq _1uaripz9PIQ8yApSTs6BKk")))
  File "D:\Programs Files 2\Python\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

Ответы [ 4 ]

1 голос
/ 12 апреля 2020

Ошибка обычно выплывает из-за невозможности найти объект в течение определенного периода времени. Скорее, вы создали исключительную ошибку, чтобы перехватить ее и перейти к поиску следующего объекта или элемента, если он потерпит неудачу.

try:
    #Insert your scraping action here
    signinButton.click()
except NoSuchElementException:
1 голос
/ 12 апреля 2020

Ошибка означает, что селен не смог найти элемент в течение указанного времени.

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

from selenium import webdriver

driver = webdriver.Firefox()

driver.get("https://robinhood.com/crypto/BTC")

element = driver.find_element_by_class_name(
    "_3kh8OsNx6QdAbMaoKTi2Yq._1uaripz9PIQ8yApSTs6BKk")

print(element)
1 голос
/ 12 апреля 2020

Эта ошибка возникает из-за проблемы синхронизации. Ю может решить вашу проблему с помощью ожидания в селене. Пожалуйста, обратитесь к решению ниже, чтобы избежать таких ошибок:

WebDriverWait(driver, 30).until(
                EC.element_to_be_clickable((By.XPATH, "//button[@class='_3kh8OsNx6QdAbMaoKTi2Yq _1uaripz9PIQ8yApSTs6BKk']"))).click()

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

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

Раздел для регистрации на свободная кнопка:

wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='_3kh8OsNx6QdAbMaoKTi2Yq _1uaripz9PIQ8yApSTs6BKk']"))).click()

wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'Sign up for free')]"))).click()
1 голос
/ 12 апреля 2020

Эта ошибка означает, что она не нашла нажимаемую кнопку в течение 10 секунд, и произошел тайм-аут, создав исключение TimeoutException. Вам нужно установить более длительное время ожидания или соответственно обработать исключение TimeoutException

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