【发布时间】:2014-12-18 12:24:13
【问题描述】:
打开一个网页并截图。
仅使用 phantomjs:(这是一个简单的脚本,实际上是他们文档中使用的示例脚本。http://phantomjs.org/screen-capture.html
var page = require('webpage').create();
page.open('http://github.com/', function() {
page.render('github.png');
phantom.exit();
});
问题是,对于某些网站(如 github)来说,有趣的是,它们以某种方式检测到而不是提供 phantomjs,并且没有呈现任何内容。结果是github.png是一个空白的白色png文件。
将 github 替换为 say:“google.com”,你会得到一个不错的(正确的)屏幕截图。
起初我认为这是一个 Phantomjs 问题,所以我尝试通过 Casperjs 运行它:
casper.start('http://www.github.com/', function() {
this.captureSelector('github.png', 'body');
});
casper.run();
但我得到与 Phantomjs 相同的行为。
所以我认为这很可能是用户代理问题。如:Github 嗅出 Phantomjs 并决定不显示该页面。所以我像下面这样设置了用户代理但这仍然不起作用。
var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36';
page.open('http://github.com/', function() {
page.render('github.png');
phantom.exit();
});
然后我尝试解析页面,显然某些网站(再次像 github)似乎没有通过网络发送任何内容。
我尝试使用 casperjs 打印标题。对于 google.com,我回复了 Google,但对于 github.com,我回复了 bupkis。示例代码:
var casper = require('casper').create();
casper.start('http://github.com/', function() {
this.echo(this.getTitle());
});
casper.run();
与上述相同,在纯 phantomjs 中也会产生相同的结果。
更新:
这可能是时间问题吗? github只是超级慢吗?我对此表示怀疑,但无论如何让我们测试一下..
var page = require('webpage').create();
page.open('http://github.com', function (status) {
/* irrelevant */
window.setTimeout(function () {
page.render('github.png');
phantom.exit();
}, 3000);
});
结果还是布基斯。所以不,这不是时间问题。
- github 之类的网站如何阻止 phantomjs?
- 我们如何才能可靠地截取所有网页的屏幕截图?要求速度快且无头。
【问题讨论】:
-
最可靠的可能是无头 Firefox 解决方案(watir/webdriver?)
-
@pguardiario,谢谢我看到你的帖子。 Watir 网络驱动程序过去对我来说效果很好,但通常速度较慢。我已经将它用于测试和小型抓取工作......它们是在 Heroku 上部署 watir 或在生产应用程序上部署 ec2 的简单方法吗?
-
所以,我用
--ssl-protocol=tlsv1尝试了this,它产生了this image。现在我看不出图片有什么问题。您还有其他问题吗? -
github上的图片是webfonts。他们过去有问题。你在linux上吗?您使用当前稳定的 PhantomJS 版本(1.9.7)吗?您可能想要编译 PhantomJS 2 或尝试 SlimerJS。
标签: javascript phantomjs screen-scraping casperjs