动态页面的“可见内容”不能只看服务器返回的HTML,也不能只看测试工具给出的首屏截图。更可靠的做法是:让页面在真实浏览器环境里执行JavaScript,等主要内容稳定后,再确认哪些文字、图片和按钮真正进入了可视区域,并排除被隐藏、被遮挡或尚未加载的部分。
动态页面往往先返回一个空壳HTML,再由JavaScript请求数据、渲染组件。此时用普通抓取工具拿到的源码里,正文可能根本不存在;而用浏览器打开时,内容又可能因为接口慢、懒加载或条件渲染而延迟出现。两种结果都不等于“用户实际看到的内容”。
此外,页面里存在不等于可见。元素可能被CSS设为display:none、visibility:hidden,也可能在视口之外、被弹窗遮挡,或高度为零。确认可见内容,本质上是确认“渲染后且位于可视区域内”的内容。
这是成本最低、最适合第一次接触该问题的起点。步骤如下:
const el=document.querySelector('h1'); const r=el.getBoundingClientRect(); getComputedStyle(el).display!=='none' && getComputedStyle(el).visibility!=='hidden' && r.top<innerHeight && r.bottom>0
返回true说明该元素当前可见;返回false则要分别排查是隐藏、在视口外,还是尚未渲染。注意:这只是某一时刻的结果,刷新或改变窗口大小后可能不同。
当页面较多或需要反复测试时,人工点选不够用。可以选择能执行JavaScript的浏览器自动化方案,在页面加载后等待主内容出现,再读取可视区域内的文本。判断逻辑通常包括:
display:none、visibility:hidden或opacity:0隐藏。document.elementFromPoint取到的仍是它自身或其后代。把这些条件组合起来,才能接近“用户首屏实际看到的内容”。只取innerText或只截图,都可能把不可见文字算进去,或漏掉延迟渲染的正文。
如果脚本拿到的可见文本与浏览器里看到的一致,说明这次渲染和可见性判断是可信的。如果不一致,常见原因有三类:接口数据未返回、懒加载未触发、视口尺寸与真实设备不同。需要区分“可能原因”和“已经定位的原因”——看到空白首屏,可能是接口慢,也可能是选择器写错,不能只凭一个现象下结论。
还要注意:网站加载速度测试工具给出的首屏截图和渲染结果,受工具自身视口、网络条件和等待策略影响,不同工具之间可能不一致。它们适合作为参考,不能替代对可见性的明确判断。
先选一个代表性动态页面,用开发者工具手动确认首屏正文元素是否可见,记录下它的选择器和可见条件;再把这套条件写进一次自动化检查,对比脚本结果与人工观察是否一致。一致后,再扩展到其他页面模板。若不一致,优先排查等待条件和视口设置,而不是直接调整页面本身。