在 CapserJS 中操作 http 响应体

Manipulate http response body in CapserJS

本文关键字:响应 http 操作 CapserJS      更新时间:2023-09-26

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

如何在 phantomjs 解析和呈现响应正文内容之前对其进行编辑?

像这样:

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

你不能这样做。PhantomJS 不会公开正文,因此您无法更改它。当你收到JavaScript时有一些技巧,但这通常不能应用于任何类型的资源。

您似乎收到了一个 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 请求(例如模板)。在这些情况下,您无法执行任何操作,因为您必须重现处理此类响应的代码。