Как выбрать элементы из выпадающего списка в селене, используя Python - PullRequest
0 голосов
/ 04 сентября 2018

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

dropdown = browser.find_element_by_XPATH('//*[@id="department-dropdown"]')
select = Select(dropdown)

select.select_by_value("Accounting")

СООБЩЕНИЕ ОБ ОШИБКЕ, КОТОРОЕ Я ПОЛУЧУ

Traceback (most recent call last):
  File "C:\Users\David\eclipse-workspace\Web_Scrap\setup.py", line 31, in <module>
    dropdown = browser.find_element_by_XPATH('//*[@id="mainContent"]/div[1]/div/div[3]/div/div/span')
AttributeError: 'WebDriver' object has no attribute 'find_element_by_XPATH'

Пока я пытался выбрать хотя бы первое значение, но оно просто не работает

На предоставленной картинке есть "элемент проверки" выпадающего списка, я пытаюсь перебрать

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

И если у кого-то есть какие-либо рекомендации относительно того, что я могу сделать для достижения своей цели

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш выпадающий список - это выпадающий список css, а не собственный выпадающий список, который реализуется исключительно с помощью тегов <select> и <option>.

параметры раскрывающегося списка происходят из li внутри <ul class="typeahead typeahead-long dropdown-menu", и они прикрепляются к странице только после нажатия стрелки вниз справа.

enter image description here

Причиной существования <select> со многими <option> является вышеуказанный атрибут li: data-value, созданный на этих <option>. Вы можете думать, что эти <option> являются источником данных для li. Таким образом, <select>, не видимый на странице, действует как база данных за внешним интерфейсом для предоставления данных, поэтому стиль <select> установлен на display: none, что означает, что он не виден на странице.

Чтобы действовать как поведение пользователя, вы должны найти и выбрать опцию из li внутри ul после щелчка, чтобы развернуть все li. Вместо того, чтобы выбрать опцию из невидимого <select> или изменить select, отобразите значение css, чтобы сделать его видимым, затем выберите опцию из него.

// click down arrow to expand all options
driver.find_element_by_css_selector(
    ".department-combobox .input-group > span").click();

// search all options
options = driver.find_elements_by_css_selector(
    ".department-combobox .input-group > ul > li")

// print all option text
for(opt in options):
    println opt.text

// select specific option by text
target = 'Anthropology'
driver.find_element_by_css_selector(
    ".department-combobox .input-group > ul")
    .find_element_by_xpath("./li[.="+target+"]")
    .click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...