waitFor () не находит элемент, который отображается на странице - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь запустить свой первый код на кукловоде.

Кукольник v1.20.0

Узел v8.11.3

Npm v5.6.0

Это базовый пример, но он не работает:

const puppeteer = require('puppeteer');

puppeteer.launch({headless: false}).then(async browser => {
  const page = await browser.newPage();

  await page.goto('https://www.linkedin.com/learning/login', { waitUntil: 'networkidle0' });

  console.log(0);
  await page.waitFor('#username');
  console.log(1);

  await browser.close();
});

Когда я запускаю скрипт, запускается хром и я могусм. страницу входа в Linkedin с формой и полем формы #username, но кукловод не находит поле. Он отображает 0, но никогда 1, а затем запускает TimeoutError: waiting for selector "#username" failed: timeout 30000ms exceeded.

Тайм-аут увеличения ничего не меняет, и если я проверяю консоль в хроме, поле там.

Страница входа в Linkedin работает как SPA, и я не знаю, правильно ли я здесь использую.

Заранее спасибо.

1 Ответ

2 голосов
/ 13 октября 2019

Ввод имени пользователя находится внутри iframe. Вы не можете получить к нему доступ таким образом, сначала вам нужно получить доступ к iframe

    await page.goto('https://www.linkedin.com/learning/login');
    await page.waitForSelector('.authentication-iframe');

    var frames = await page.frames();
    var myframe = frames.find(
        f =>
            f.url().indexOf("uas/login") > 0);

    let username = '123456@gmail.com';
    const usernamefild = await myframe.$("#username");
    await usernamefild.type(username, {delay: 10});
...