【问题标题】:How to go through each link in an array of links如何遍历链接数组中的每个链接
【发布时间】:2017-10-14 23:22:02
【问题描述】:

大家好,我正在编写一个篡改猴子脚本,用于从网页上抓取链接,将它们存储到一个数组中,然后以某种方式遍历数组的每个链接以获取这些链接中的信息。

假设我有一个数组“turls”,其中包含从主页上抓取的 25 个链接,我使用 window.location.href 进入链接和 window.history.back();返回主页。返回主页后,脚本将再次运行,并再次进入第一个链接。

我想在我回到主页后我可以继续下一个链接,那里的所有链接都带有 GM_setvalue 和 GM_getvalue,但是如何?我不知道如何处理所有 25 个链接。

提前致谢,

(urls 和 turls 的 console.log 结果在 chrome 控制台中显示为 300 的数组和 25 的数组,但是当我输入 console.log(urls) 或 console.log 时 urls 和 turls 没有定义(turls) 进入 chrome 控制台。)

// ==/UserScript==


(function() {
'use strict';

   var urls= [];
var turls = [];


$( document ).ready(function() {
    for (var i= document.links.length; i-->0;){
        if (document.links[i].hostname===location.hostname){
            if (document.links[i].href.indexOf("tournaments") > -1) {
                turls.push(document.links[i].href);    
            }
            urls.push(document.links[i].href);
        }
    }    
});


console.log(urls); 
console.log(turls);  






})();

【问题讨论】:

  • i-->0; 是印刷错误吗?你的意思是for (var i= document.links.length; i >= 0; i--) {
  • javascript 在 Question 中有什么问题?
  • 我不知道每次重新加载页面时如何转到数组 turls 或 urls 中的下一个链接。基本上每次页面重新加载时,我都想进入下一个链接。从 turl[0] 到 turl[1] 到 turl[2]....
  • 您可以将数组存储在localStorage,使用.shift()loadload 事件window 中删除索引0 处的元素,另请参见Global Variable usage on page reload

标签: javascript arrays web-scraping tampermonkey


【解决方案1】:

试试这个。

// @grant GM_setValue
// @grant GM_getValue

(function() {
  'use strict';

  var turls = GM_getValue('turls', []);
  if(turls.length == 0) {
    $(document).ready(function() {
      for (var i = 0; i<document.links.length; i++) {
        if (document.links[i].hostname === location.hostname) {
          if (document.links[i].href.indexOf("tournaments") > -1) {
            turls.push(document.links[i].href);
          }
        }
      }
    });
  }

  if(turls.length > 0) {
    var turl = turls.shift();
    GM_setValue('turls', turls);
    window.location.href = turl;
  }
})();

要在窗口加载时将值保留在 TamperMonkey 脚本中,即强制重新加载脚本,您需要使用 GM_setValueGM_getValue 跨会话存储和检索值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多