2017-01-17 2 views
0

Python에서 Selenium을 사용하여 this 페이지의 드롭 다운 메뉴를 크롤링하고 있습니다. find_elements_by_css_selector 기능을 사용하고 두 번째 드롭 다운 메뉴에서 모든 데이터를 가져 왔습니다. 내가 model.get.attribute('href')을 통해 그룹 번호와 일치하는 모델의 이름을 모두 인쇄하려고 할 때get_attribute 함수에서 Python Selenium 인코딩 문제가 발생했습니다.

하지만, 한국어로 작성된 모델 이름이 아래와 같이 부서졌다 : 5%EC%8B%9C%EB%A6%AC%EC%A6%88 (BMW 5 시리즈입니다).

'model.text'를 사용하는 것이 유일한 모델 이름을 반환하는 것을 알고 있지만 동시에 각 모델의 그룹 이름이 필요합니다.

model.text 대신 model.get.attribute('href')을 사용하는 이유입니다.

제발 나를 도와주세요.

아래 코드는 제 코드입니다.

enter code here#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

import re 

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import StaleElementReferenceException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import Select 

from bs4 import BeautifulSoup 
from time import sleep 

link = 'http://www.bobaedream.co.kr/cyber/CyberCar.php?gubun=I' 
driver = webdriver.PhantomJS() 
driver.set_window_size(1920, 1080) 
driver.get(link) 
sleep(.75) 

s = BeautifulSoup(driver.page_source, "html.parser", from_encoding='utf-8') 

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

for maker in makers: 
    # open manufacturer layer 
    next_elem = driver.find_element_by_xpath('//a[@title="제조사 선택"]') 
    next_elem.click() 

    next_elem = driver.find_element_by_link_text(maker) 
    print(maker) 
    next_elem.click() 
    print("clicked maker") 
    sleep(.75) 

    # open model layer 
    next_elem = driver.find_element_by_xpath('//a[@title="모델 선택"]') 
    next_elem.click() 

    # select model 

    models = driver.find_elements_by_css_selector("#layer_group ul.list li a") 
    for model in models: 
     print (model.get_attribute('href')) 

답변

1

해당 제목에는 href 속성이 없습니다. 목록 옵션 값 - (있는 경우)

elem = driver.find_element_by_xpath("//select[@title='모델 선택']"). 
for option in elem.find_elements_by_tag_name('option'): 
    print option.text 
관련 문제