网页抓取下拉菜单

问题描述 投票:0回答:1

我想从以下网站获取每个品牌和型号的列表。到目前为止,我有以下内容。它给了我正确的标记,但没有给我模型。我认为问题在于代码没有正确选择模型以使模型通过下拉菜单具有选项。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.get("https://www.nettiauto.com/")

wait = WebDriverWait(driver, 10)
merkki_dropdown = wait.until(EC.presence_of_element_located((By.XPATH, '//select[@name="make"]')))

select_merkki = Select(merkki_dropdown)

for merkki_option in select_merkki.options:
    merkki_name = merkki_option.text.strip()

    if merkki_name == "" or "Select" in merkki_name:
        continue

    select_merkki.select_by_visible_text(merkki_name)

    model_dropdown = wait.until(EC.presence_of_element_located((By.XPATH, '//select[@name="model"]')))

    model_options = model_dropdown.find_elements(By.TAG_NAME, "option")

    model_list = [option.text.strip() for option in model_options if option.text.strip()]

    print(f'Make: {merkki_name}')
    for model in model_list:
        print(f'  Model: {model}')

driver.quit()
selenium-webdriver
1个回答
0
投票

这是从

<select>
中获取选项的方法:

select_model = Select(model_dropdown)
model_list = [option.text.strip() for option in select_model.options if option.text.strip()]

如果需要,请使用

WebDriverWait
明确等待模型选项更新

© www.soinside.com 2019 - 2024. All rights reserved.