对于imacros / JS的循环没有工作意见/建议是受欢迎的

时间:2014-11-26 12:37:10

标签: javascript imacros

所以我有一个简单的脚本,在第一次运行时完美无缺,但是每次循环都会产生误报。首先,脚本读取数据源(.csv)文件并一次从中提取一个关键字,并在当前选项卡的任何位置查找所述关键字,如果找到它,它会继续执行并执行计划的命令。如果找不到关键字,它将引用数据源并检索下一个关键字并重新开始读取页面,如果发现任何关键字继续执行任务,则再次冲洗并重复128次。如果找不到128个关键字,则关闭选项卡而不完成任何工作。

以上脚本效果很好。问题是当我把整个东西放在do-while循环中时(我将它设置为继续循环直到所有选项卡都关闭并且脚本基本上只是自杀,这很好)问题是我得到了误报后最后一次(128)检查。我添加了警报来输出关键字和计数器(i),并循环遍历整个脚本以确保它在适当的循环中提取正确的关键字。我不知道为什么假设它在128次检查完成后发现匹配,并且仅在第一次全部运行之后才成功。

以下代码:

   do {
    var datasource, macro, retcode, numberOfLinesInDatasource, aTagWasFound, keyword; 

    datasource = "S:\\Stuff.csv"  
    numberOfLinesInDatasource = 128;
    aTagWasFound = false;


// loop through all lines in datasource
for (var i = 1; i < numberOfLinesInDatasource+1; i++)
{

  // get the datasource value at this line
    macro = "CODE:";
    macro += "SET !DATASOURCE " + datasource + "\n";
    macro += "SET !DATASOURCE_COLUMNS 1\n";
    macro += "SET !DATASOURCE_LINE " + i + "\n";
    macro += "ADD !EXTRACT {{!COL1}}\n";
    retcode = iimPlay(macro);
    keyword = iimGetLastExtract();
    // search for this keyword
    macro = "CODE:";
    macro += "SET !TIMEOUT_PAGE 1\n"; 
    macro += "SET !TIMEOUT_STEP 0\n";             
    macro += "TAG POS=1 TYPE=PRE ATTR=TXT:*" + keyword + "*\n";
    // alert(keyword)
    // alert(i)
    retcode = iimPlay(macro);

    // if retcode is 1 then the tag was found move on to next step else break and
    if (retcode === 1){
        // move on to next step
        aTagWasFound = true;
        //alert(keyword);
        break;
    }
    // tag not found try the next value
}

if (!aTagWasFound)
{
    macro = "CODE:";
    macro += "TAB CLOSE\n";
    retcode = iimPlay(macro);
} else 
{
    macro = "CODE:";
    macro += "TAG POS=1 TYPE=A ATTR=TXT:Open\n";
    macro += "TAG POS=1 TYPE=A ATTR=TXT:Take\n";
    macro += "TAG POS=1 TYPE=A ATTR=TXT:Relationships\n";
    macro += "TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:ModifyLinks.html ATTR=NAME:******-RefersTo CONTENT=stuff\n";
    macro += "TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:ModifyLinks.html ATTR=*\n";
    macro += "TAG POS=1 TYPE=A ATTR=TXT:Resolve\n";
    macro += "TAG POS=1 TYPE=TEXTAREA FORM=NAME:TicketUpdate ATTR=NAME:UpdateContent CONTENT=stuff\n";
    macro += "TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:TicketUpdate ATTR=NAME:UpdateSubject CONTENT=stuff\n";
    macro += "TAG POS=1 TYPE=SELECT FORM=NAME:TicketUpdate ATTR=NAME:UpdateType CONTENT=%private\n";
    macro += "TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:TicketUpdate ATTR=*\n";
    macro += "TAG POS=1 TYPE=A ATTR=TXT:Display\n";
    macro += "TAG POS=1 TYPE=B ATTR=TXT:RT/texas.net:<SP>Ticket* EXTRACT=TXT\n";
    macro += "SAVEAS TYPE=EXTRACT FOLDER=\"S:\\Stuff\" FILE=Exports.csv\n";
    macro += "TAB CLOSE\n";
    retcode = iimPlay(macro);    
}

}while(1)
再次,脚本将在第一页上完美运行,但在关闭选项卡并在新选项卡上再次启动整个循环后,它将正确读取所有128个关键字,这次没有找到匹配但是它运行这些命令就像反正一样。

非常感谢任何提示/建议。提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用标签时可能会出现问题。所以(1)仔细阅读wiki about TAB。 (2)在你的代码中你没有明确定义它们 - 这种方法并不好。 (3)我认为从最后一个标签运行脚本更好。