翻页按钮点击后页面未更新,需用WebDriverWait等待新页标识(如页码文本或数据容器)变化,而非固定延时;懒加载需滚动触发并等待元素新增;优先解析URL分页参数构造请求更稳定;控制翻页节奏与driver生命周期防内存暴涨和反爬。

翻页按钮点击后页面没更新?检查 WebDriverWait 是否等对了元素
常见现象是调用 driver.find_element_by_xpath("...").click() 后,新内容没加载出来,后续抓取还是旧页数据。根本原因不是点击失败,而是点击后没等新 DOM 渲染完成就直接执行了 find_elements。
正确做法是用 WebDriverWait 等待「当前页码标识」或「目标数据容器」发生变化:
- 不要等固定秒数(
time.sleep(2)),容易过短或过长 - 推荐等待某个代表“新页已加载”的元素出现或文本变更,比如:
WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "span.current-page"), "2")) - 如果翻页靠 JS 动态插入内容,优先等目标数据列表的子元素数量变化:
lambda d: len(d.find_elements(By.CSS_SELECTOR, ".item")) > item_count_before
滚动到底部才能触发懒加载?用 driver.execute_script 主动触发
很多网页(尤其电商、新闻列表)采用滚动加载,点击“下一页”按钮只是跳转锚点或无效,真实数据靠监听 scroll 事件拉取。此时单纯点击翻页按钮毫无作用。
实操要点:
立即学习“Python免费学习笔记(深入)”;
- 先滚动到页面底部:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") - 滚动后必须等懒加载完成——建议配合
WebDriverWait等待新增节点出现,而不是等固定时间 - 若滚动一次不够,可循环滚动 + 检查元素数量增长,避免无限重试(加计数器或超时退出)
- 注意:部分站点会检测非人类滚动行为,匀速滚动比瞬间跳底更安全,可用
scrollIntoView({behavior: 'smooth'})替代粗暴scrollTo
翻页逻辑不稳定?优先解析 URL 分页参数而非依赖 UI 元素
靠识别“下一页”按钮 XPath 容易失效:按钮文字变(“»” → “下一页” → “Load More”)、结构嵌套改、甚至被 JS 移除。更稳的方式是分析分页 URL 规律,手动构造请求。
怎么做:
- 打开浏览器开发者工具,在 Network 标签页翻页,观察 XHR 请求或地址栏变化,找出页码参数(如
?page=2、&offset=20) - 用
driver.current_url提取基础 URL,再用urllib.parse.urlparse和urlunparse安全拼接新页地址 - 如果目标站允许直接 GET 访问分页 URL(无 Referer / Cookie 校验),甚至可弃用 Selenium,改用
requests+BeautifulSoup,速度快、内存低 - 注意:登录态、CSRF Token、加密页码参数等情况仍需保留在 Selenium 上下文中操作
翻页太多导致内存暴涨或被封?控制 driver 生命周期与请求节奏
Selenium 不关页面、不清理缓存,翻 50 页后内存常破 1.5GB;高频点击还可能触发风控(IP 封禁、验证码弹窗)。
关键控制点:
- 每翻 5–10 页后,调用
driver.get("about:blank")清空当前页 DOM,比driver.quit()+ 重开轻量得多 - 设置合理延迟:
time.sleep(1.5 + random.uniform(0, 1)),避免整数秒规律请求 - 必要时轮换 User-Agent(通过
Options.add_argument("--user-agent=...")),但别过度——多数网站只看行为模式 - 真要长期运行,考虑用无头 Chrome 的
--disk-cache-dir指向临时目录,并定期清理,否则磁盘也会满
最麻烦的其实是反爬策略升级:今天好用的滚动+点击组合,下周可能就被新增的 Canvas 指纹或 WebRTC 检测拦住。留好日志,把翻页动作封装成可替换模块,比硬编码 XPath 更可持续。


















