我正在使用Puppeteer试图在加载所有图像但不能让它工作后截取网站。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