是否可以使用 JavaScript 抓取正在使用 AJAX 实时更新的网页的所有更改?我希望每秒使用 AJAX 抓取更新数据的网站,我想获取所有更改。这是一个拍卖网站,只要用户出价,就会有几个对象发生变化。出价时会发生以下变化:
当前出价 当前最高出价者 拍卖计时器已加回时间
我希望使用基于 JavaScript 的 Chrome 扩展来获取这些数据。是否有 JavaScript 的 AJAX 侦听器可以完成此操作?工具包?我需要一些方向。JavaScript可以做到这一点吗?
是否可以使用 JavaScript 抓取正在使用 AJAX 实时更新的网页的所有更改?我希望每秒使用 AJAX 抓取更新数据的网站,我想获取所有更改。这是一个拍卖网站,只要用户出价,就会有几个对象发生变化。出价时会发生以下变化:
当前出价 当前最高出价者 拍卖计时器已加回时间
我希望使用基于 JavaScript 的 Chrome 扩展来获取这些数据。是否有 JavaScript 的 AJAX 侦听器可以完成此操作?工具包?我需要一些方向。JavaScript可以做到这一点吗?
我将展示两种解决问题的方法。无论您选择哪种方法,都不要忘记阅读我的答案底部!
首先,我提出了一个仅在页面使用 jQuery 时才有效的简单方法。第二种方法看起来稍微复杂一些,但也适用于没有 jQuery 的页面。
以下示例展示了如何实现基于方法(例如 POST/GET)、URL 以及读取 (POST) 数据和响应主体的过滤器。
有关 jQuery 方法的更多信息可以在.ajaxSuccess
. 用法:
jQuery.ajaxSuccess(function(event, xhr, ajaxOptions) {
/* Method */ ajaxOptions.type
/* URL */ ajaxOptions.url
/* Response body */ xhr.responseText
/* Request body */ ajaxOptions.data
});
当网站不使用 jQuery 处理其 AJAX 请求时,您必须修改内置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);
};
})();
前面显示的代码必须在页面的上下文中运行(在您的情况下,是拍卖页面)。出于这个原因,必须使用注入(!)脚本的内容脚本。使用它并不难,我参考这个答案以获得详细的解释和使用示例:Building a Chrome Extension - Inject code in a page using a Content script。
chrome.webRequest
您可以使用API读取请求正文、请求标头和响应标头。标题也可以修改。然而,它(还)不能读取,更不用说修改请求的响应正文了。如果您想要此功能,请给https://code.google.com/p/chromium/issues/detail?id=104058 加注星标。