我在用傀儡师 https://github.com/GoogleChrome/puppeteer尝试在所有图像加载后截取网站的屏幕截图,但无法使其正常工作。
这是到目前为止我正在使用的代码https://www.digg.com 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();
})();
有一个内置选项 https://github.com/puppeteer/puppeteer/blob/v18.2.1/docs/api/puppeteer.page.goto.md#remarks为了那个原因:
await page.goto('https://www.digg.com/', {"waitUntil" : "networkidle0"});
networkidle0
- 当网络连接数不超过 0 且至少 500 毫秒时,认为导航已完成
networkidle2
- 当网络连接不超过 2 个并持续至少 500 毫秒时,认为导航已完成。
当然,如果您使用的是像 Twitter 这样的无限滚动单页应用程序,那么它就不起作用了。
Puppeteer GitHub 问题 #1552 https://github.com/puppeteer/puppeteer/issues/1552解释背后的动机networkidle2
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)