node.js - 使用 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 正在由自动化测试软件控制。”。所以我会假设我可以以某种方式获得这些信息。
感谢您的帮助!
解决方案
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
推荐阅读
- excel - 如何显示(或防止隐藏)从 PowerShell 创建的 Excel 工作表
- google-colaboratory - Can you hide code cell outputs in Google Colab?
- javascript - 如果请求成功,axios 错误响应返回 undefined
- c# - JSONException:type java.lang.String 无法转换为 JSONArray
- vue-cli - 使用 Vue CLI 生成新项目时,应用程序如何知道在引导时查找 main.js
- python - How to create test cases based off of truth table values?
- python - Floyd Warshall algorithm not working as intended
- maven - Transitive Dependency: Using Elasticsearch Rest High Client problem in AEM
- c# - Adding a character from the end of a string
- qt - 在 Qt Installer Framework 中使用 Qt Quick Controls 2 UI