'Get Puppeteer Page/Frame Handle for new page after `ElementHandle.click()`
Using puppeteer
, I have a specific page that I am web-scraping for data and screenshot-ing for proof that the data is correct. The web page itself includes a button for creating a printer friendly version of the page. The button itself is implemented as an input of type button
with no target
attribute. Still, once clicked, the button opens the printer friendly version on a new page(tab) at about:blank
that automatically opens up chrome's print dialog.
Whenever a new page opens up, I've typically done browser.waitForTarget()
to try to capture the new target and work from there. The issue is that with any variation of code, I'm never able to find a Page
that matches the page that was opened up. The closest I get is finding a Target
of type other
and a url of chrome://print
.
Is there any way to find this type of target easily and even more get it's page (since target.page()
only returns a page if the target.type() === 'page'
? As a bonus, I'd like a way to potentially dismiss or ignore the window's print dialog, possibly even cancel.
Solution 1:[1]
You need to do the following to capture a new browser window:
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
let page1;
browser.on("targetcreated", async (target) => {
if (target.type() === "page") {
page1 = await target.page();
}
});
Or you can find the desired page using browser.pages()
method. See the documentation for more information.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Mikhail Zub |