Reputation: 148624
Looking at this simple code :
const browser = await puppeteer.launch({headless: false});
const page: Page = await browser.newPage();
await page.evaluate((a) =>
{
//This will open a new page :
([...document.querySelectorAll("a")][0] as HTMLElement).click();
});
If the clicked A
(anchor) element has target="_blank"
, then the page would be opened as a new page.
It's not the original page object.
Question:
How can I get the new page object after a user has clicked on <a target="_blank"
?
Upvotes: 2
Views: 3521
Reputation: 3323
This can be done like this:
const [newTarget] = await Promise.all([
// Await new target to be created with the proper opener
new Promise(x => browser.on('targetcreated', target => {
if (target.opener() !== page.target())
return;
browser.removeListener('targetcreated', arguments.callee);
x();
})),
page.click('link'),
])
// Attach to the newly opened page.
const newPage = await newTarget.page();
Upvotes: 2