2017-10-10 1604 views
4

如何處理彈出窗口並訪問彈出窗口以對其執行一些操作。如何處理puppeteer中的彈出窗口

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); 
} 

回答

0

您應該查看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')); 
}); 

相關docs can be found here

+0

是啊,我能與對話互動,但我如何處理popup的 –

+0

您是否在談論不是瀏覽器原生的彈出窗口,而是使用html和css生成的? – tomahaug

+0

抱歉不清楚是啊我說的是彈出窗口 –

0

由於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 
2

此代碼是打字稿,但你的想法:

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(); 
} 
+0

謝謝你的解決方案 –

相關問題