首页 > 解决方案 > 使用 puppeteer 从 facebook 登录到 oauth 对话框

问题描述

我正在尝试连接一个网站,其中一种登录方式是使用 Facebook 登录(它会打开一个弹出窗口,您可以输入用户名/密码或简单地确认您是否已经登录,你知道该怎么做...)。

好吧,我正在尝试将它与 Puppeteer 交互,但奇怪的是我没有得到该页面。我的意思是,我在非无头模式下工作,所以我可以看到弹出窗口,它看起来就像Puppeteer看不到它......

很多页面都说要尝试这样的事情:

const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); 
await page.click('<some selector>');
const popup = await newPagePromise;

但这并没有给我一个我可以使用(popup: null)的“弹出窗口”。我也试图让它等待 10 秒,但也没有运气......

查看 all_pages:let all_pages = await browser.pages();时,该数组有 1 页。我的原始页面...没有 Facebook 弹出窗口。(但它显示在我的屏幕上!)

我在这里想念什么?如何在我的自动化过程中获取这些信息?顺便说一句:Facebook 弹出窗口还显示“Chrome 正在由自动化测试软件控制。”。所以我会假设我可以以某种方式获得这些信息。

感谢您的帮助!

标签: node.jsfacebookpuppeteer

解决方案


browser用于与 Chromium 连接,仅在开始时调用。与使用 与主页交互的方式const page = await browser.newPage()相同,一旦弹出窗口出现,您也必须使用相同的变量,另一方面,'targetcreated'不是您要查找的事件,而是'popup'。请记住,它page提供了与选项卡交互的方法,因此,更新代码:

const newPagePromise = new Promise(event => page.once('popup', event));

这可以在 puppeteer 文档中找到: https ://github.com/puppeteer/puppeteer/blob/v5.2.1/docs/api.md#event-popup


推荐阅读