requests 拿到 200,HTML 只有 4096 字节,body 里只留一个空的 div id=app,正文 0 个字,浏览器打开同一地址能看到 60 条列表。日志里能对上时间点,这种反而好排。
页面由前端框架在浏览器里渲染,服务端返回的 HTML 只是壳,数据来自另一个 JSON 接口。直接解析 HTML 永远拿不到内容,要找的是壳里内联的状态或者 XHR 请求的地址。这一点先确认清楚,后面就不用反复试。
grep -o '__NEXT_DATA__' page.html curl -s 'https://example.com/api/list?page=1' -H 'Referer: https://example.com/list' | head -c 500
「JS 渲染数据源」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
处理上按这个顺序:在源码里搜 __NEXT_DATA__ 或 __NUXT__;搜不到就开 Network 面板过滤 XHR;拿接口地址直接请求 JSON;把 Referer 和 X-Requested-With 一起带上。
结果对不对很好判断,从内联状态里能解析出 60 条记录,字段与浏览器显示一致,单页解析耗时从超时变成 0.4 秒。
