请给我一个IMacros宏的例子来完全访问所有网站

时间:2010-11-09 22:52:34

标签: web-crawler imacros

所以我给第一页和宏必须访问这个网站的所有页面。 (打开每个页面的新选项卡)

这是我在网上找到的,但是这个宏访问只链接在一个起始页面,而不是深入访问第二级。

谢谢你的帮助!

//imacros-js:showsteps no

//Testing forum post http://forum.iopus.com/viewtopic.php?f=11&t=7537&sid=2103c60e70f9c7051dcda5264874a488
//Idea is to read something in common on the page and open each link in a new tab.
var macro, retcode, url="", pos=1, stop=false;
while(!stop)
{
   macro="CODE:";
   macro+="TAB T=1\n";
   //macro+="TAG POS="+pos+" TYPE=A EXTRACT=HREF\n";
   macro+="TAG POS="+pos+" TYPE=A ATTR=HREF:* EXTRACT=HREF\n";
   //ATTR=CLASS:*topictitle* 
   retcode = iimPlay(macro);

   if (retcode < 0)               // an error has occured
   {
      errtext = iimGetLastError();
      alert("1st Error "+retcode+": "+errtext);
      stop=true;
   }

   //Stop if extract found nothing or counter is too high as a precaution
   if((url = iimGetLastExtract()) == "#EANF#" || pos > 10000)
   {
      stop=true;
      break;
   }
   else
   {
      macro="CODE:";
      macro+="SET !TIMEOUT 15\n";
      macro+="SET !ERRORIGNORE YES\n";
      macro+="TAB T=1\n";
      macro+="TAB NEW OPEN\n";
      macro+="TAB T="+new Number(pos+1)+"\n";
      macro+="URL GOTO="+url+"\n";
      macro+="TAB T=1\n";

      retcode = iimPlay(macro);

      if (retcode < 0)               // an error has occured
      {
         errtext = iimGetLastError();
         alert("2nd Error "+retcode+": "+errtext);
         stop=true;
      }
      pos++;
   }
}

1 个答案:

答案 0 :(得分:0)

此代码基本上可以找到页面上的所有链接。然后它提取href,并在变量宏中构造一个新的宏。然后它以最后一个命令retcode = iimPlay(macro)运行 你想要的是一个递归函数,它不仅为href的查找打开一个新选项卡,而且还在它指向的页面上运行相同的函数。
所以你应该把上面的代码变成一个接受URL作为参数的函数。然后当imacros找到并链接时,使用链接href调用该函数。