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

如何在Bash中通过cURL获取HTML标签的实际内容而非空ID值

问题原因

你拿到的是未渲染的静态HTML模板,路由器管理页的流量数值是浏览器加载完HTML后,通过JavaScript异步调用后端接口获取数据后动态填充到标签中的,curl默认只返回首次请求的静态资源,不会执行JS也不会自动发起后续异步请求,所以拿不到数值。

解决方法

方法1:直接抓流量数据接口(性能最高,适合bash脚本调用)

这是最推荐的方案,操作步骤:

  • 打开Chrome开发者工具「网络」面板,过滤器选择「XHR/提取」,刷新流量统计页面
  • 逐个查看筛选出的异步请求的响应内容,找到包含接收字节、发送字节、总流量等数值的请求(大概率是你请求头中提到的/cgi/xml_action.cgi接口)
  • 复制该请求的完整cURL命令,替换其中的动态参数即可直接拿到结构化的流量数据,不需要解析HTML
    注意:digest认证的nonce、response值、Cookie中的CGISID、请求URL中的时间戳参数都是动态生成的,不要硬编码复用,每次请求前要和登录逻辑联动更新有效参数

方法2:使用无头浏览器渲染页面(开发成本低,不需要抓接口)

如果不想研究路由器的私有接口逻辑,可以用无头浏览器直接模拟浏览器的完整加载行为,等JS渲染完成后提取填充后的内容,bash中可以直接调用playwright命令行工具实现:

  1. 先安装playwright:npm install -g @playwright/test && playwright install chromium
  2. 执行命令直接获取渲染后的表格内容:
playwright chromium goto "http://192.168.100.1/html/homeNetwork/traffic_statistic.html" \
  --header="Cookie: CGISID=你的有效会话ID" \
  --wait-for-timeout=3000 \
  --inner-text="#tbodyStaticFromPowerOn"

返回的就是表格中已经填充好的流量数值,直接提取即可。

避坑提示

  • 不要直接复用你当前curl命令里的Authorization头参数,digest认证的响应值是和请求路径、nonce绑定的,硬编码会很快失效
  • 部分路由器会校验请求头的X-Requested-With、Referer字段,模拟接口请求时要和浏览器请求头保持完全一致

内容的提问来源于stack exchange,提问作者Will Segatto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:57:03