Селен Python невозможно выбрать в раскрывающемся списке

Я пытаюсь выбрать вариант в раскрывающемся меню, а затем нажать «Поиск», но не могу получить тег «выбрать».

HTML, который я очищаю, выглядит следующим образом:

 <select class = "form-control ng-pristine ng-untouched ng-valid ng-scope ng-
    empty" ng-class = "{ 'select_selected' : selected.destinationList}" ng-
    model = "selected.destinationList" ng-if = "!bIsLoading" ng-
    change = "applyPrefetch()" ng-disabled = "bSearchLoading" ng-
    options = "maps.itineraries[dest].Name for dest in prefetch.itineraries 
    track by dest">
 <option value = "" selected = "selected" class = "">Seleziona
 destinazione</option>
 <option label = "Caraibi" value = "1">Caraibi</option>
 <option label = "Emirati Arabi" value = "2">Emirati Arabi</option>
 <option label = "Giro del Mondo" value = "3">Giro del Mondo</option>
 <option label = "America" value = "4">America </option>

 </select>

Я хочу выбрать следующий вариант:

<option label = "Caraibi" value = "1">Caraibi</option>

Я использую следующий код:

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome(executable_path=r"C:example\chromedriver.exe")

# Open the url
driver.get('https://www.examplesite.com')

# select by css selector
select = Select(driver.find_elements_by_css_selector(".form-control"))

# select by visible text
select.select_by_visible_text('Caraibi')

Итак, я пытаюсь получить тег «select» по-разному, и у меня разные проблемы.

Например:

1-я попытка)

select = Select(driver.find_elements_by_class_name("form-control ng-valid ng-scope ng-not-empty ng-dirty ng-valid-parse select_selected ng-touched"))

Я получил:

InvalidSelectorException: invalid selector: Compound class names not 
permitted
(Session info: chrome=64.0.3282.186)
(Driver info: chromedriver=2.32.498550 
(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 
x86_64)

2-я попытка)

select = Select(driver.find_elements_by_class_name(".form-control.ng-
valid.ng-scope.ng-not-empty.ng-dirty.ng-valid-parse.select_selected.ng-
touched"))

Я получил:

AttributeError: 'list' object has no attribute 'tag_name'

3-я попытка)

driver.find_elements_by_xpath("//select[@class='form-control ng-pristine ng-
untouched ng-valid ng-scope ng-empty']")

Получаю пустой список:

Out[81]: []

4-я попытка)

driver.find_element_by_css_selector(".form-control.ng-pristine.ng-valid.ng-scope.ng-empty.ng-touched")

Получаю пустой список:

Out[82]: []

5-я попытка)

dropdown = driver.find_element_by_xpath("//select[@class='form-control ng-pristine ng-valid ng-scope ng-empty ng-touched']/option[text()= Caraibi]").click()

Я получил:

NoSuchElementException: no such element: Unable to locate element: 
{"method":"xpath","selector":"//select[@class='form-control ng-pristine ng-
valid ng-scope ng-empty ng-touched']/option[text()= Mediterraneo]"}
(Session info: chrome=64.0.3282.186)
(Driver info: chromedriver=2.32.498550 
(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 
 x86_64)

Кто-нибудь знает, как решить эту проблему? Заранее спасибо!

@ Бурхан Халид Я уже видел ответ, который вы упомянули, но он не работает.

CosimoCD 19.03.2018 17:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 002
1

Ответы 1

Лучшим вариантом было бы использовать блок try except для перехвата исключений, пока ваш код отдыха работает нормально. Также ваш синтаксис немного сбился с толку.

Попробуй это:

try:
    drop = browser.find_elements_by_css_selector('#someID').click() 
except:
    print("Menu not found") 

Привет, user3237357! Я пробовал использовать селектор css, но все равно получаю пустой список.

CosimoCD 19.03.2018 13:22

Сначала вам нужно выбрать xpath выпадающего меню и щелкнуть по нему

user3237357 19.03.2018 13:33

Затем используйте метод partial_link_text для поиска слова, которое вы ищете, а затем выполните операцию над ним.

user3237357 19.03.2018 13:34

Я попытался выполнить выбор с помощью xpath, но он не работает (см. 5-ю попытку)

CosimoCD 19.03.2018 15:11

Была ли эта опция видна при открытии раскрывающегося меню? Потому что для динамических страниц вам нужно прокручивать до этого меню, чтобы оно загрузилось, и если оно уже есть, включите time.sleep (), чтобы предоставить некоторые детали операций, так как ваш вариант не будет виден, пока страница не будет загружена.

user3237357 20.03.2018 03:04

Другие вопросы по теме