目前无头Chrome的问题是没有API来渲染整个页面,只有你在CLI参数中设置的“窗口”。无头Chrome渲染整页
我现在用的是chrome-remote-interface
模块,这是捕获例如:
const fs = require('fs');
const CDP = require('chrome-remote-interface');
CDP({ port: 9222 }, client => {
// extract domains
const {Network, Page} = client;
Page.loadEventFired(() => {
const startTime = Date.now();
setTimeout(() => {
Page.captureScreenshot()
.then(v => {
let filename = `screenshot-${Date.now()}`;
fs.writeFileSync(filename + '.png', v.data, 'base64');
console.log(`Image saved as ${filename}.png`);
let imageEnd = Date.now();
console.log('image success in: ' + (+imageEnd - +startTime) + "ms");
client.close();
});
}, 5e3);
});
// enable events then start!
Promise.all([
// Network.enable(),
Page.enable()
]).then(() => {
return Page.navigate({url: 'https://google.com'});
}).catch((err) => {
console.error(`ERROR: ${err.message}`);
client.close();
});
}).on('error', (err) => {
console.error('Cannot connect to remote endpoint:', err);
});
为了呈现完整的网页,一个慢和黑客的解决办法是局部呈现。设置固定高度并滚动浏览页面,并在每X像素后截取屏幕截图。问题是如何驱动滚动部分?注入自定义JS还是可以通过Chrome远程接口实现?
这是一个好的开始,但延迟加载的图像将显示其占位符 – Drakes