Home > Net >  Get text of drop-down menu
Get text of drop-down menu

Time:02-04

I have a drop-down menu.

I want to get all cities from A-Z using Python's Selenium.

<li> is a list of every city starting with an A.

But how to get the text now? My proceeding:

# Open drop-down menu
driver.find_element(BY.XPATH, '//*[@id="city-field"]/div/div/div[1]/button').click()

# Type in 'A'
driver.find_element(BY.XPATH, '//*[@id="city-field"]/div/div/div[1]/div/div[1]/input').send_keys('A')

# Get every cities starting with 'A' ???

enter image description here enter image description here

CodePudding user response:

Something like this should work. It would've better if you provided the code instead of image, or the website link would've been even better to investigate. Anyway, try like this:

options = driver.find_elements(By.XPATH, "//div[@class='dropdown-menu open']//*[@role='option]"

ls = [option.text for option in options]
print(ls)

CodePudding user response:

You should get all the element containing city names and then iterate over that list extracting the city name texts.
Something like this:

# Open drop-down menu
driver.find_element(BY.XPATH, '//*[@id="city-field"]/div/div/div[1]/button').click()

# Type in 'A'
driver.find_element(BY.XPATH, '//*[@id="city-field"]/div/div/div[1]/div/div[1]/input').send_keys('A')
wait.until(EC.visibility_of_element_located((By.XPATH, "//ul[@class='dropdown-menu inner']//span[@class='text']")))
city_names = driver.find_elements(BY.XPATH, "//ul[@class='dropdown-menu inner']//span[@class='text']")
names = []
for city in city_names:
    name = city.text
    names.append(name)

In order to use expected conditions wait object you will have to use these imports:

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

And to initialize wait object with

wait = WebDriverWait(driver, 20)
  •  Tags:  
  • Related