Три способа получить открытую вкладку:
- переопределить
window.open
и установить все (или только элемент, на который вы щелкнули) target="_blank"
атрибуты на "_self"
, чтобы открыть URL в та же вкладка:
await page.evaluateOnNewDocument(() => {
window.open = (new_url) => {window.location.href = new_url}
for (let i of document.querySelectorAll('[target="_blank"]'))
i.setAttribute('target', '_self')
});
Примечание: это может не работать в кадрах с различным происхождением.
получить всплывающую страницу, используя
'popup'
событие:
const [popup] = await Promise.all([
new Promise(resolve => page.once('popup', resolve)),
//replace the selector with the selector of the button or link you're clicking
page.click('a[target=_blank]'),
]);
получить недавно открытую вкладку от
pages()
:
const pages = await browser.pages();
const popup = pages[pages.length -1];
Затем вы можете найти элемент на всплывающей странице. Например, в вашем коде:
await page.waitFor(2000);
const pages = await browser.pages();
const popup = pages[pages.length -1];
let [element] = await popup.$x('//span[@class="_2aK_gu"]');
let text = await popup.evaluate(element => element.textContent, element);