我正在尝试使用TamperMonkey / Javascript / jQuery从单个网站“蜘蛛”一小部分数据并将其整理到一个页面。 < / p>
我已经编写了一个TM脚本(在我打开目标页面时触发)以执行以下操作:
迭代这些操作通常会导致在站点触发16(8 * 2个链接)HTTP请求。如果我手动调用它(通过控制台)来为所有16个数据以单步方式执行操作,那么我编写的代码就可以正常工作。
但是,如果我尝试设置循环并让代码只是“做它的事情”我得到 您请求的页面没有响应 键入HTML返回(在大约4次迭代之后,状态= OK)。我猜这个网站正在保护自己免受某种XSRF攻击,或者只是真的很慢?
我的问题是什么是降低我从网站请求数据的速率的首选技术?我已经考虑过构建一系列HTTP函数调用或URL进行处理,但这看起来很笨重,还有什么更适合我的惯用语吗?
我猜这一定是一个常见的问题,并且存在可靠的解决方案,但我对术语的掌握不够,无法正确搜索它。
答案 0 :(得分:2)
我在另一个问题上发布了类似的答案:Browser stops working for a while after synchronous ajax call in a for loop
您可以使用“递归”功能来帮助您使用异步调用来控制流。而不是同步运行,你可以异步运行它们,并在下一个时间运行它。
类似的东西:
function doCall() {
setTimeout(function() {
$.ajax({
//...
succcess: function(data) {
//...
//time to start the next one
doCall();
},
error: function() {
//call the next one on error?
doCallI();
}
});
}, 1000); //1 second wait before each run
}
这样他们就可以运行异步,不要在他们打电话时阻止所有内容;但仍然是连续运行。您甚至可以在doCall函数中添加一个小延迟,以便有一些空间。