【问题标题】:Manipulate http response body in CapserJS在 CapserJS 中操作 http 响应体
【发布时间】:2014-11-27 09:55:28
【问题描述】:
我将 CasperJS 1.1.0-beta3 与 PhantomJS 1.9.8 结合使用。
如何在 phantomjs 解析和呈现之前编辑响应正文内容?
类似:
casper.on("resource.received", function(response) {
response.body.add("<h1>bla</h1>");
}
【问题讨论】:
标签:
javascript
phantomjs
casperjs
【解决方案1】:
你不能这样做。 PhantomJS 不暴露主体,所以你不能改变它。收到 JavaScript 时有some tricks,但这通常不能应用于任何类型的资源。
您似乎收到了一个 HTML 资源。
是页面资源
如果 HTML 资源是页面资源,那么您可以使用 resource.requested 事件处理程序中止请求,使用 __utils__.sendAJAX 检索页面源,根据某些规则更改内容并将其加载为当前内容.
var done = false;
casper.on("page.resource.requested", function(req, network){
if (req.url === "someUrl") {
network.abort();
var content = this.evaluate(function(url){
return __utils__.sendAJAX(url, "GET");
}, req.url);
content = content.replace("somehtml", "myhtml");
this.page.setContent(content.replace("href=\"/", "href=\"http://domain.tld/path/"), req.url); // fix urls
done = true;
}
});
casper.start(someUrlToManipulate).waitFor(function check(){
return done;
}, function then(){
// further processing
}).run();
这是其他一些资源
通常使用 JavaScript 请求其他资源(例如模板)。在这些情况下,您无能为力,因为您必须重现处理此类响应的代码。