Как щелкать элементы в окнах всплывающих / новых вкладок в Puppeteer - PullRequest
0 голосов
/ 10 сентября 2018

Я использовал следующий пример для всплывающего окна / newtab, но методы, доступные мне после этого, ограничены. Я действительно могу делать только такие вещи, как захват URL-адреса и закрытие вкладки (среди прочего).

Я пытаюсь взаимодействовать с всплывающим знаком входа в Google / Twitter, но у кукловода нет решения для нескольких дескрипторов окон, по крайней мере при попытке взаимодействия, как в элементах клика.

const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()));
await page.click('my-link'); //Opens pop-up window
const newPage = await newPagePromise;

Я ищу что-то вроде этого (в дополнение к коду, написанному выше):

const element = await newPage.$(selector);
await element.click();

Это не работает. У кого-нибудь еще была такая необходимость?

1 Ответ

0 голосов
/ 11 сентября 2018

Возьми это с зерном соли. Я работаю с кукловодом так, что документация API не рекомендует, поэтому мне пришлось перевести кое-что из того, что вы видите ниже.

Я с удовольствием отвечу на любые дополнительные вопросы.

В целом, это решение позволяет вам открыть новую вкладку / всплывающее окно и взаимодействовать с этой вкладкой / всплывающим окном. Мне даже удалось закрыть всплывающее окно и переключиться обратно на исходную страницу, которая не упоминается ниже.

const newPagePromise = getNewPageWhenLoaded()
await page.click('my-link'); //Opens pop-up window
const newPage = await newPagePromise;
newPage = newPage.mainFrame();
const element = await newPage.waitForSelector('img');
newPage.click(element);

function getNewPageWhenLoaded() {
    return new Promise((x) => browser.once('targetcreated', async (target) => {
        const newPage = await target.page();
        const newPagePromise = new Promise(() => newPage.once('domcontentloaded', () => x(newPage)));
        const isPageLoaded = await newPage.evaluate(() => document.readyState);
        return isPageLoaded.match('complete|interactive') ? x(newPage) : newPagePromise;
    }));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...