【问题标题】: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 请求其他资源(例如模板)。在这些情况下,您无能为力,因为您必须重现处理此类响应的代码。

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2017-10-10
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多