Javascript 幻影不';不要渲染页面
今天我在许多网站上做了一些研究,为了避免手动查看,我准备了phantomjs,使用提出的解决方案来渲染它们。没什么特别的。在网站数组中循环并呈现所有生成的页面 奇怪的是,有些网站没有被正确呈现。其中,我有一个: 为了简化,我创建了另一个只运行此页面的脚本:Javascript 幻影不';不要渲染页面,javascript,phantomjs,Javascript,Phantomjs,今天我在许多网站上做了一些研究,为了避免手动查看,我准备了phantomjs,使用提出的解决方案来渲染它们。没什么特别的。在网站数组中循环并呈现所有生成的页面 奇怪的是,有些网站没有被正确呈现。其中,我有一个: 为了简化,我创建了另一个只运行此页面的脚本: var page = require('webpage').create(); page.viewportSize = { width: 1920, height: 960 }; page.clipRect = { top: 0, left
var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 960 };
page.clipRect = { top: 0, left: 0, width: 1920, height: 960 };
page.open('http://www.telegraaf.nl/', function(status) {
page.render("screenshot.png");
phantom.exit();
});
它的结尾没有截图。与其他任何一个测试,并完美地工作我忽略了什么吗?它不会呈现屏幕截图,因为页面最初没有
,因此没有要呈现的内容。在PhantomJS的onLoadFinished事件触发后,所有内容(包括主体)都通过JavaScript加载
您需要等待一段时间,以便加载完整的页面。对我来说,简单的5秒钟等待就足够了:
page.open('http://www.telegraaf.nl/', function(status) {
setTimeout(function(){
page.render("screenshot.png");
phantom.exit();
}, 5000);
});
当然,您可以以更为奇特的方式等待,以使其更为健壮,并且不要等待太久:
您可能需要使用
--ignore ssl errors=true
运行PhantomJS(如果PhantomJS成功了,可能还需要使用--ssl protocol=any
)(虽然我在11个有问题的网站中有8个网站需要等待30秒,但我的连接速度可能非常慢)。作为参考,我不需要在这些情况下使用--ignore ssl errors
标志,但最好保持设置以防万一。谢谢!我也不需要忽略ssl错误,但我注意到日志中有一些请求错误(见下图),所以我添加了命令行选项,它们就消失了。30秒有点多。也许你可以通过自定义广告阻止缩短几秒钟。通过页面.onResourceRequested
事件,你可以根据自定义条件中止一些请求,如请求的域。在浪费一整天的时间添加cliArgsCap.add之后(“--ignore ssl errors=true”)帮助我解决了此问题。有些人认为此ssl问题不允许正确加载页面。但FF/Chrome工作正常