20

如何处理弹出窗口并访问弹出窗口以对其进行一些操作。

const puppeteer = require('puppeteer');

async function run() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.click(Launchpopup);
}
4

5 回答 5

7

所以我要做的是在他们的主页上登录 facebook,然后导航到我想去的页面,我点击它的 facebook 登录按钮。然后,一旦弹出窗口发生,下面的代码将单击使用 facebook 按钮登录。

await page.click('[service_name="facebook"]')
const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); 
const popup = await newPagePromise;
await popup.waitForSelector('[name="__CONFIRM__"]')
const confirm = await popup.$('[name="__CONFIRM__"]')
await popup.click('[name="__CONFIRM__"]')
await page.waitFor(2000);
await page.goto('your login page'); $
于 2019-07-29T02:24:17.767 回答
6

从 0.13.0 版本开始,您可以使用以下代码:

... code to open popup...
const pages = await browser.pages(); // get all open pages by the browser
const popup = pages[pages.length - 1]; // the popup should be the last page opened
于 2018-03-03T19:13:08.910 回答
6

这段代码是 Typescript,但你明白了:

async function waitForPopupMatching(
  browser: Puppeteer.Browser,
  regex: RegExp,
  openAction: () => Promise<void>,
  timeout: number = 30000,
): Promise<Puppeteer.Page> {
  const promise = new Bluebird<Puppeteer.Target>(resolve => {
    const listener = async (target: Puppeteer.Target) => {
      if (target.type() === 'page' && regex.test(target.url())) {
        browser.removeListener('targetcreated', listener);
        resolve(target);
      }
    };
    browser.addListener('targetcreated', listener);
  }).timeout(timeout);

  await openAction(); // Typically a mouse click

  const tgt = await promise;
  return await tgt.page();
}
于 2018-03-10T00:39:27.120 回答
2

您应该查看 v0.12.0-alpha 的文档,它描述了如何与对话框交互。

const puppeteer = require('puppeteer');

puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://example.com');
  page.on('dialog', async dialog => {
    console.log(dialog.message());
    await dialog.dismiss();
    await browser.close();
  });
  page.evaluate(() => alert('1'));
});

相关文档可以在这里找到

于 2017-10-13T08:42:41.333 回答
0

Puppeteer 弹出事件

从 puppeteer 版本 1.12 开始,页面中添加了一个特殊的“弹出”事件,它允许您捕获新的选项卡和弹出窗口。我们通过重写第一个示例来使用它:

const puppeteer = require('puppeteer');         // puppeteer

const browser = await puppeteer.launch();       // run browser
const page = await browser.newPage();           // open new tab
await page.goto('https://example.com');            // go to site.com       

await page.waitForSelector('#goto');            // wait object load
const link = await page.$('#goto');             // declare object

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

await link.click();                        // click, a new tab  opens
const newPage = await newPagePromise; 
await newPage.close();             // close it, for example
await browser.close();                          // close browser
于 2022-02-10T23:45:08.367 回答