为何Splash返回的HTML与浏览器检查网站时得到的HTML不一致?
问题原因
- 固定等待时长不足:你当前仅设置了1秒的等待时间,该站点基于React构建,目标虚拟表格
ReactVirtualized__Table__row需要等待接口数据返回、前端JS逻辑执行完成后才会动态渲染,1秒通常不足以完成整个渲染流程。 - 虚拟列表触发条件不满足:
ReactVirtualized是虚拟滚动组件,仅会渲染当前视口范围内的行元素,Splash默认视口尺寸较小,可能表格区域未进入可视范围,组件不会生成对应的行元素。 - 动态资源未加载完成:互联网档案馆的存档站点静态资源加载速度偏慢,默认配置下Splash可能未等所有JS资源执行完毕就返回了HTML。
修复方案
最简单的调整方案是延长等待时间、设置合理视口,修改后的Lua脚本如下:
function main(splash, args) -- 设置足够大的视口,确保表格区域落在可视范围内 splash:set_viewport_size(1920, 1080) url = args.url assert(splash:go(url)) -- 延长等待时间到5秒,可根据实际网络情况上下调整 assert(splash:wait(5)) return splash:html() end
如果上述调整后还是无法获取到目标元素,可以增加滚动触发和元素等待逻辑,稳定性更高:
function main(splash, args) splash:set_viewport_size(1920, 1080) url = args.url assert(splash:go(url)) -- 最多等待10秒,直到目标行元素出现 splash:wait_for_resume([[ function check() { document.querySelector('.ReactVirtualized__Table__Grid')?.scrollIntoView() if (document.querySelector('.ReactVirtualized__Table__row')) { window.splashRes(true) } else { setTimeout(check, 300) } } check() ]], 10) return splash:html() end
内容的提问来源于stack exchange,提问作者cach dies
相关产品推荐
相关产品推荐

