Почему при попытке щелкнуть по кнопке Puppeteer выбран неправильный элемент? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать автоматический логин через кукловода, который регистрирует меня на Yahoo и автоматически перенаправляет все мои аккаунты на одно доменное имя.

У меня очень неприятная проблема, хотя, когда я пытаюсь нажать кнопку Next с помощью команды await page.click('[type=submit]');, вместо этого, кажется, выбирается добавление.

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

Изображение показывает экран, который я вижу, когда пытаюсь войти в систему, когда нажата кнопка отправки, меня переводят в систему безопасности nord add

Чтобы лучше объяснить , nord security add выбирается, открывая новую вкладку не так, как задумано. Любая помощь очень ценится!

const puppeteer = require('puppeteer');


async function main() {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.setViewport({width: 800, height: 500})
await page.goto('https://login.yahoo.com');


await page.type('[name=username]', 'YAHOO ACCOUNT LISTED HERE');
await this.page.waitFor(2000);
await page.click('[type=submit]');
// click and wait for navigation

}

main();

1 Ответ

0 голосов
/ 30 марта 2020

Проблема JavaScript Контекст,

Чтобы понять это

  • go до https://login.yahoo.com в chrome
  • инструменты open dev меняют java контекст скрипта (выделено на изображении) примерно на пустое
  • , затем запускает запрос $ ("[type = 'submit']") // вернет ноль
  • затем измените контекст сценария java на верх, затем выполните запрос снова $ ([type = 'submit'] ") // вернет элемент enter image description here

Решение:

вы можете обратиться к нужному iframe с помощью метода page.frames (). После того, как вы найдете нужный iframe, вы можете использовать frame.evaluate для оценки внутри контекста фрейма.

// найти фрейм, который нас интересует

// стоимость iframe = page.frames (). find (iframe => iframe.url (). includes ('localhost '));

// вычисление внутри определенного iframe

// ожидание iframe.evaluate (() => console.log (' Смотри! Я внутри iframe! '));

...