СИТУАЦИЯ:
Я сейчас учусь царапать с помощью кукловода.
По какой-то причине мой текущий код дает мне эту ошибку:
«UnhandledPromiseRejectionWarning: Ошибка: ошибка оценки: ReferenceError: страница не определена»
(ИЗМЕНИТЬ)
Проблема заключается в том, что при загрузке страницы и нажатии на каждый элемент данные не очищаются, потому что код, похоже, не ждет загрузки после нажатия каждого элемента.
Вот что должен делать код:
Загрузить веб-страницу (ОК)
Нажмите на каждый элемент (ОК)
Каждый раз, когда нажимается элемент, некоторые данные загружаются в div слева, это данные, которые я хочу очистить. (в настоящее время не происходит)
Для этого я заставляю код ждать 2 секунды после щелчка, чтобы данные загрузились. (в настоящее время не происходит)
ВОПРОС:
Как я могу это исправить и соответствующим образом очистить указанные данные?
КОД:
const puppeteer = require('puppeteer');
let scrape = async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('https://website.com');
await page.setViewport({width: ..., height: ...});
const result = await page.evaluate(() => {
let data = [];
let elements = document.querySelector('.class1').querySelectorAll('.class2');
for (var element of elements){
page.click(element);
page.waitFor(2000);
let 1 = document.querySelector('.class0').querySelector('.class3').getAttribute("data-1");
let 2 = document.querySelector('.class0').querySelector('.class4').innerText;
let 3 = document.querySelector('.class0').querySelector('.class5').innerText;
let 4 = document.querySelector('.class0').querySelector('.class6').innerText;
data.push({1: 1, 2: 2, 3: 3, 4: 4}); // Push an object with the data onto our array
}
return data; // Return our data array
});
browser.close();
return result; // Return the data
};
scrape().then((value) => {
console.log(value); // Success!
});
async
в оцениваемую функцию? Вам нужно, чтобыawait
подождал две секунды, иначе он просто перейдет к следующему шагу. В качестве альтернативы вы можете использовать обычныйsetTimeout
и поместить остальную часть вашего кода в обратный вызов. 21.07.2018