在 CapserJS 中操作 http 响应体
Manipulate http response body in CapserJS
我正在使用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 请求(例如模板)。在这些情况下,您无法执行任何操作,因为您必须重现处理此类响应的代码。
相关文章:
- IIS动态HTTP响应标头
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- Typescript angularjs$http获取响应类型(避免使用<any>)
- http请求使用html而不是json进行响应
- 我如何设置HTTP头“;访问控制允许起源”;用于来自thttpd web服务器的HTTP响应
- 从javaspring方法管理http.get响应
- Http响应拆分安全问题的XMLHTTPRequest/Response用例的Filter实现
- 从http获取响应管理zip
- 是浏览器在AJAX响应中自动处理的HTTP标头
- "所请求的名称已经作为不同类型的“”存在;HTTP 409响应错误
- 使用Express筛选HTTP响应
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 分析angular.js中的JSONP$http.json()响应
- 使用不同参数的超级代理缓存缓存 HTTP 响应
- 如何在 http 上调用 end().服务器响应对象
- $http.post() angularjs 响应函数未按正确的顺序执行
- $http.获取和$http.JSONP未能获得Google API响应
- 流星:返回承诺's,然后再响应HTTP发布请求
- 使用正确的数组响应HTTP请求时出现问题.使用expressjs从函数内部发送结果的可能方法
- 获取响应http angular