Кукловод: не найден узел для селектора - модал входа в iframe - PullRequest
1 голос
/ 12 февраля 2020

Я хочу go на страницу входа в систему, нажмите на имя пользователя и введите имя пользователя.

Это то, что у меня есть:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: false, slowMo: 200 });
    const page = await browser.newPage();
    await page.goto('https://fantasy.espn.com/basketball/team');
    await page.waitFor(2000);
    await page.click('#did-ui-view > div > section > section > form > section > div:nth-child(1) > div > label > span.input-wrapper > input');
    await page.waitFor(2000);
    await page.type('#did-ui-view > div > section > section > form > section > div:nth-child(1) > div > label > span.input-wrapper > input', 'hello', { delay: 100 });  
    await browser.close()
})();

Я продолжаю чтобы получить эту ошибку:

 Error: No node found for selector: #did-ui-view > div > section > section > form > section > div:nth-child(1) > div > label > span.input-wrapper > input

Я не понимаю ее; когда я делаю, document.querySelector в консоли с этим путем, мне возвращают ввод; почему он не может найти этот узел?

1 Ответ

1 голос
/ 12 февраля 2020

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

let iframeHandle = await page.$('#disneyid-iframe');
let frame = await iframeHandle.contentFrame();
let inputElement = await frame.waitForSelector('#did-ui-view > div > section > section > form > section > div:nth-child(1) > div > label > span.input-wrapper > input')
await inputElement.type('hello', { delay: 100 });

Однако существует проблема с кадрами вне процесса, поэтому вам нужно запустить хром с --disable-features=site-per-process. Должно работать следующее:

const browser = await puppeteer.launch({headless: false, args: ['--disable-features=site-per-process']});
const page = await browser.newPage();
await page.goto('https://fantasy.espn.com/basketball/team', {waitUntil: ['load', 'domcontentloaded','networkidle0']});
await page.waitFor(5000);
let iframeHandle = await page.$('#disneyid-iframe');
let frame = await iframeHandle.contentFrame();
let inputElement = await frame.waitForSelector('#did-ui-view > div > section > section > form > section > div:nth-child(1) > div > label > span.input-wrapper > input')
await inputElement.type('hello', { delay: 100 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...