
本文讲解如何通过 Selenium 定位并点击带有 class="next" 的分页链接(而非调用未知 JavaScript 函数),安全、可靠地触发前端分页逻辑,完成多页数据抓取。适用于含 jQuery/自定义事件绑定但无显式按钮的动态分页场景。
本文讲解如何通过 selenium 定位并点击带有 `class="next"` 的分页链接(而非调用未知 javascript 函数),安全、可靠地触发前端分页逻辑,完成多页数据抓取。适用于含 jquery/自定义事件绑定但无显式按钮的动态分页场景。
在使用 Selenium 进行网页自动化时,一个常见误区是:看到页面通过 JavaScript 动态加载下一页内容,就试图直接执行 JS 脚本(如 driver.execute_script(...))去调用隐藏函数。但事实上,绝大多数现代分页组件(尤其是基于 jQuery 或自定义事件绑定的)早已将交互逻辑封装在 DOM 元素的事件监听器中——只要正确触发用户行为(如点击 <a class="next js-next"></a>),底层 JS 就会自动执行,无需手动查找或调用函数名。
从你提供的 HTML 片段可见:
<a class="next js-next icon-with-text">
<span class="text">Next</span>
<svg class="icon" ...></svg>
</a>该链接具有明确的语义类名 next 和 js-next,且位于 .paginator 容器内。这正是前端开发者为自动化工具预留的标准定位锚点。直接模拟用户点击此 <a></a> 标签,是最自然、最健壮的方案,它能完整复现真实点击流程(包括事件冒泡、preventDefault 处理、异步加载等待等),避免绕过事件系统导致的兼容性问题。
以下是推荐的完整实现代码(含显式等待与异常处理):
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 TimeoutException, ElementClickInterceptedException
driver = webdriver.Chrome()
driver.get("https://example.com/data-table")
try:
# 显式等待“Next”链接变为可点击状态(确保 DOM 加载完成且未被遮挡)
next_link = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "a.next"))
)
next_link.click() # 触发前端绑定的 click 事件
# 可选:等待新表格数据加载完成(例如等待 tbody 重绘或新页码高亮)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "table tbody tr"))
)
except TimeoutException:
print("⚠️ 'Next' link not found or not clickable within timeout.")
except ElementClickInterceptedException:
print("⚠️ Click intercepted — try scrolling into view first.")
driver.execute_script("arguments[0].scrollIntoView(true);", next_link)
next_link.click()✅ 关键优势说明:
-
无需逆向 JS:不必分析
/static/js/main.40c23f145e01.js中的内部函数,规避了混淆、压缩、动态注册等复杂性; -
符合前端设计意图:
js-next类名本身即表明该元素专为 JS 行为绑定而设,点击即触发预期逻辑; -
兼容性强:无论背后是
addEventListener('click', ...)、jQuery.on('click', ...)还是框架(如 React/Vue)的事件代理,均能正确响应; -
可扩展性好:配合循环 +
is_enabled()或get_attribute('href')判断,可轻松实现全量分页遍历。
⚠️ 注意事项:
- 若页面使用懒加载或 IntersectionObserver,需确保目标链接已进入视口(可加
scrollIntoView); - 部分站点对频繁点击做防刷限制,建议添加合理延时(
time.sleep(1))或使用WebDriverWait等待加载完成后再操作; - 始终优先使用
WebDriverWait而非time.sleep(),以提升稳定性与执行效率。
总结:面对“Next”分页,点击 DOM 元素永远优于猜测 JS 函数名。聚焦于可观察、可定位、有语义的 HTML 结构(如 a.next),辅以显式等待与容错处理,即可构建稳定、可维护的分页爬虫逻辑。

















