Python: почему селен не может найти элемент на сайте angularJS? - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь использовать селен в окне поиска на этом сайте: https://www.claytoncountyga.gov/government/sheriff/inmate-search

def clayton_search(last, first, middle):
    print("Clayton County Jail")
    url = "https://www.claytoncountyga.gov/government/sheriff/inmate-search"
    driver = webdriver.Chrome(chrome_options=(), executable_path="/usr/bin/chromedriver")
    driver.get(url)
    wait = WebDriverWait(driver, 30)
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#name")))
    driver.find_element_by_css_selector("#name").send_keys(last," ",first, " ", middle, Keys.ENTER)    
    return driver

driver = clayton_search(last, first, middle)

Сайт использует angularJS, и я знаю, что на сайтах angularJS селен не будет видеть элементы, если вы не укажетеэто ждать, пока элемент не станет видимым.Например:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#name")))

Но я получаю исключение тайм-аута.Я попытался найти элемент с помощью селектора CSS, XPATH и ID.

Даже если трассировка стека не указала, что он может скрываться за другим элементом.Я тоже это попробовал, используя: driver.execute_script

Я подумал, что, возможно, всплывающее меню из панели навигатора может покрывать его, но оно появляется только тогда, когда курсор находится над панелью навигации.

Почему я не могу использовать wait.until(EC.visibility_of_element_located, чтобы найти элемент на этом сайте AngularJS?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Эта страница содержит #name в iframe и Selenium не выполняет поиск в iframe.
Вы должны сначала switch_to.frame(), а затем вы можете искать внутри iframe

import selenium.webdriver

url = "https://www.claytoncountyga.gov/government/sheriff/inmate-search"
driver = selenium.webdriver.Firefox()
driver.get(url)

iframes = driver.find_elements_by_tag_name('iframe')
#print('iframes:', iframes)

driver.switch_to.frame(iframes[0])

item = driver.find_element_by_id('name')
#print('name:', item)
item.send_keys("John")

item = driver.find_element_by_name('NameSearch')
#print('name:', item)
item.click()
1 голос
/ 07 апреля 2019

Существует iframe, который останавливает вас для доступа к элементу. Вы должны переключить iframe first.try под кодом.

def clayton_search(last, first, middle):
    print("Clayton County Jail")
    url = "https://www.claytoncountyga.gov/government/sheriff/inmate-search"
    driver = webdriver.Chrome(chrome_options=(), executable_path="/usr/bin/chromedriver")

    driver.get(url)
    wait = WebDriverWait(driver, 30)
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"Clayton County")))
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#name")))
    driver.find_element_by_css_selector("#name").send_keys(last," ",first, " ", middle, Keys.ENTER)
    return driver
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...