【问题标题】:Puppeteer - Authorize device (2FA)Puppeteer - 授权设备 (2FA)
【发布时间】:2020-03-27 23:10:14
【问题描述】:

有没有办法授权 Puppeteer 进行 2FA 身份验证?

场景:

  1. 运行 Puppeteer 并访问受 2FA 保护的 URL
  2. 输入凭据并等待重定向
  3. 请求一次性密码
  4. 输入密码
  5. 等待重定向
  6. 关闭 Puppeteer 实例

  7. 运行 Puppeteer 并访问受 2FA 保护的 URL

  8. 应加载受保护的页面,不再要求输入密码

这种情况在我的情况下不起作用:(

还有其他库可以成功通过这种情况吗?

【问题讨论】:

  • 场景中有很多步骤 :) 有什么特别的困难吗?
  • 是的,每当我运行脚本时,我都会被要求“授权设备”发出一次性密码,不管我是否已经通过了这一步......
  • 那么你应该编辑你的问题并详细询问那个。您是否以某种方式保存第 6 步和第 7 步之间的浏览状态?

标签: puppeteer two-factor-authentication one-time-password


【解决方案1】:

根据情况的性质,使用 puppeteer 处理 2FA 有两种可能的情况(从您提出问题的方式来看并不完全清楚)。

  1. 复制会话数据(在这种情况下,你不能让别人第二次为你提供代码,你以后需要完全绕过它):

我将假设您正在处理的网站正在浏览器上执行某种分析,以确定是否提示输入 2FA 代码。以我的经验,有时会有一个你无法控制的随机元素,但复制确切的浏览器状态(用户数据、cookies、一切)是一个开始。将其与之前已正确回答的一致 IP 地址配对,我认为机会非常非常大。

在这里查看我的code,或者如果这太重了,这里是我用来保存会话数据的函数的简单实现:simple code。简而言之,我正在转换会话数据、cookies——所有能够区分 chromium 实例并将其填充到 base64 字符串中的东西,然后我只需加载该数据并假设浏览器之前的确切状态。我很确定这就是你想要的。

  1. 交互式机器人

我不确定这是否适用于您的用例,但我遇到了一种情况,我需要在 puppeteer 正在执行登录过程时从用户的电话/电子邮件中实时提取 2FA 代码.浏览器无法重新启动,因为 2FA 代码将不再有效。这不是一个小问题。我最终使用了 Redis 并构建了一个框架 puppeteer-theater,它在我遇到的几乎所有抓取/自动化工作流程中解决了这个用例。

如果您需要具体帮助,请随时与我们联系。

【讨论】:

  • Nico,谢谢你非常详细的阐述。我正在处理近 3000 个内部网页,其中大多数都有自己的细节......但是,我已经解决了我的基本问题(没有保持浏览器授权)切换到“selenium-webdriver”“ - 它工作了-the-box。再次感谢您...
  • 嘿@Nico 恐怕你的第一个答案中的链接现在是 404ing .. 真的很期待他们 :)
  • 只是环顾四周,发现上面答案中两个 URL 的新位置
  • 还有其他代码和指南,如果你足够努力的话,例如:gist.github.com/jeroenvisser101/… 这来自搜索“恢复会话,包括 cookie puppeteer”
猜你喜欢
  • 2015-10-16
  • 2014-05-29
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多