Tôi đang sử dụng Puppeteer để thử chụp ảnh màn hình trang web sau khi tất cả hình ảnh đã tải nhưng không thể tải hình ảnh.Puppeteer chờ tất cả hình ảnh tải sau đó chụp ảnh màn hình
Đây là mã tôi đã có cho đến nay, tôi đang sử dụng https://www.digg.com như trang web ví dụ:
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();
})();
Trong trường hợp của digg.com, một số hình ảnh chỉ được tải khi bạn cuộn xuống, bạn có biết cách đợi hình ảnh tải sau khi cuộn không? –
Tôi đoán giải pháp của bạn sẽ hoạt động, nhưng - sau khi nghiên cứu cách trang chủ của digg hoạt động - Tôi sẽ nói bạn phải cuộn từng chút một, trong khi trong mã của bạn, bạn nhảy gần như một trang đầy đủ. Tìm trong nguồn - có rất nhiều hình ảnh tải chậm sẽ chỉ tải nếu trong chế độ xem. – Vaviloff
Tôi nghĩ rằng nó nên là: {waitUntil: "networkidle"} thay vì {"waitUntil": "networkidle"} – boblapointe