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

如何使用Puppeteer处理Facebook OAuth2的双因素认证(2FA)

解决Puppeteer自动登录Facebook的2FA验证问题

针对你用Puppeteer自动登录Facebook获取User Access Token时遇到的2FA自动输入瓶颈,这里提供三个实用方案,均无需关闭2FA:


方案1:基于TOTP算法自动生成Microsoft Authenticator验证码

Microsoft Authenticator本质是基于**TOTP(时间-based一次性密码)**算法生成验证码,只要能拿到账号绑定2FA时的原始密钥,就能用代码实时生成验证码,完全不需要操作APP。

操作步骤:

  1. 获取TOTP密钥:在Meta账号的2FA设置页面,选择「无法使用验证器应用」,系统会显示一串Base32格式的密钥(类似JBSWY3DPEHPK3PXP),将其存入.env文件(比如命名为FB_TOTP_SECRET)。
  2. 安装依赖库:使用speakeasy生成TOTP验证码:
npm install speakeasy
  1. 修改Puppeteer代码:在点击登录按钮后,添加2FA处理逻辑:
// 点击登录按钮后,等待2FA输入框加载完成
await page.waitForSelector('input[name="approvals_code"]');

// 生成实时TOTP验证码
const speakeasy = require('speakeasy');
const totpCode = speakeasy.totp({
  secret: process.env.FB_TOTP_SECRET,
  encoding: 'base32'
});

// 填入验证码并提交
await page.type('input[name="approvals_code"]', totpCode);
await page.click('button[name="submit[Continue]"]');

// 继续等待跳转至回调URL
await page.waitForNavigation();

方案2:通过短信转发API自动读取SMS验证码

如果账号用SMS接收验证码,可以借助第三方短信接收服务的API,自动获取最新验证码并填入。

操作步骤:

  1. 选择短信服务:注册支持短信接收+API查询的服务,绑定你的测试手机号。
  2. 调用API获取验证码:登录后调用服务API提取6位数字验证码,再填入2FA输入框:
// 点击登录后等待2FA输入框出现
await page.waitForSelector('input[name="approvals_code"]');

// 调用短信API获取验证码(示例,需替换为实际服务的接口)
const fetch = require('node-fetch');
const smsResponse = await fetch(`https://your-sms-service-api/get-latest-code?phone=${process.env.FB_TEST_USER_PHONE}`);
const smsData = await smsResponse.json();
const smsCode = smsData.code;

// 填入验证码并提交
await page.type('input[name="approvals_code"]', smsCode);
await page.click('button[name="submit[Continue]"]');

await page.waitForNavigation();

方案3:利用Facebook信任设备机制跳过2FA

登录一次后将设备标记为「信任」,后续使用同一个浏览器会话登录时,Facebook会跳过2FA验证。Puppeteer可通过保存用户数据目录实现会话持久化。

修改Puppeteer启动代码:

// 启动浏览器时指定用户数据目录,保存会话信息
const browser = await puppeteer.launch({
  headless: false,
  userDataDir: './facebook-session' // 自定义本地目录路径
});

使用说明:

  1. 第一次运行代码时,手动完成2FA验证,并在Facebook弹出「信任此设备」时确认。
  2. 后续运行代码时,Puppeteer会加载之前保存的会话,直接跳过2FA步骤。

额外注意事项:

  • 所有操作尽量模拟人工行为,比如输入账号密码时添加随机延迟(await page.waitForTimeout(Math.random() * 1000 + 500)),避免触发Facebook反爬机制。
  • 优先使用Meta开发者后台创建的官方测试用户,降低主账号被封风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:37:04