2017-04-07 1 views
0

아래 코드는 정상적으로 작동하지만 다중 루프를 사용하고 있습니다. 모든 루프를 하나의 루프로 만들 수 있습니다.파이썬 셀렌을 사용하여 단일 루프에서 여러 요소를 반복하는 방법

여러 루프 코드 :

for post in driver.find_elements_by_class_name("_1UoZlX"): 
    mobile_link += [ post.get_attribute("href") ] 

for post1 in driver.find_elements_by_class_name("_3wU53n"): 
    mobile_name += [ post1.text ] 

for post2 in driver.find_elements_by_css_selector("._1vC4OE._2rQ-NK"): 
    offer_price += [ post2.text ] 

전체 코드 :

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
import time 
import csv 
chrome_path = r"C:\Users\Venkatesh\AppData\Local\Programs\Python\Python35\chromedriver.exe" 
driver = webdriver.Chrome(chrome_path) 
RegionIDArray = ["https://www.flipkart.com/mobiles/pr?otracker=categorytree&page=1&sid=tyy%2C4io", "https://www.flipkart.com/mobiles/pr?otracker=categorytree&page=2&sid=tyy%2C4io"] 
mobile_link = [] 
mobile_name = [] 
offer_price = [] 
actual_price = [] 
data_list=[] 
delay = 10 # seconds 

for reg in RegionIDArray: 
    try: 
     driver.get(reg) 
     WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, "//*[@id='container']/div/div[2]/div[2]/div/div[2]/div/div[3]/div[1]/div/div[1]"))) 
     driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
     print("Page is ready") 

     for post in driver.find_elements_by_class_name("_1UoZlX"): 
      mobile_link += [ post.get_attribute("href") ] 

     for post1 in driver.find_elements_by_class_name("_3wU53n"): 
      mobile_name += [ post1.text ] 

     for post2 in driver.find_elements_by_css_selector("._1vC4OE._2rQ-NK"): 
      offer_price += [ post2.text ] 

     time.sleep(10)  
    except TimeoutException: 
     print("Loading took too much time") 
driver.quit() 

답변

0

그것은 여전히 ​​여러 루프, 그러나 그것은 지능형리스트와 조금 깔끔한입니다 :

mobile_link += [ post.get_attribute("href") for post in driver.find_elements_by_class_name("_1UoZlX") ] 
mobile_name += [ post1.text for post1 in driver.find_elements_by_class_name("_3wU53n") ] 
offer_price += [ post2.text for post2 in driver.find_elements_by_css_selector("._1vC4OE._2rQ-NK") ] 

단일 루프를 원했던 이유는 무엇입니까? 그것들은 관련이없는 요소 인 것 같습니다.

+0

이 웹 사이트 (https://www.flipkart.com/mobiles/pr?otracker=categorytree&page=1&sid=tyy%2C4io&affid=businessp2)를 볼 수 있다면 가격 가격 (텍스트 장식 : 줄을 긋기)을 원합니다. 약간의 시간 가치가있을 것입니다 거기에 시간 가치가있을 것입니다. 나는 모든 정보를 mobile_link, mobile_name 등과 같은 배열에 넣고있다. 스트라이크 값을 얻으려고하면 범위 문제를 벗어난 인덱스를 얻는다. 질문은 http://stackoverflow.com/questions/43253910/list-index-out-of-range-using-python-selenium?noredirect=1#comment73582762_43253910입니다. –