You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java爬虫获取点击触发渲染的隐藏HTML标签内容方案

Java爬取点击触发动态渲染页面的实现方案

这类场景的核心本质是前端异步渲染DOM:目标表格数据不是首屏直出到HTML源码里的,点击按钮后前端会执行JS逻辑,要么拉取异步接口数据插入DOM,要么把首屏已经加载但隐藏的内容挂载到页面节点上,点击前后URL不变是因为所有交互都在单页应用前端完成,没有触发整页跳转。直接请求初始URL只能拿到未渲染的首屏骨架,自然拿不到目标表格。

针对你提到的两个同class、第二个点击后才渲染的div场景,可按优先级选以下方案实现:

方案1:直接抓取异步数据接口(性能最优,优先选)

不用模拟浏览器渲染,直接抓点击按钮时前端调用的后端数据接口,拿结构化数据:

  • 打开浏览器开发者工具,切换到「网络」面板,勾选Fetch/XHR请求类型过滤,清空现有请求记录
  • 点击页面上触发表格加载的按钮,观察新出现的请求,找到返回内容包含表格数据的接口(一般返回JSON格式,字段和表格列一一对应)
  • 记录该接口的请求方法、请求头(重点关注Cookie、Referer、token、签名参数这类反爬校验字段)、请求参数生成规则
  • 用Java生态的OkHttp/HttpClient工具直接构造对应请求,就能拿到结构化的表格数据,不需要解析HTML,性能远高于模拟浏览器方案
  • 如果接口参数有加密,可在开发者工具对应请求的调用栈打断点,调试出前端加密逻辑,要么用Java复现加密规则,要么直接用Java内置的ScriptEngine运行扣取的前端加密代码生成参数

方案2:无头浏览器模拟真实操作(适配接口加密复杂的场景)

如果接口签名、反爬逻辑很难逆向,直接用无头浏览器模拟真实用户的点击操作,等DOM完全渲染后再提取内容,Java生态优先选Playwright for Java,比Selenium的动态等待、反爬规避能力更强,具体操作逻辑:

  • 启动无头模式的浏览器实例,设置真实User-Agent、常规窗口大小,隐藏无头浏览器的自动化特征避免被反爬拦截
  • 访问目标初始URL,等待首屏基础DOM加载完成
  • 定位到触发表格渲染的按钮,模拟真实点击操作
  • 禁止写死固定等待时长(比如Thread.sleep(3000)这种写法很容易因为网络波动导致元素还没加载就开始提取),用显式等待机制,等目标节点加载完成后再提取内容
    针对你提到的两个class完全一致的div场景,直接按匹配索引取第二个节点即可,参考代码:
    // 定位触发按钮并点击
    page.locator("目标按钮的CSS选择器").click();
    // 匹配所有class符合要求的div,取索引为1的节点(索引从0开始,第二个节点对应索引1)
    Locator targetTableDiv = page.locator(".sKfxWe-BeDmAc.sKfxWe-BeDmAc-AHe6Kc").nth(1);
    // 显式等待目标节点加载、渲染完成
    targetTableDiv.waitFor();
    // 提取div内的表格文本/HTML内容
    String tableData = targetTableDiv.locator("table").innerText();
    
  • 后续如果有分页、筛选类的交互,重复「模拟操作+显式等待目标节点+提取内容」的逻辑即可

常见注意事项

  • 如果点击按钮时提示元素不可点击、被遮挡,先执行滚动操作把按钮滚动到可视区域再触发点击
  • 无头浏览器默认带的webdriver标识容易被反爬检测,可通过启动参数、JS注入的方式去掉相关特征
  • 如果点击后第二个div是从隐藏状态改为显示状态、不是动态插入的,同样可以用上述索引定位+显式等待的逻辑处理,不需要额外调整

内容的提问来源于stack exchange,提问作者Cassie Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:45:48