Python: Как выбрать опцию из выпадающего меню в Selenium, элемент скрыт - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь заполнить форму на этом сайте: https://p2c.coweta.ga.us/p2c/jailinmates.aspx
(нажмите «Фильтровать список заключенных», затем нажмите кнопку +, чтобы добавить строку)

def coweta_search(last, first):
    print("Coweta County Jail")
    url = "https://p2c.coweta.ga.us/p2c/jailinmates.aspx"
    driver = webdriver.Chrome(chrome_options=(), executable_path="/usr/bin/chromedriver")
    wait = WebDriverWait(driver, 30)
    driver.get(url)
    driver.find_element_by_css_selector("#btnGridSearch > span:nth-child(2)").click()
    driver.find_element_by_css_selector(".field0 > option:nth-child(7)").click()
    driver.find_element_by_css_selector("input.default").send_keys(last)
    driver.find_element_by_css_selector(".ui-icon-plusthick").click()
    driver.find_element_by_css_selector("tr.sf:nth-child(2) > td:nth-child(1) > select:nth-child(1) > option:nth-child(2)").click()

    driver.find_element_by_css_selector("tr.sf:nth-child(2) > td:nth-child(2) > select:nth-child(2) > option:nth-child(7)").click()


    return driver

Когда я запускаю код, как показано, второе раскрывающееся меню во втором ряду кажется скрытым. трассировка стека возвращает:

element not interactable: Element is not currently visible and may not be manipulated 

Я пытался обойти это, например, явное ожидание или ожидание, пока элемент не виден, но ничего из этого не помогло.

Я также попробовал driver.execute_script:

first_drop = driver.find_element_by_css_selector("tr.sf:nth-child(2) > td:nth-child(2) > select:nth-child(2) > option:nth-child(7)")
driver.execute_script("arguments[0].click();", first_drop)

Это не выдало ошибку, но фактически не выбрало опцию (возможно, потому что она скрыта?).

Есть ли способ, которым я могу выбрать опцию, которую я пытаюсь получить, которая скрыта?

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

1 Ответ

2 голосов
/ 12 апреля 2019

Мне удалось заставить его работать, изменив последнюю строку на:

driver.find_element_by_css_selector("tr.sf:nth-child(2) > td:nth-child(2) > select.field1 > option:nth-child(7)").click()

Я считаю, что предоставленный вами селектор не уникален, а селен запутывается.

Вы также можете получить селекторы напрямую, щелкнув правой кнопкой мыши элемент в меню проверки и выбрав copy selector.

enter image description here

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