You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Headless Chrome/Puppeteer登录Google时Heroku环境遇验证挑战

我之前也碰到过完全一样的问题!Heroku的云服务器环境对Google来说就是典型的“陌生可疑设备”,所以会跳出验证挑战。下面是我试过有效的几个解决办法,按优先级推荐:

解决Heroku上Puppeteer登录Google触发验证的方案

1. 复用本地已验证的Cookie(最省心的方案)

既然你本地已经能成功登录并存储Cookie,那直接把本地生成的已通过验证的完整Cookie迁移到Heroku就行,完全跳过登录流程:

  • 步骤:
    • 本地登录成功后,把Cookie导出成JSON文件(比如google-valid-cookies.json)
    • 可以把这个文件上传到Heroku项目目录(记得不要加到.gitignore里),或者把Cookie序列化成字符串存在Heroku的Config Vars里
    • Puppeteer启动后,先调用page.setCookie(...cookies)加载Cookie,再导航到业务门户,就能直接处于登录状态

2. 调整Puppeteer配置模拟真实浏览器

Google会检测浏览器指纹,Heroku默认的Puppeteer配置太“机器化”,得改得更像真实用户:

  • 启动浏览器时添加这些参数:
const browser = await puppeteer.launch({
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-blink-features=AutomationControlled',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
  ],
  headless: 'new', // 新版无头模式更接近真实浏览器行为
  ignoreDefaultArgs: ['--enable-automation'] // 去掉暴露自动化的标志
});
  • 页面加载前注入脚本隐藏自动化特征:
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined
  });
});

3. 应急方案:启用Google“不太安全的应用”访问(不推荐长期用)

注意:这个选项现在Google已经逐步淘汰,只有部分旧账号还能开启。如果上面的方法暂时没效果,可以试试:

  • 登录Google账号安全设置,找到“不太安全的应用访问权限”并开启
  • 但这个方法有账号安全风险,只建议临时测试用

4. 生产环境最优解:使用Google服务账号

如果业务允许,用Google服务账号认证是最稳定的,完全不会触发人机验证:

  • 去Google Cloud Console创建服务账号,下载密钥JSON文件
  • 用google-auth-library库获取认证令牌,然后在Puppeteer中设置对应的请求头,或者根据业务门户的认证逻辑直接用服务账号模拟登录

如果以上方法还是触发验证,你可以尝试在Heroku上临时启动非无头模式的Puppeteer,配合远程终端工具手动完成一次验证,然后保存Cookie复用,之后再切回无头模式。

内容的提问来源于stack exchange,提问作者sam4815

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:04:47