在 Node Server 里截取网页生成图片
使用 phantomjs-node 可以方便的实现上面的功能
安装 1 $ npm install phantom --save
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 const phantom = require ('phantom' );(async function ( ) { const instance = await phantom.create(); const page = await instance.createPage(); await page.on('onResourceRequested' , function (requestData ) { console .info('Requesting' , requestData.url); }); const status = await page.open('https://stackoverflow.com/' ); const content = await page.property('content' ); console .log(content); await instance.exit(); })();
上例就是 phantomjs-node
官方的示例
它把页面的内容打印了出来
如果我们想把页面内容以 pdf 或 png 的格式存下来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 const phantom = require ('phantom' );(async function ( ) { const instance = await phantom.create(); const page = await instance.createPage(); await page.property('viewportSize' , { width : 1024 , height : 600 }); const status = await page.open('https://stackoverflow.com/' ); console .log(`Page opened with status [${status} ].` ); await page.render('stackoverflow.pdf' ); console .log(`File created at [./stackoverflow.pdf]` ); await instance.exit(); })();
在我的项目里,是将一个 HTML 字符串塞给了 phantom
出现一个问题:图片资源没有显示
查了相关 issue 及 PR
最后,监听了 page 的 onLoadFinished 事件
1 2 3 4 5 page.on('onLoadFinished' , async function (requestData ) { console .log('finished' ) });