Selenium在while循环翻页时无法更新driver url的问题咨询
Selenium自动翻页执行数据采集方案
问题根因
- 核心错误是代码末尾
driver = driver.current_url语句:原本driver是Selenium WebDriver实例对象,该语句将其强制覆盖为字符串类型的URL,导致后续无法调用driver相关方法,同时触发变量作用域报错 - 直接将元素查找语句放在while判断条件中,当下一页按钮不存在时会直接抛出
NoSuchElementException异常,无法正常终止循环 - 无需手动更新driver状态:点击下一页按钮后,driver会自动同步当前页面的所有状态,包括
current_url、页面DOM结构等,不需要手动修改driver本身 - 原有逻辑漏了首页的数据采集,进入循环后直接点击下一页,第一页的
get_data没有执行
可运行修改后代码
import time from selenium import webdriver from selenium.common.exceptions import NoSuchElementException PATH = '/Applications/chromedriver' driver = webdriver.Chrome(PATH) def moving_pages(): # 打开首页 driver.get('https://link-page-1') while True: # 先采集当前页数据 get_data(driver.current_url) try: # 查找下一页按钮 button = driver.find_element_by_class_name('next-page-btn') except NoSuchElementException: # 找不到按钮就终止循环 break # 点击下一页 button.click() # 等待页面加载完成,可根据实际情况调整等待时间,或者替换成显式等待更稳定 time.sleep(4) # 调用函数执行 moving_pages() # 所有页面采集完成后关闭driver driver.quit()
优化建议(可选)
- 可以将固定时长的
time.sleep(4)替换为Selenium显式等待,等待页面指定元素加载完成后再执行采集,避免网络波动导致的采集失败 - 如果页面跳转后URL变化有规律,也可以增加URL变更校验逻辑,避免点击按钮后页面未跳转就执行采集的问题
内容的提问来源于stack exchange,提问作者tsetsko
相关产品推荐
相关产品推荐

