GreaseMonkey / Javascript:分页后继续运行

时间:2016-06-01 17:51:03

标签: javascript ajax greasemonkey

我正在编写一个脚本来从多页输出中抓取信息。输出是URL中的分页普通vanilla:http://example.com/results.php?records_per_page=100&page=1,结果是AJAX加载的。

我的脚本包含waitForKeyElements实用程序,只有在加载结果后才开始抓取。在抓取之后,它会触发下一页,但除非我手动重新加载页面,否则不会开始抓取下一页。

我的剧本的精髓:

// ==UserScript==
// @name        example
// @namespace   http://example.com
// @description example
// @version     1
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @include     https://example.com/results.php?record_per_page=*&page=*
// @require     https://code.jquery.com/jquery-2.2.4.min.js
// ==/UserScript==

function iterateResults () {
   // iterate through all content DIVs on the page
   for (i = 1; i<=$('div.row_content).length; i++) {
     // parse each DIV
     a = parse($(div.row_content[i]);
     // issue an AJAX request to my server to save the parsed object
     save (a);
   }
   nextPage();
}

function nextPage() {
  patt = /^(.*&page=)([0-9]+)(.*)$/;
  match = document.location.href.match(patt);
  p = 1+match[2];
  nextURL=match[1]+p+match[3];
  document.location = nextURL;
}

/**
 * Wait until all AJAX elements have loaded
 */
function Timer() {
  timer = GM_getValue("timer","")
  window.clearTimeout(timer);
  timer = window.setTimeout(function(){
    GM_setValue("timer","");
    iterateResults();
  },5000); 
  GM_setValue("timer",timer);
}

waitForKeyElements ("div.results_lists", Timer, false);

这在page = 1上运行良好,但在使用document.location加载page = 2后停止。

我做错了什么?

1 个答案:

答案 0 :(得分:-1)

我最终找到了答案,而且非常简单。这些页面是通过AJAX加载的,并且添加了一个虚拟函数,触发了第二页和后续页面的抓取:

cmd+1