Не удалось обнаружить ошибку элемента через Selenium после копирования местоположения xPath - PullRequest
0 голосов
/ 27 января 2019

Selenium, не могу найти элемент xPath

Я новичок в изучении Selenium, пытаюсь создать крошечный веб-скребок.Первая часть - зайти на сайт и нажать кнопку «Поиск по адресу».Я скопировал xPath из «Инспектирования элемента» в Google Chrome, однако, используя Selenium, чтобы найти этот элемент, выдается ошибка «невозможно найти».

from selenium import webdriver
web_Url = 'http://hcad.org/quick-search/'
driver = webdriver.Firefox(executable_path=r'C:\Users\Jaz\Documents\Python\Modules\geckodriver.exe')
driver.implicitly_wait(10) # this lets webdriver wait 10 seconds for the website to load
driver.get(web_Url)
button = driver.find_element_by_xpath("//*[@id='s_addr']").click()

Ответы [ 2 ]

0 голосов
/ 29 января 2019

К click() для элемента с текстом Поиск по адресу , так как требуемый элемент находится в пределах <iframe>, поэтому необходимо:

  • Индуцировать WebDriverWait для получения желаемого кадра и переключения на него .
  • Индуцирование WebDriverWait для выбора нужного элемента для нажатия .
  • Можно использовать следующее решение:

    • Кодовый блок:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
      driver.get("http://hcad.org/quick-search/")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@src='https://public.hcad.org/records/quicksearch.asp']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#s_addr"))).click()
      
  • Снимок браузера:

address_search

Здесь вы можете найти соответствующее обсуждение Способы решенияс #document под iframe

0 голосов
/ 27 января 2019

Элемент, который вы пытаетесь найти, находится внутри iframe.Сначала переключитесь на iframe с помощью команды ' driver.switchTo (). Frame () ', а затем попытайтесь найти элемент.

Подробнее о переключении на iframe обсуждается в эта статья .

from selenium import webdriver
web_Url = 'http://hcad.org/quick-search/'
driver = webdriver.Firefox(executable_path=r'C:\Users\Jaz\Documents\Python\Modules\geckodriver.exe')
driver.implicitly_wait(10) # this lets webdriver wait 10 seconds for the website to load
driver.get(web_Url)
element = driver.find_element_by_xpath("//div[@class='c-general']/iframe")
driver.switch_to_frame(element)
driver.find_element_by_xpath("//*[@id='s_addr']").click()
driver.switch_to_default_content()
...