私はPuppeteerを使用して、すべての画像がロードされても動作することができなくなった後にウェブサイトのスクリーンショットを撮ろうとします。ここで人形はすべての画像がロードされるのを待ってからスクリーンショットを撮る
は、私がこれまで持っているコードですが、私は例のウェブサイトとしてhttps://www.digg.comを使用しています:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.digg.com/');
await page.setViewport({width: 1640, height: 800});
await page.evaluate(() => {
return Promise.resolve(window.scrollTo(0,document.body.scrollHeight));
});
await page.waitFor(1000);
await page.evaluate(() => {
var images = document.querySelectorAll('img');
function preLoad() {
var promises = [];
function loadImage(img) {
return new Promise(function(resolve,reject) {
if (img.complete) {
resolve(img)
}
img.onload = function() {
resolve(img);
};
img.onerror = function(e) {
resolve(img);
};
})
}
for (var i = 0; i < images.length; i++)
{
promises.push(loadImage(images[i]));
}
return Promise.all(promises);
}
return preLoad();
});
await page.screenshot({path: 'digg.png', fullPage: true});
browser.close();
})();
digg.comの場合、画像の一部がスクロールしたときにのみ読み込まれるため、スクロール後に画像が読み込まれるのを待つ方法がわかりますか? –
あなたのソリューションはうまくいくと思いますが、diggのホームページの仕組みを勉強した後、少しずつスクロールしなければならないと言いますが、あなたのコードではほぼ完全なページにジャンプします。ソースを見てください - ビューポートにある場合にだけロードする遅延ロードイメージがたくさんあります。 – Vaviloff
私はそれがすべきだと思う:{"waitUntil": "networkidle"}の代わりに{waitUntil: "networkidle"} – boblapointe