Выбор выпадающего элемента в меню <div>Селен python - PullRequest
0 голосов
/ 29 января 2020

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

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

Например, для меню выберите из выпадающего списка вкладку "Google".

для справки: https://www.google.com/maps/place/Hilton+London+Bankside/@51.5056536, - 0.1033145,17z / data =! 3m1! 4b1 ! 4m10 3m9 1s0x487604af6af74cc7: 0x6c4cb3cbe03e95bf 5m2 4m1 1i2 8м2 3d51.5056536 4d-0,1011258 9m1 1B1

!!!!!!!

Ответы [ 3 ]

1 голос
/ 29 января 2020

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

el = driver.find_element_by_id("dropdown_id")
for option in el.find_elements_by_tag_name('option'):
    if "GB" in option.text:
        option.click() # select() in earlier versions of webdriver
        break

Я выбираю выпадающий список со значением состояния "ГБ".

1 голос
/ 29 января 2020

Вызовите WebDriverWait () и element_to_be_clickable () и щелкните элемент div All reviews, чтобы открыть раскрывающееся меню, а затем выберите элементы на основе текста.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.get("https://www.google.com/maps/place/Hilton+London+Bankside/@51.5056536,-0.1033145,17z/data=!3m1!4b1!4m10!3m9!1s0x487604af6af74cc7:0x6c4cb3cbe03e95bf!5m2!4m1!1i2!8m2!3d51.5056536!4d-0.1011258!9m1!1b1")
#Dropdown text provide here
selectItem='Agoda'
#First click on the All reviews element to open up the dorpdown element
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div[aria-label='All reviews']"))).click()
#Select item from menu dropdown by text
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[@role='menuitem']//div[text()='"+ selectItem +"']"))).click()

Снимок браузера: после выполнения

enter image description here

1 голос
/ 29 января 2020

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

Например, давайте выберем "Google", как вы просили:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("the google link here, it's too big to paste it")

#Waiting until dropdown is visible , there are two dropdowns, taking the first one
menu = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH, " 
(//div[@class='cYrDcjyGO77__container'])[1]")))
menu.click()

#Waiting untill menu items is visible then selecting the second element - Google
item = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH, " 
(//div[@role='menuitem'])[2]")))
item.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...