如何使用Selenium Python点击每个下拉菜单列表

2024-04-26 04:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在这个页面的第一行的下拉菜单中收集所有相关数据。(http://www.bobaedream.co.kr/cyber/CyberCar.php?gubun=I)我想选择的制造商是['宝马','宝马','宝马','模型和详细模型在代码中如下所示。我想做的是单击第一个下拉菜单,然后单击在其列表中定义的第二个下拉菜单中的项目,然后单击第三个下拉菜单。你知道吗

下面是我想要的结果:

BMW
====clicked maker
5시리즈
====clicked model
5시리즈 (03~10년)
====clicked detail model
뉴 5시리즈 (10년~현재)
====clicked detail model

X 시리즈
====clicked model
X6 (08년~현재)
====clicked detail model
뉴 X5 (14년~현재)
====clicked detail model
뉴 X3 (11년~현재)
====clicked detail model
....
벤츠
====clicked maker
S 클래스
====clicked model
S클래스 (06년~13년)
====clicked detail model
S클래스 (54~06년)
====clicked detail model
뉴 S클래스 (14년~현재)
====clicked detail model
...

这是我的密码:

from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import urlparse
from urllib.parse import quote
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import re
import time
from time import sleep
from urllib import parse
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import StaleElementReferenceException

url = "http://www.bobaedream.co.kr/cyber/CyberCar.php?gubun=I"

driver = webdriver.PhantomJS()
driver.set_window_size(1920, 1080)
driver.get(url)

res = urllib.request.urlopen(url)
html = res.read()
soup = BeautifulSoup(html, 'html.parser')

preset_models_audi = ['A1', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'Q3', 'Q5', 'Q7', 'TT', 'S', 'SQ', 'RS', 'R8']
preset_models_bmw = ['1시리즈', '2시리즈', '3시리즈', '4시리즈', '5시리즈', '6시리즈', '7시리즈', 'GT', 'X시리즈', 'M시리즈', 'Z시리즈', 'i3',
                'i8']
preset_models_benz = ['A클래스', 'B클래스', 'C클래스', 'E클래스', 'S클래스', 'M클래스', 'GLE클래스', 'GLS클래스', 'GLC클래스', 'GLA클래스',
                 'GLK클래스',
                 'G클래스', 'SLK', 'SL', 'SLC클래스', 'CL클래스', 'CLS클래스', 'CLA클래스', 'SLS', 'AMG GT', 'CLK',
                 '마이바흐']

makers = ['아우디', 'BMW', '벤츠']

preset_detail_models_audi = ["A1 (10년~현재)", "뉴 A3 (14년~현재)", "A3 (96~13년)", "뉴 A4 (16년~현재)", "A4 (09~16년)",
                        "A4 (94~09년)",
                        "뉴 A5 (11년~현재)", "A5 (07~11년)", "뉴 A6 (11년~현재)", "A6 (09~11년)", "A6 (94~09년)",
                        "A7 (10년~현재)",
                        "뉴 A8 (10년~현재)", "A8 (94~10년)", "Q3 (11년~현재)", "Q5 (08년~현재)", "뉴 Q7 (16년~현재)",
                        "Q7 (05~15년)",
                        "뉴 TTS (15년~현재)", "뉴 TT (15년~현재)", "TTS (06~14년)", "TT (06~14년)", "TT (98~06년)",
                        "S모델",
                        "SQ5 (13년~현재)", "RS3 (11년~현재)", "RS4 (00년~현재)", "RS5 (10년~현재)", "RS6 (02~10년)",
                        "RS7 (14년~현재)",
                        "R8 (06년~현재)"]
preset_detail_models_bmw = ["뉴 1시리즈 (13년~현재)", "1시리즈 (04~12년)", "2시리즈 (14년~현재)",
                       "뉴 3시리즈 (12년~현재)", "3시리즈 (05~13년)", "4시리즈 (14년~현재)",
                       "뉴 5시리즈 (10년~현재)", "5시리즈 (03~10년)",
                       "뉴 6시리즈 (12년~현재)", "6시리즈 (76~11년)",
                       "뉴 7시리즈 (16년~현재)", "7시리즈 (09~15년)", "7시리즈 (77~09년)",
                       "그란투리스모 (10년~현재)",
                       "뉴 X1 (16년~현재)", "X1 (09~15년)", "뉴 X3 (11년~현재)", "X3 (04~11년)",
                        "X4 (14년~현재)", "X5 (99~13년)", "뉴 X5 (14년~현재)", "X6 (08년~현재)", "뉴 X6 (15년~현재)",
                       "M시리즈 (72년~현재)", "뉴 Z4 (09년~현재)", "Z4 (02~09년)", "i3 (14년~현재)",
                       "i8 (15년~현재)"]
preset_detail_models_benz = ["뉴 A클래스 (13년~현재)", "A클래스 (97~12년)", "뉴 B클래스 (12년~현재)", "B클래스 (05년~현재)",
                        "뉴 C클래스 (15년~현재)", "C클래스 (08년~14년)", "뉴 E클래스 (16년~현재)", "E클래스 (09~16년)",
                        "뉴 S클래스 (14년~현재)", "S클래스 (06년~13년)", "뉴 M클래스 (12~15년)", "M클래스 (97~12년)",
                        "GLE클래스 (16년~현재)", "GLS클래스 (16년~현재)", "GLC클래스 (16년~현재)", "GLA클래스 (14년~현재)",
                        "GLK클래스 (09~15년)", "G클래스 (79년~현재)", "뉴 SLK클래스 (12~16년)", "SLK클래스 (04~11년)",
                        "뉴 SL클래스 (12년~현재)", "SL클래스 (54~11년)", "SLC클래스 (16년~현재)",
                        "뉴 CL클래스 (07~13년)", "CL클래스 (92~07년)",
                        "뉴 CLS클래스 (10년~현재)", "CLS클래스 (04~10년)", "CLA클래스 (14년~현재)",
                             "SLS AMG (10~14년)",
                             "AMG GT (14년~현재)", "CLK클래스 (96~09년)", "마이바흐 (02년~현재)]"]

makers_found = [
    ('%s' % o.get_attribute('text'), '%s' % parse.unquote(o.get_attribute('href')))
    for o
    in driver.find_elements_by_css_selector("#layer_maker ul.list li a")
    if o.get_attribute('text') != '전체'
    ]

for maker_found in makers_found:
    if maker_found[0] in makers:
        ma = maker_found[0]
        if maker_found[0] == '아우디':
            driver.execute_script(maker_found[1])
            preset_models = preset_models_audi
            preset_detail_models = preset_detail_models_audi
        elif maker_found[0] == 'BMW':
            driver.execute_script(maker_found[1])
            preset_models = preset_models_bmw
            preset_detail_models = preset_detail_models_bmw
        elif maker_found[0] == '벤츠':
            driver.execute_script(maker_found[1])
            preset_models = preset_models_benz
            preset_detail_models = preset_detail_models_benz

        print(maker_found[0])
        print("====clicked maker")
        time.sleep(1)

        models = [
            ('%s' % o.get_attribute('text'), '%s' % parse.unquote(o.get_attribute('href')))
            for o
            in driver.find_elements_by_css_selector("#layer_group ul.list li a")
            if o.text != '전체'
            ]

        for model in models:
            if model[0] in preset_models:
                driver.execute_script(model[1])
                mo = model[0]
                print(model[0])
                sleep(.75)
                print('====clicked model')

                detail_models = [
                    ('%s' % o.get_attribute('text'), '%s' % parse.unquote(o.get_attribute('href')))
                    for o
                    in driver.find_elements_by_css_selector("#layer_model ul.list li a")
                    if o.get_attribute('text') != '전체']

                for detail_model in detail_models:

                    print(detail_model[0])

                    if detail_model[0] in preset_detail_models:
                        driver.execute_script(detail_model[1])
                        de = detail_model[0]
                        print(detail_model[0])
                        sleep(.75)
                        print('====clicked detail model')

请帮我解决这个问题。你知道吗


Tags: infromimportgetmodelifmodelsdriver