繁体   English   中英

Selenium Python for 循环只获取第一项

[英]Selenium Python for loop only gets first item

我的 for 循环似乎只能从https://public.tableau.com/en-gb/gallery/?tab=viz-of-the-day&type=viz-of-the-day 中找到第一项而不是循环所有日期和标题。 如果我print(viz)我可以看到不同的元素,但这似乎没有被执行。

driver.get("https://public.tableau.com/en-gb/gallery/?tab=viz-of-the-day&type=viz-of-the-day")
wait = WebDriverWait(driver, 10)

time.sleep(10)

vizzes = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".gallery-items-list div.gallery-list-item-container")))
for viz in vizzes:
    print(viz)

    #publish date
    date_id = driver.find_element_by_css_selector('[data-test-id="published-date"]').text
    print(date_id)

    #name of the viz
    viz_name = driver.find_element_by_xpath("//a[contains(@href, '/en-gb/gallery/')]").text
    print(viz_name)

对于 xpath 我尝试使用

viz_name = driver.find_element_by_xpath(".//a[contains(@href, '/en-gb/gallery/')]").text

viz_name = driver.find_element_by_xpath("//*[contains(@href, '/en-gb/gallery/')]").text

这产生了相同的结果。

您需要使用viz.find_element..而不是driver.find_element..进行更正:

#publish date
date_id = viz.find_element_by_css_selector('[data-test-id="published-date"]').text
print(date_id)

#name of the viz
viz_name = viz.find_element_by_xpath("//a[contains(@href, '/en-gb/gallery/')]").text
print(viz_name)

尽管您似乎已经定义了显式等待,但您使用了硬编码延迟,您可以摆脱它以使脚本健壮。 这是使用 css 选择器执行相同操作的另一种方法:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://public.tableau.com/en-gb/gallery/?tab=viz-of-the-day&type=viz-of-the-day"

with webdriver.Chrome() as driver:
    wait = WebDriverWait(driver, 10)
    driver.get(link)
    for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[class$='item-container']"))):
        viz_name = item.find_element_by_css_selector("[class$='item-title-left'] > a").text
        date_id = item.find_element_by_css_selector("[data-test-id='published-date']").text
        print(viz_name,date_id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM