如何在任何网站上正确使用 PhantomJS?
How to properly use PhantomJS for any website?
我正在尝试使用 PhantomJS 捕获网站,特别是我正在使用 Pageres。
本站获得:
- AngularJS
- LocalStorage 使用
- AJAX 请求 API
所以,我在本地测试,但没有得到预期的结果,有时屏幕截图会出现错误 - 呈现内容的 部分 ,有时不会呈现完整内容。
看起来 Pagerer 确实没有足够的时间在网站完全加载后截取屏幕截图。我 已经添加了延迟选项 但无论如何它都会失败,实际上我可以说它在没有延迟选项的情况下效果更好。
这就是应该呈现的内容:
当效果最好时,这就是我得到的:
这是我的渲染代码:
var pageres = new Pageres({})
.src('fantastica.a2015.mediotiempo.com', ['1440x900'], {delay: 3, crop: false});
pageres.on('warn', function (err,obj) {console.log(err,obj)});
pageres.run(function (err, screenshot) {
screenshot[0].pipe(response);
});
And, (I know there would be MUCH code to explain now) this is JS code being rendered.
有什么特别的建议吗?
- 注意 Phantom 版本之间的差异。
Phantom 1.9.x(Pageres 使用的)是几年前的浏览器引擎(Chrome 13 是最接近的等效项)并且不会渲染很多 HTML5 特征。
Phantom 2.x 是一个更现代的 webkit 引擎。但是因为: a) 因为他们还没有制作出现成的 linux 二进制文件; b) 一些小的 API 变化,像 CasperJS 和 Pageres 这样的项目正在阻止支持它。根据 https://github.com/sindresorhus/pageres/issues/77 中的评论,如果您制作自己的二进制文件并对其进行符号链接,它就可以工作。
另请注意,SlimerJS 是 PhantomJS 的替代品,它基于 Firefox 而不是 WebKit。没有基于 Blink 的类似项目(获取现代 Chrome 如何呈现它们的屏幕截图),但是有用于 IE 的 TrifleJS。 (但是 Pageres 页面说支持其他引擎不是该项目的目标。)
- 等待 DOM 个元素出现,而不是使用延迟。
Ajax 调用、延迟加载等让事情变得很难预测。因此,进入轮询循环,直到屏幕截图中您想要的 DOM 元素现在可见之前,不要截取屏幕截图。对于这种情况,CasperJS 有 waitForSelector()
。 PhantomJS 的级别稍低 waitFor()
.
我认为 pageres 需要一些技巧才能添加此功能。
我正在尝试使用 PhantomJS 捕获网站,特别是我正在使用 Pageres。
本站获得:
- AngularJS
- LocalStorage 使用
- AJAX 请求 API
所以,我在本地测试,但没有得到预期的结果,有时屏幕截图会出现错误 - 呈现内容的 部分 ,有时不会呈现完整内容。
看起来 Pagerer 确实没有足够的时间在网站完全加载后截取屏幕截图。我 已经添加了延迟选项 但无论如何它都会失败,实际上我可以说它在没有延迟选项的情况下效果更好。
这就是应该呈现的内容:
当效果最好时,这就是我得到的:
这是我的渲染代码:
var pageres = new Pageres({})
.src('fantastica.a2015.mediotiempo.com', ['1440x900'], {delay: 3, crop: false});
pageres.on('warn', function (err,obj) {console.log(err,obj)});
pageres.run(function (err, screenshot) {
screenshot[0].pipe(response);
});
And, (I know there would be MUCH code to explain now) this is JS code being rendered.
有什么特别的建议吗?
- 注意 Phantom 版本之间的差异。
Phantom 1.9.x(Pageres 使用的)是几年前的浏览器引擎(Chrome 13 是最接近的等效项)并且不会渲染很多 HTML5 特征。
Phantom 2.x 是一个更现代的 webkit 引擎。但是因为: a) 因为他们还没有制作出现成的 linux 二进制文件; b) 一些小的 API 变化,像 CasperJS 和 Pageres 这样的项目正在阻止支持它。根据 https://github.com/sindresorhus/pageres/issues/77 中的评论,如果您制作自己的二进制文件并对其进行符号链接,它就可以工作。
另请注意,SlimerJS 是 PhantomJS 的替代品,它基于 Firefox 而不是 WebKit。没有基于 Blink 的类似项目(获取现代 Chrome 如何呈现它们的屏幕截图),但是有用于 IE 的 TrifleJS。 (但是 Pageres 页面说支持其他引擎不是该项目的目标。)
- 等待 DOM 个元素出现,而不是使用延迟。
Ajax 调用、延迟加载等让事情变得很难预测。因此,进入轮询循环,直到屏幕截图中您想要的 DOM 元素现在可见之前,不要截取屏幕截图。对于这种情况,CasperJS 有 waitForSelector()
。 PhantomJS 的级别稍低 waitFor()
.
我认为 pageres 需要一些技巧才能添加此功能。