将幻像js处理页面保存到带有绝对URL的html文件中

时间:2013-01-28 00:29:29

标签: phantomjs absolute

我希望在通过所有网址将文档加载到特殊文件名后保存我的特殊网页,并将链接转换为绝对网址,例如wget -k

//phantomjs
var page = require('webpage').create();
var url = 'http://google.com/';
page.open(url, function (status) {
var js = page.evaluate(function () {
return document;
});
console.log(js.all[0].outerHTML);
phantom.exit();
});

例如我的html内容是这样的:

<a href="//page.html">page</a>

必须是

<a href="http://google.com/page.html">page</a>

这是我的示例脚本,但如何使用phantomjs转换所有网址和wget -k等链接?

2 个答案:

答案 0 :(得分:6)

您可以修改最终的HTML,使其具有<base>标记 - 这将使所有相对网址生效。在您的情况下,请尝试将<base href="http://google.com/">放在页面上的<head>之后。

答案 1 :(得分:2)

PhantomJS并不真正支持它不仅仅是一个HTTP客户端。想象一下,如果有一个JavaScript代码可以在主着陆页上提取带有图像的随机内容。

可能或不适合您的解决方法是替换DOM中的所有引用资源。这可以使用一些CSS3选择器(href用于a,src用于img等)和手动路径解析相对于基本URL。如果您确实需要跟踪并登记每个资源网址,请使用network traffic monitoring功能。

最后但并非最不重要的一点是,要获取生成的内容,您可以使用page.content代替evaluateouterHTML的复杂舞蹈。