我正在编写一个脚本来从多页输出中抓取信息。输出是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后停止。
我做错了什么?
答案 0 :(得分:-1)
我最终找到了答案,而且非常简单。这些页面是通过AJAX加载的,并且添加了一个虚拟函数,触发了第二页和后续页面的抓取:
cmd+1