Selenium timeoutexception с веб-драйвером - PullRequest
2 голосов
/ 16 марта 2019

Первый пост здесь и новенький для Python. Я пытаюсь научиться собирать данные с веб-сайта. Когда вы впервые загружаете веб-сайт, появляется окно отказа от ответственности, и все, что я пытаюсь сделать, - это нажать кнопку подтверждения, используя browser.find_element_by_id.

Я использую команду webdriverwait, чтобы дождаться загрузки страницы, прежде чем нажать кнопку «Принять», но я продолжаю получать Timeoutexception. Вот код, который у меня сейчас есть:

from selenium import webdriver
#get the chrome webdriver path file
browser = webdriver.Chrome(executable_path=r"C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe")
browser.get('http://foreclosures.guilfordcountync.gov/')

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
#wait until element is loaded
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, "cmdAccept")))

element = browser.find_element_by_id("cmdAccept")
element.click()

Вот ошибка, которую я продолжаю получать:

Traceback (most recent call last):
  File "C:/Users/Abbas/Desktop/Foreclosure_Scraping/Foreclosure_Scraping.py", line 33, in <module>
    wait.until(EC.presence_of_element_located((By.ID, "cmdAccept")))
  File "C:\Users\Abbas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

Я полагаю, что это как-то связано с вызовом идентификатора самой кнопки с веб-сайта, но я, честно говоря, не знаю. Любая помощь очень ценится.

1 Ответ

2 голосов
/ 16 марта 2019

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

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
#get the chrome webdriver path file
browser = webdriver.Chrome(executable_path=r"C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe")
browser.get('http://foreclosures.guilfordcountync.gov/')
browser.switch_to.frame(browser.find_element_by_name("ctl06"))
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, "cmdAccept")))
element = browser.find_element_by_id("cmdAccept")
element.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...