5

我想在通过所有 url 将文档加载到特殊文件名后保存我的特殊网页,并且链接转换为绝对 url,例如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>

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

4

2 回答 2

6

您可以修改最终的 HTML 以使其具有<base>标签 - 这将使所有相对 URL 正常工作。在您的情况下,请尝试将<base href="http://google.com/"><head>放在页面上。

于 2013-04-23T12:57:44.217 回答
2

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

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

最后但并非最不重要的一点是,要获得可以使用的生成内容,而不是使用和page.content进行复杂的舞蹈。evaluateouterHTML

于 2013-01-29T06:04:41.893 回答