【问题标题】:Why is selenium webdriver in python not returning all image links?为什么 python 中的 selenium webdriver 不返回所有图像链接?
【发布时间】:2022-11-03 23:57:51
【问题描述】:
我正在使用 selenium WebDriver 从加载了 JavaScript 的网站收集图像的 URL。似乎我的以下代码仅返回大约 240 个链接中的 160 个。为什么会这样 - 因为 JavaScript 渲染?
有没有办法调整我的代码来解决这个问题?
driver = webdriver.Chrome(ChromeDriverManager().install(), options = chrome_options)
driver.get('https://www.politicsanddesign.com/')
img_url = driver.find_elements_by_xpath("//div[@class='responsive-image-wrapper']/img")
img_url2 = []
for element in img_url:
new_srcset = 'https:' + element.get_attribute("srcset").split(' 400w', 1)[0]
img_url2.append(new_srcset)
【问题讨论】:
标签:
python
selenium
selenium-webdriver
selenium-chromedriver
webdriverwait
【解决方案1】:
您需要等待所有这些元素被加载。
推荐的方法是使用 WebDriverWait expected_conditions 显式等待。
这段代码在img_url2 列表中为我提供了 760-880 个元素:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
webdriver_service = Service('C:webdriverschromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 10)
url = "https://www.politicsanddesign.com/"
driver.get(url)
wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='responsive-image-wrapper']/img")))
# time.sleep(2)
img_url = driver.find_elements(By.XPATH, "//div[@class='responsive-image-wrapper']/img")
img_url2 = []
for element in img_url:
new_srcset = 'https:' + element.get_attribute("srcset").split(' 400w', 1)[0]
img_url2.append(new_srcset)
我不确定这段代码是否足够稳定,所以如果需要,您可以激活wait 行和下一行捕获所有img_url 之间的延迟。