【发布时间】:2017-04-14 21:27:05
【问题描述】:
当前无头 Chrome 的问题是没有 API 来呈现整个页面,您只能获得您在 CLI 参数中设置的“窗口”。
我正在使用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远程界面可行?
【问题讨论】:
标签: node.js google-chrome headless-browser