在使用Webdriver (selenium & python)向下滚动时,提取动态div列表时遇到问题。
问题描述:
在使用Webdriver (selenium & python)进行自动化测试时,需要从一个动态加载的div列表中提取数据。然而,当向下滚动页面时,无法获取到完整的div列表,导致无法提取到所有数据。
解决方案:
WebDriverWait
类和expected_conditions
模块来实现。例如,可以等待列表中的第一个元素可见,表示列表已加载完毕。from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 向下滚动页面的代码
# 等待动态加载的div列表完全加载出来
wait = WebDriverWait(driver, 10)
div_list = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='dynamic-list']")))
# 提取数据
for div in div_list:
# 提取数据的代码
execute_script
方法来模拟滚动操作,将页面滚动到指定位置,以便加载更多的div列表。可以使用JavaScript的scrollIntoView
方法来实现滚动操作。# 向下滚动页面的代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 等待动态加载的div列表完全加载出来
wait = WebDriverWait(driver, 10)
div_list = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='dynamic-list']")))
# 提取数据
for div in div_list:
# 提取数据的代码
# 提取数据的函数
def extract_data():
# 提取数据的代码
# 获取当前可见的div列表
div_list = driver.find_elements(By.XPATH, "//div[@class='dynamic-list']")
# 提取数据
while True:
# 向下滚动页面的代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 等待动态加载的div列表完全加载出来
wait = WebDriverWait(driver, 10)
new_div_list = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='dynamic-list']")))
# 检查是否已获取到所有数据
if new_div_list == div_list:
break
# 提取新加载的数据
for div in new_div_list:
# 提取数据的代码
# 更新div列表
div_list = new_div_list
以上是针对在使用Webdriver (selenium & python)向下滚动时,提取动态div列表时遇到问题的解决方案。希望能对您有所帮助。
腾讯云相关产品推荐:
请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估。
领取专属 10元无门槛券
手把手带您无忧上云