简体   繁体   English

如何使用 selenium python 抓取多级下拉列表 [依赖选择]

[英]how to scrape multilevel drop down list using selenium python [dependent selection]

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!我想从多级选择相关下拉菜单中提取一些数据,谁能告诉我如何使用 selenium 选择和单击项目,以便子下拉菜单可以自动更新!

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])

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)

在此处输入图片说明 See more 查看更多

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM