#python #selenium #selenium-chromedriver
#python #selenium #selenium-chromedriver
Вопрос:
Я пытаюсь использовать selenium в окне поиска на этом сайте: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 selenium не увидит элементы see, если вы не скажете ему подождать, пока элемент не станет видимым. Например:
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?
Комментарии:
1. элемент
#name
находится внутриiframe
— посколькуSelenium
элементы вiframe
не являются частью страницы. Вы должны найтиiframe
иswitch_to()
в этом фрейме, чтобы найти элемент в этомiframe
Ответ №1:
Существует iframe, который не позволяет вам получить доступ к элементу.Сначала вы должны переключить iframe. попробуйте приведенный ниже код.
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
Ответ №2:
Эта страница имеет #name
in 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()