如何解决使用 GreasyMonkey 脚本抑制网页上的 AJAX 调用
作为我日常工作的一部分,我需要在包含多个字段的网页中填写数据。该网页的构建方式是,在选择每个字段时,会发送 AJAX 请求以进行验证和获取结果。大约有 20 个字段可以输入。此外,我发现代码是这样编写的,即在每个 AJAX 请求中发送所有 20 个字段的数据以获取结果。
但是,在慢速连接上,这会导致过度延迟,由于来自服务器的 AJAX 验证和页面刷新,我必须在选择每个字段时等待 5-10 秒。我想编写一个 Greasymonkey/Violentmonkey/Tapermonkey 脚本来抑制 AJAX,直到我填满所有 20 个字段。
注意:字段上的 onChange/click 事件包含除 AJAX 调用之外的许多其他验证,因此我不想抑制字段上的 onChange/click 事件。
典型的选择如下:
<h6 class="spin">Tube end<span class="facet-toggle"></span></h6>
<ul style="display: block;">
<li data-value="00any" class=" " data-display-value="Any Value" data-facet-name="C8948E"> <a> Any Value </a> </li>
<li data-value="bevelend" class=" " data-display-value="Bevel end" data-facet-name="C8948E"> <a> Bevel end <i> 2</i> </a> </li>
<li data-value="plainend" class=" " data-display-value="Plain end" data-facet-name="C8948E"> <a> Plain end <i> 147</i> </a> </li>
<li data-value="screwed" class=" " data-display-value="Screwed" data-facet-name="C8948E"> <a> Screwed <i> 34</i> </a> </li>
<li data-value="screwedandsocketed" class=" " data-display-value="Screwed and socketed" data-facet-name="C8948E"> <a> Screwed and socketed <i> 9</i> </a> </li>
<li data-value="screwedwithoneendsocket" class=" " data-display-value="Screwed with one end Socket" data-facet-name="C8948E"> <a> Screwed with one end Socket <i> 59</i> </a> </li>
</ul>
<div class="facet-footer"> </div>
解决方法
您可以monkey patch AJAX 函数并过滤掉用于验证的 URL。
首先,您需要阅读代码使用什么函数。有两个 API。
XMLHTTPRequest 和新的 fetch API。
需要修改代码,过滤掉不需要的网址。
如果页面使用 Fetch 你可以使用:
var ignoreURL = /validation/;
(function (fetch) {
window.fetch = function(url,...args) {
if (!url.match(ignoreURL)) {
return fetch(url,...args);
}
return Promise.resolve({
json: () => Promise.resolve({valid: true})
});
};
})(fetch);
如果您的页面使用 fetch
,您需要调查发送了什么请求,如果它是 JSON 并且代码使用 res.json() 那么您需要返回脚本期望从 AJAX 请求中获得的任何内容。这里只是一个 {valid: true}
示例,但您需要检查您的确切请求。
如果代码使用 jQuery,您需要查看 jQuery 使用的代码,如果它使用 XMLHttpRequest 对象发送 AJAX 请求,您需要修改该对象,类似于上面的 fetch,但需要更多工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。