我建立了一个脚本,用谷歌浏览器(而不是无头浏览器)打开了我们公司的谷歌网站,并在该页面上进行了一些自动化工作。登录信息必须偶尔刷新,因为我是手动登录的。在上周之前的几个月里,这种方法一直运作良好。今天我注意到,在输入我的Gmail地址并点击下一步按钮时,由于服务器响应HTTP状态为400,我收到了上述错误消息。
Puppeter版本:2.0.0
平台/OS版本:Windows 10
URL(如果适用):https://sites.google.com/...
节点。js版本:v12。13
>
运行木偶脚本打开需要登录的谷歌网站。
(async () => {
try {
const browser = await puppeteer.launch({headless: false, userDataDir: "<ProfileDirectory>"});
const pageLogin = await browser.newPage();
await pageLogin.goto('https://sites.google.com/...', {waitUntil: 'networkidle2'});
...
await browser.close();
}
catch (error) {
console.log(error.stacktrace);
}
})();
手动输入Gmail地址,然后单击下一步。
获取错误消息“对不起,这里出了问题。重试。”作为带有HTTP状态代码400的服务器响应的结果。
手动打开Chrome(与userDataDir相同),相应的谷歌网站仍能正常工作。
推荐使用剧作家/木偶师火狐。看起来谷歌在chrome中添加了一些东西,这样他们就可以检测浏览器是否是自动的
这篇帖子上的一条评论提到,谷歌试图阻止使用Puppeter、Selenium等进行登录。这可能就是为什么会出现400错误。
在上面提到的帖子中,最近的一条评论将要点与一些可能仍然有效的示例代码联系在一起,但没有尝试过。
当我在为Firefox研究Puppeter时,我注意到(1)Puppeter下载了它正在执行的本地Google Chrome二进制文件,(2)我安装的Puppeter版本2.0.0已经过时。也就是说,木偶演员实际使用的浏览器可能也过时了。解决方案非常简单,可以将Puppeter更新到最新版本2.1.1。