如何用Puppeteer自动化Google双因素认证以实现Adwords报表下载
这个问题确实挺头疼的——备用验证码用完就没,长期自动化肯定顶不住。给你几个实际可行的解决方案,按优先级排序:
1. 用Google应用专用密码跳过2FA验证
如果你的账号是个人Google账号(开启2FA后就能用)或者Google Workspace账号,这个方法最省心。应用专用密码是Google专门给不支持2FA的应用提供的替代登录凭证,用它登录的话不需要输入OTP:
- 操作步骤:
- 登录你的Google账号,进入「安全」设置页面
- 找到「应用专用密码」选项(只有开启2FA后才会显示)
- 生成一个新的应用专用密码(可以命名为比如「Puppeteer AdWords」)
- 在Puppeteer的登录代码里,用这个应用专用密码代替你的原账号密码,直接登录就不会触发2FA验证了
- 优点:完全不需要处理OTP,一次设置长期可用
- 注意:如果你的账号是Google Workspace,需要管理员开启应用专用密码的权限
2. 持久化浏览器会话,一次登录终身(会话期内)免验证
这个思路是把第一次手动登录(包括输入OTP)后的浏览器状态保存下来,后续启动Puppeteer时直接复用:
- 具体做法:
在启动Puppeteer时指定userDataDir参数,示例代码:
第一次启动时关闭const browser = await puppeteer.launch({ userDataDir: './my-adwords-session', // 自定义本地目录保存浏览器会话数据 headless: false // 第一次启动需要手动完成登录和2FA验证 });headless模式,手动完成登录(输入账号密码+OTP),之后关闭浏览器。后续再启动时,Puppeteer会加载这个目录里的会话数据,直接处于登录状态,不需要再验证。 - 优点:不需要额外配置,只要会话不过期就一直能用
- 注意:Google的登录会话可能会定期过期,到时候需要重新手动登录一次更新会话;另外不要共享这个会话目录,里面包含敏感的登录信息
3. 自动生成TOTP验证码(需要保存初始密钥)
如果上面两个方法都用不了,比如没有应用专用密码权限,那可以用TOTP自动生成OTP。Google的2FA是基于TOTP协议的,只要你有当初设置2FA时的初始密钥(就是扫二维码时的那个字符串),就能用代码生成实时OTP:
- 操作步骤:
- 安装TOTP库,比如
otplib:npm install otplib - 在代码里用密钥生成OTP:
const otplib = require('otplib'); const totpSecret = '你的TOTP密钥'; // 务必妥善保密! const otp = otplib.authenticator.generate(totpSecret);- 在Puppeteer登录流程中,自动把生成的OTP输入到验证码框里
- 安装TOTP库,比如
- 优点:可以完全自动化,不需要手动干预
- 注意:必须保存好初始密钥,一旦泄露账号就有风险;另外有些账号可能会限制TOTP的使用(不过Google账号一般没问题)
内容的提问来源于stack exchange,提问作者Joe Kurian
相关产品推荐
相关产品推荐

