Selenium循环点击下一页并收集所有页面URL至列表的实现方法
解决Selenium循环收集分页URL的问题
你之前的代码核心问题有这几个:
- 没初始化用来存URL的列表,也没执行
append操作 - URL收集时机没处理好,容易漏页
- 用
except:捕获所有异常太宽泛,应该针对性捕获元素不存在的异常 - 没处理页面加载延迟,可能导致元素找不到的误判
下面是修正后的完整代码:
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 from selenium.common.exceptions import NoSuchElementException # 初始化浏览器驱动 driver = webdriver.Chrome() # 初始化存储URL的列表 page_urls = [] # 打开初始页面(替换成你的目标初始URL) driver.get("你的初始页面URL") while True: # 先把当前页面URL加入列表 current_url = driver.current_url if current_url not in page_urls: # 避免重复添加(部分网站最后一页Next按钮点击无反应) page_urls.append(current_url) try: # 显式等待Next按钮加载可点击,最多等10秒 next_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "Next")) ) next_btn.click() # 页面加载慢的话可以加短等待 # driver.implicitly_wait(2) except NoSuchElementException: # 找不到Next按钮,说明到最后一页,退出循环 break # 输出所有收集到的URL print("所有页面URL:") for url in page_urls: print(url) driver.quit()
关键修改说明:
- 提前初始化
page_urls列表,每次循环先存当前页面URL,确保第一页和最后一页都不会遗漏 - 用
WebDriverWait显式等待元素,避免页面未加载完成就查找元素的错误 - 只捕获
NoSuchElementException,不会把其他异常(比如网络错误)当成“到最后一页”处理 - 增加重复URL判断,防止部分网站最后一页Next按钮仍存在但点击无效的情况
内容的提问来源于stack exchange,提问作者What
相关产品推荐
相关产品推荐

