Reputation: 33
i want to extract some data from a multilevel selection dependent drop down menu can any one tell me how can i select and click items using selenium so sub drop downs may be updated automatically!
you can visit the source for reference or run the code to see the output once clicked it never selects item.
i have written several codes here is one of them!
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
import csv
import time
//#from selenium.webdriver.support import Select
print ("opening chorome....")
driver = webdriver.Chrome()
driver.get('https://www.wheelmax.com/')
time.sleep(10)
csvData = ['Year', 'Make', 'Model', 'Body', 'Submodel', 'Size']
Yindex = Mkindex = Mdindex = Bindex = Smindex = Sindex = 0
print ("waiting for program to set variables....")
time.sleep(10)
print ("initializing and setting variables....")
Year = Select(driver.find_element_by_id("icm-years-select"))
for year in driver.find_elements(By.XPATH, '//*[@id="icm-years-select"]'):
Year.select_by_index(++Yindex)
year.click()
time.sleep(1)
Make = Select(driver.find_element_by_id("icm-makes-select"))
for make in driver.find_elements(By.XPATH, '//*[@id="icm-makes-select"]'):
Make.select_by_index(++Mkindex)
make.click()
time.sleep(1)
Model = Select(driver.find_element_by_id("icm-models-select"))
for model in driver.find_elements(By.XPATH, '//*[@id="icm-models-select"]'):
Model.select_by_index(++Mdindex)
model.click()
time.sleep(1)
Body = Select(driver.find_element_by_id("icm-drivebodies-select"))
for body in driver.find_elements(By.XPATH, '//*[@id="icm-drivebodies-select"]'):
Body.select_by_index(++Bindex)
body.click()
time.sleep(1)
Submodel = Select(driver.find_element_by_id("icm-submodels-select"))
for subm in driver.find_elements(By.XPATH, '//*[@id="icm-submodels-select"]'):
Submodel.select_by_index(++Smindex)
subm.click()
time.sleep(1)
Size = Select(driver.find_element_by_id("icm-sizes-select"))
for size in driver.find_elements(By.XPATH, '//*[@id="icm-sizes-select"]'):
Size.select_by_index(++Sindex)
csvData.append([year.text, make.text, model.text, body.text, subm.text, size.text])
Upvotes: 2
Views: 860
Reputation: 4315
Try this:
Select multilevel dependent drop-down menu option
selectYear = Select(driver.find_element_by_id("icm-years-select"))
for yearOption in selectYear.options:
yearText = yearOption.text
selectYear.select_by_visible_text(yearText)
time.sleep(1)
selectMakes = Select(driver.find_element_by_id("icm-makes-select"))
for makesOption in selectMakes.options:
makesText = makesOption.text
selectMakes.select_by_visible_text(makesText)
time.sleep(1)
selectModel = Select(driver.find_element_by_id("icm-models-select"))
for modelOption in selectModel.options:
modelText = modelOption.text
selectModel.select_by_visible_text(modelText)
Upvotes: 1