Так что я использую node.js и Puppeteer, чтобы попытаться очистить определенное количество URL-адресов изображений с бесконечно прокручиваемой веб-страницы (я просто использую домашнюю страницу reddit для тестирования, но заменяю вашу собственную, если хотите), но массив, который должен содержать их, возвращается пустым.
Я даже поместил все это в анонимную асинхронную функцию, чтобы я мог принудительно установить ее на await
, на случай, если проблема с синхронизацией:
const puppeteer = require('puppeteer');
var pBrowser = await puppeteer.launch();
console.log("\t* Browser launched");
var pPage = await pBrowser.newPage();
console.log("\t* Page launched");
let sUrl = foo;
await pPage.goto(sUrl);
let iItemCount = 10;
let tImageSrcs = [];
await async function () {
let iPreviousHeight;
console.log("Starting search at the top");
while (tImageSrcs.length < iItemCount) {
tImageSrcs = await pPage.evaluate( function() {
let tItems = Array.from(document.images, e => e.src );
console.log("\t\t* "+tItems.length+" images overall found within this section; trimming...");
tItems = tItems.filter( sImage => [".jpg",".png"].includes(sImage.substring(sImage.length-4)) );
console.log("\t\t* "+tItems.length+" images after filtering");
return tImageSrcs.concat(tItems);
});
console.log("\t* "+tImageSrcs.length+" appropriate images sourced so far...");
iPreviousHeight = await pPage.evalutate("document.body.scrollHeight");
await pPage.evaluate('window.scrollTo(0, document.body.scrollHeight)');
console.log("Searching at scroll height "+iPreviousHeight);
await pPage.waitForFunction(`document.body.scrollHeight > ${iPreviousHeight}`);
await page.waitFor(1000);
}
};
console.log("\t* "+tImageSrcs.length+" images sourced");
Но похоже, что он даже не вызывает что-либо в асинхронной функции, потому что независимо от того, удалось ли найти какие-либо изображения или нет, вывод даже не содержит каких-либо из console.log
операторов, включая один в (почти) самом верху асинхронной функции:
* Browser launched
* Page launched
* 0 images sourced