[英]Javascript iMacros nested while loop (two loops in macro)
我一直在尝试使循环在循环中起作用。 我的意思是说,我将转到一个网站的多个页面,单击表格中的所有链接,并在链接之后从下一页中提取信息。 我在这里http://www.stackoverflow.com/questions/18402012/nested-loop-in-imacros-2nd-loop找到了这个问题,但我无法为我工作。 我认为问题发生在“ while(true)”或“ n = 1”部分。 我的代码看起来像这样:
const L = "\n";
var macro;
macro = "CODE:";
macro += "SET !ERRORIGNORE YES" + L;
macro += "SET !DATASOURCE DailyCitySummaries.csv" + L;
macro += "SET !DATASOURCE_LINE {{i}}" + L;
macro += "SET !WAITPAGECOMPLETE YES" + L;
macro += "SET !EXTRACT_TEST_POPUP NO" + L;
macro += "URL GOTO=http://{{!COL1}}" + L;
macro += "FRAME F=0" + L;
macro += "TAG POS=1 TYPE=A ATTR=HREF:/page/Results.cfm?type=location=* EXTRACT=TXT" + L;
macro += "SAVEAS TYPE=EXTRACT FOLDER=/root/Desktop/ FILE=CityName.txt" + L;
var macro1;
macro1 = "CODE:";
macro1 += "TAG POS=1 TYPE=A ATTR=TXT:city<SP>{{n}}" + L;
macro1 += "TAG POS=1 TYPE=STRONG ATTR=TXT:city<SP>* EXTRACT=TXT" + L;
macro1 += "TAG POS=1 TYPE=TABLE ATTR=TXT:* EXTRACT=TXT" + L;
macro1 += "SAVEAS TYPE=EXTRACT FOLDER=/root/Desktop FILE=CityDetails.csv" + L;
for (var i=1;i < 19;i++)
{
iimSet("i", i);
iimPlay(macro)
//set counter
var n = 1 //this is only following the first link, I want all of them!
while(true) //this is suppose to be an infinite loop
{
iimSet("n", n)
var ret=iimPlay(macro1);
//kill loop when it comes to end and go to next location (first macro)
if(ret<0)
{
break;
}
//increase counter
n++;
} //end of while loop
} //end of for loop
是我的格式或其他内容。 代码现在要做的是转到网页,提取一个表,单击概述表中的链接,转到该链接的详细信息页面,然后为该详细信息页面提取一个表。 问题在于,它没有单击概述表中的所有链接,仅单击了第一个链接,然后单击了下一个概述表的第一个循环。 每个概述表的链接数都不相同。 我对JavaScript非常了解,因此任何指针都将不胜感激。
如果有人希望看到最终运行的代码:
const L = "\n";
var macro;
macro = "CODE:";
macro += "SET !ERRORIGNORE YES" + L;
macro += "SET !DATASOURCE DailyCitySummaries.csv" + L;
macro += "SET !DATASOURCE_LINE {{i}}" + L;
macro += "SET !WAITPAGECOMPLETE YES" + L;
macro += "SET !EXTRACT_TEST_POPUP NO" + L;
macro += "URL GOTO=http://{{!COL1}}" + L;
macro += "FRAME F=0" + L;
macro += "TAG POS=1 TYPE=A ATTR=HREF:/page/Results.cfm?type=location=* EXTRACT=TXT" + L;
macro += "SAVEAS TYPE=EXTRACT FOLDER=/root/Desktop/ FILE=CityName.txt" + L;
var macro1;
macro1 = "CODE:";
macro1 += "TAG POS=1 TYPE=A ATTR=TXT:city<SP>{{n}}" + L;
macro1 += "TAG POS=1 TYPE=STRONG ATTR=TXT:city<SP>* EXTRACT=TXT" + L;
macro1 += "TAG POS=1 TYPE=TABLE ATTR=TXT:* EXTRACT=TXT" + L;
macro1 += "SAVEAS TYPE=EXTRACT FOLDER=/root/Desktop FILE=CityDetails.csv" + L;
macro1 += "BACK" + L; // The difference that made a difference
for (var i=1;i < 19;i++)
{
iimSet("i", i);
iimPlay(macro)
//set counter
var n = 1
while(true) //this is an infinite loop
{
iimSet("n", n)
var ret=iimPlay(macro1);
//kill loop when it comes to end and go to next location (first macro)
if(ret<0)
{
break;
}
//increase counter
n++;
} //end of while loop
} //end of for loop
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.