#node.js #puppeteer
Вопрос:
У меня есть этот простой фрагмент кода:
const BUSINESS = 'lalala';
await page.waitForSelector('#searchboxinput').then(
page.evaluate( (BUSINESS) => {
document.querySelector('#searchboxinput').value = BUSINESS
}, BUSINESS)
),
Если я установлю ожидание селектора -> затем, я ожидал бы, что >затем будет выполнено, когда селектор существует, но я получаю значение свойства «Невозможно установить значение «null».
Так что я понимаю этот документ.querySelector(‘#searchboxinput’) == не определено, хотя я полагаю, что это невозможно, поскольку оно выполняется, когда обещание waitForSelector выполнено…
это ошибка или я что-то упускаю?
Ответ №1:
Не уверен, правильно ли я понимаю, поскольку ваш фрагмент синтаксически неполон и не поддается повторению. Но что, если вы используете возвращаемое значение page.waitForSelector()
? Кажется, это работает:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
try {
const [page] = await browser.pages();
await page.goto('https://example.org/');
const BUSINESS = 'lalala';
await page.waitForSelector('a').then((element) => {
page.evaluate((element, BUSINESS) => {
element.textContent = BUSINESS;
}, element, BUSINESS);
});
} catch (err) { console.error(err); }
Комментарии:
1. да, это определенно так, но я не могу понять, почему я не могу найти элемент DOM в контексте браузера после ожидания того же селектора, если вы не используете возвращаемое значение из waitForSelector. Я имею в виду, разве элемент DOM не должен существовать в любом случае в это время?
2. @JoelBonetR Можете ли вы предоставить воспроизводимый код?
3. @JoelBonetR В соответствии с документацией вы можете определить в параметрах, хотите ли вы, чтобы селектор присутствовал в DOM или нет, или присутствовал только визуально.