首页 > 解决方案 > Selenium Python for 循环仅获取第一项

问题描述

我的 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

产生了相同的结果。

标签: pythonseleniumweb-scraping

解决方案


您需要使用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)

推荐阅读