我正在使用CasperJS 1.1.0-beta3和PhantomJS 1.9.8。
如何在phantomjs解析并呈现它之前编辑响应正文内容?
类似的东西:
casper.on("resource.received", function(response) {
response.body.add("<h1>bla</h1>");
}
答案 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(例如模板)请求其他资源。在这些情况下,您无法执行任何操作,因为您必须重现处理此类响应的代码。