在CasperJS中处理http响应主体

时间:2014-11-27 09:55:28

标签: javascript phantomjs casperjs

我正在使用CasperJS 1.1.0-beta3和PhantomJS 1.9.8。

如何在phantomjs解析并呈现它之前编辑响应正文内容?

类似的东西:

casper.on("resource.received", function(response) {
   response.body.add("<h1>bla</h1>");
}

1 个答案:

答案 0 :(得分:0)

你不能这样做。 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(例如模板)请求其他资源。在这些情况下,您无法执行任何操作,因为您必须重现处理此类响应的代码。