【发布时间】:2012-11-01 09:21:05
【问题描述】:
我需要获取网站中可用的列表项,该列表项以分页样式列出项目。我将提取每个页面上项目的信息。我使用settimeout(function(){...code...}, 5000) 编写了一个Javascript 代码,并在Firefox Web 控制台中运行此代码。脚本获取页面中的所有项目,一旦完成,脚本通过执行超链接“next”的click() 方法提交页面。这将一直持续到页面中有“下一页”超链接(在最后一页中只有“后退”超链接,如果存在)。在提交的每个页面上,我都会将其超时为 5 秒。
我在 Firefox Web 控制台中执行了这段代码,它成功运行并获取了第一页结果,然后提交了页面,下一页也加载了。但是,问题是,一旦提交页面,脚本就会停止。即使在下一页加载后如何连续运行此脚本?有没有其他方法可以实现这个功能?
var inc=0;
var ids;
var main=function(){
console.log("attempiting..............."+inc);
var i=0;
{
ids[inc]=b();//function, fetch the items from the page
console.log(ids);
var more=document.getElementById("m_more_item");
if(more){
//next link is there
var cli=more.getElementsByTagName("a");
console.log("navigating to next page "+cli[0]);
inc++;
setTimeout(main,5000); //I tried placing this after click, but didnt work!
cli[0].click(); //submitting...
} else {
//last page reached, exiting...
console.log("exit1-> total items fetched are: "+ids);
return ids;
}
}
};
main();
【问题讨论】:
-
Javascript 是一种嵌入在您的 HTML 页面中的客户端语言。当您切换到另一个页面时,正在运行的脚本被取消。运行以前网站的 js 脚本会有点傻。您可以使用查询参数,使用服务器端语言处理这些参数,并使用这些参数来模拟脚本的恢复。
-
如果您能更清楚地解释您想要做什么,我们可以提供帮助。但据我了解,您可以使用同步 AJAX 调用。
-
我要做的就是从网页中获取给定 id 的项目列表,手动执行此操作并聚合它们需要很长时间。该网页不会在一次提取中列出项目,而是在分页中列出。我有一组 ids[],我用每个 ids[i] 作为请求参数调用网页 url,响应(在 html 中)将是第 10 个项目(对于这个 ids[i]),解析,迭代它们,准备接下来,数据调用相同的 url,并带有用于分页的附加参数,&start=10 等等,直到最后一页。(我通过缺少“下一个”链接来识别最后一页)。我对列表中的所有 id 重复此过程。
-
是的,我同意,我将使用 ajax 重新编码。获取要解析的 div 或 IFRAME 中的响应 html。我欢迎任何其他简单和更好的想法。 :-)
标签: javascript firefox dom-events settimeout page-refresh