#javascript #node.js #async-await #puppeteer
#javascript #node.js #асинхронное ожидание #кукловод
Вопрос:
Я хотел бы имитировать щелчок по галерее ( <div class="image">
), но когда я пытаюсь запустить этот код, я получаю ошибку document not defined.
async function gallery(page) {
await page.waitFor(3000);
await page.click(document.querySelector('.div image'));
}
В чем здесь проблема? Как я могу использовать document.Выбор запроса корректен с помощью puppeteer?
Комментарии:
1. В узле нет документа.
2. Но в браузере puppeteer есть, правда? Поэтому я должен иметь возможность использовать document. querySelector
3. Я собрал другие элементы с кодом
const partnersOnPage = await page.evaluate(() => Array.from(document.querySelectorAll('div.listing__card a.listing__thumbnail')) .map(element => element.href.substring(element.href.lastIndexOf('/') 1)) );
, поэтому в nodejs и puppeteer есть document.4. Я думаю
document
, что он будет доступен только внутриpage.avaluate
(в соответствии с github.com/GoogleChrome/puppeteer ) Попробуйте:async function gallery(page) { await page.waitFor(3000); await page.evaluate(() => { document.querySelector('div.image').click(); }) }
5.
But with puppeteer's browser there is, rigth?
Нет, документа по-прежнему нет, у Chromium есть документ, и это то, что контролирует puppeteer. По сути, вам просто нужно вызвать click внутри экземпляра chromium, ..page.evaluate
это один из способов, но есть более простой вариантpage.$('div.image').click()
. Я был на мобильном телефоне со своим первоначальным ответом, поэтому не мог дать полный ответ, но надеялся, что это могло дать вам подсказку о том, что было не так .. 🙂
Ответ №1:
Я думаю, что документ будет доступен только внутри page.evaluate
(согласно документации puppeteer)
Попробуйте:
async function gallery(page) {
await page.waitFor(3000);
await page.evaluate(() => {
document.querySelector('div.image').click();
})
}
Комментарии:
1. Как вы используете его при отладке в консоли? Кажется, он работает нормально, но когда в режиме отладки с разрывом внутри page.eval он выдает ошибку doc is not defined
Ответ №2:
вы вызываете недопустимый элемент, вы можете проверить этот документ
await page.evaluate(() => {
document.querySelector('div.image').click();
});
Комментарии:
1. У меня все еще есть документ, который тоже не определен
div.image
.2. вы можете проверить это