Puppeteer 1.3.0:页面readyState为complete但goto方法未解析求助
结合你遇到的情况——调用 goto(url, {timeout: 0, waitUntil: 'load'}) 后一直卡在目标页面,控制台执行 document.readyState 返回 "completed",且确认问题出在网页端,下面几个网页端的常见问题可以重点排查:
存在长期pending的网络请求:虽然
document.readyState已经到了"completed",但Puppeteer的load等待条件是等待所有资源(图片、样式、脚本、第三方资源等)加载完成。如果页面有某个资源请求一直处于pending状态(比如广告脚本、统计接口加载失败却持续重试),会导致goto一直等待。你可以打开开发者工具的Network面板,查看是否有这类卡住的请求。网页存在无限运行的异步任务:如果页面里有未终止的
setInterval、setTimeout循环,或者有一直不resolve/reject的Promise,可能会干扰Puppeteer对页面加载完成的判断。可以检查页面脚本,排查是否有这类持续运行的异步逻辑。load事件被异常阻止:有些网页的自定义脚本会篡改或阻止
load事件的正常触发(比如调用event.preventDefault()),即使readyState已经是completed,Puppeteer监听load事件的逻辑也会一直等待,导致goto方法无法解析。尝试替换waitUntil参数缩小范围:你可以试试把
waitUntil: 'load'换成waitUntil: 'domcontentloaded'或者waitUntil: 'networkidle0',如果换成其他参数后goto能正常解析,说明问题确实和load事件的触发逻辑强相关,能帮你进一步锁定网页端的异常点。
另外,建议手动在浏览器打开目标页面,观察页面是否有加载异常的表现(比如浏览器标签栏的加载图标一直转动、控制台有报错信息),这些细节能更快帮你定位问题根源。
内容的提问来源于stack exchange,提问作者Niklas

