【问题标题】:How to iterate multiple elements in single loop using python selenium如何使用 python selenium 在单个循环中迭代多个元素
【发布时间】:2017-04-07 04:36:54
【问题描述】:

下面的代码工作正常,但我使用了多个循环。是否可以使其成为一个循环来获取所有数据。

多循环代码:

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

【问题讨论】:

    标签: python python-3.x selenium for-loop webdriver


    【解决方案1】:

    它仍然是多个循环,但列表推导更简洁:

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

    您想要一个循环的原因是什么?看起来它们是不相关的元素。

    【讨论】:

    • 如果你看到这些网站flipkart.com/mobiles/… 我想获得执行价格值(文本装饰:line-through;) 一些时间价值将存在一些时间价值将不存在。我将所有信息放入数组中,例如 mobile_link 、mobile_name 等。当我尝试获取罢工值时,会出现索引超出范围的问题。这是问题stackoverflow.com/questions/43253910/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2020-01-05
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2020-06-18
    • 2018-12-09
    相关资源
    最近更新 更多