0

我正在尝试使用 TamperMonkey/Javascript/jQuery 从单个站点“蜘蛛”一小组数据并将其整理到单个页面上。

我编写了一个 TM 脚本(当我打开目标页面时触发)来执行以下操作:

  • 在页面上搜索某种类型的链接(通常大约 8 个链接)
  • “关注”找到的每个链接到一个新页面,从那里找到并关注一个链接
  • 提取我感兴趣的数据并将其“合并”到我打开的原始页面中。

遍历这些操作通常会导致站点触发 16 个(8 * 2 链接)HTTP 请求。如果我手动调用它(通过控制台)以单步方式对所有 16 条数据执行操作,我编写的代码可以正常工作。

但是,如果我尝试设置一个循环并让代码只是“做它的事情”,我会得到您请求的页面在大约 4 次迭代后没有响应类型 HTML(状态 = OK)。我猜该网站是在保护自己免受某种 XSRF 攻击,还是真的很慢?

我的问题是降低我从站点请求数据的速率的首选技术是什么?我考虑过构建一组 HTTP 函数调用或 URL 来处理,但这似乎很笨重,我还有什么更惯用的方法吗?

我猜这一定是一个如此普遍的问题,并且存在可靠的解决方案,但我只是没有足够好的术语来正确搜索它。

4

1 回答 1

2

我在另一个问题上发布了类似的答案:Browser stop 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 函数中放置一个小延迟,以便有一些空间。

于 2013-04-03T12:26:01.760 回答