刮/使用JavaScript窃听AJAX数据?
是否有可能使用JavaScript来抓取所有更新到AJAX实时更新的网页? 我希望每秒使用AJAX更新数据的网站,我想抓住所有的变化。 这是一个拍卖网站,只要用户下标,几个对象就可以改变。 出价时,出现以下变化:
当前出价当前最高出价者拍卖定时器有时间加回到它
我希望使用基于JavaScript的Chrome扩展来获取这些数据。 有没有一个AJAX的JavaScript的监听器可以做到这一点? 一个工具包? 我需要一些方向。 JavaScript能完成这个吗?
我将展示两种解决问题的方法。 无论您select哪种方法,都不要忘记阅读我的答案!
首先,我介绍一个简单的方法, 只有当页面使用jQuery时才有效 。 第二种方法看起来稍微复杂一点,但也可以在没有jQuery的页面上工作。
以下示例显示了如何基于方法(例如POST / GET),URL和读取(POST)数据和响应主体来实现filter。
在jQuery中使用全局ajax事件
有关jQuery方法的更多信息可以在.ajaxSuccess
的文档中.ajaxSuccess
。 用法:
jQuery.ajaxSuccess(function(event, xhr, ajaxOptions) { /* Method */ ajaxOptions.type /* URL */ ajaxOptions.url /* Response body */ xhr.responseText /* Request body */ ajaxOptions.data });
纯粹的JavaScript方式
当网站没有为其AJAX请求使用jQuery时,您必须修改内置的XMLHttpRequest
方法。 这需要更多的代码…:
(function() { var XHR = XMLHttpRequest.prototype; // Remember references to original methods var open = XHR.open; var send = XHR.send; // Overwrite native methods // Collect data: XHR.open = function(method, url) { this._method = method; this._url = url; return open.apply(this, arguments); }; // Implement "ajaxSuccess" functionality XHR.send = function(postData) { this.addEventListener('load', function() { /* Method */ this._method /* URL */ this._url /* Response body */ this.responseText /* Request body */ postData }); return send.apply(this, arguments); }; })();
让它在Chrome扩展中运行
以前显示的代码必须在页面的上下文中运行(在你的情况下,一个拍卖页面)。 出于这个原因,必须使用注入(!)脚本的内容脚本。 使用这个并不困难,我参考这个答案的详细解释加上使用的例子: 构build一个Chrome扩展 – 使用内容脚本在页面中注入代码 。
一般的方法
您可以使用chrome.webRequest
API读取请求正文,请求标头和响应标头。 标题也可以修改。 但是它不是(可能)读取,更不用说修改请求的响应主体了。 如果您需要此function, 请https://code.google.com/p/chromium/issues/detail?id=104058 。