2015-03-13 5 views
0

Я искал всю информацию, но не смог найти решение этой проблемы.iMacros + Javascript - Как обновить таймаут страницы?

У меня есть iMacros .js, который проходит через файл .CSV со следующей структурой (URL, значение) и: 1. Посещает URL-адрес. 2. Вводит конкретное значение в поле.

Промыть. Повторение.

Однако, даже если значение TIMEOUT установлено на max, все еще есть случаи, когда страница не загружается. Я мог бы установить ERRORIGNORE в YES, но потом я пропустил бы несколько страниц в списке, и я не знал бы об этом.

Как таковой, я ищу для кода, который позволит мне запустить мой макрос, и в случае, если страница не работает, обновляет его и снова запускает макрос, не пропуская строку в CSV.

Вот как выглядит мой .js:

for (i = 1; i <= count_of_lines; i++) { //The amount of times the Macro will loop should be defined here. 
iimSet("i", i) //Set "i" so it is able to extract the nest row from the .csv file 

var Macro; 

Insert_Rating = "CODE:" //Need to use code here so that iMacros knows that the code will start 
Macro += "TAB T=1" + "\n"; 
Macro += "CMDLINE !DATASOURCE FILENAME.csv" + "\n"; 
Macro += "SET !DATASOURCE_LINE {{i}}" + "\n"; 
Macro += "SET !TIMEOUT_PAGE 120" + "\n"; 
Macro += "URL GOTO=URL{{!COL1}}" + "\n"; 
Macro += "WAIT SECONDS=1" + "\n"; 
Macro += "TAG POS={{!COL2}} TYPE=A ATTR=TXT:" + "\n"; 

} 
iimPlay(Macro); 

Я также попытался с

var ret = iimPlay(Macro) 
if (ret<0) { 
iimPlay("CODE:REFRESH"); 
} else { 
iimPlay(Macro); 
} 

Но то, что происходит здесь в том, что код будет проверять один раз (при старте, если), а затем попытайтесь выполнить весь CSV, если начальное условие истинно.

Мне нужен способ проверить каждую строку CSV, если время ожидания страницы.

Возможно, это простое решение, но мои навыки кодирования чрезвычайно просты.

Заранее благодарю вас за вашу помощь.

ответ

0

Я думаю, вы почти там. Что вам нужно сделать, так это добавить некоторую логику, чтобы получить поле, которое вы хотите установить. Если поле не найдено, повторите попытку.

Этого решение, которое я мог думать:

var count_of_lines = 10; 
var max_retries = 3; 
var macro = ''; 

for (i = 1; i <= count_of_lines; i++) { 

    var retries = max_retries; 

    while (retries > 0) { 
     macro = "TAB T=1" + "\n"; 
     macro += "CMDLINE !DATASOURCE FILENAME.csv" + "\n"; 
     macro += "SET !DATASOURCE_LINE {{i}}" + "\n"; 
     macro += "SET !TIMEOUT_PAGE 120" + "\n"; 
     macro += "URL GOTO=URL{{!COL1}}" + "\n"; 
     macro += "WAIT SECONDS=1" + "\n"; 
     // trying to extract the field.. 
     macro += "TAG POS={{!COL2}} TYPE=A ATTR=TXT: EXTRACT=TXT" + "\n"; 

     iimSet('i', i); 
     iimPlayCode(macro); 

     if (iimGetLastExtract() != '#EANF#' && iimGetLastExtract().trim().length != 0) { 
      // found the field, do some logic here.. 
      // don't forget to break.. 

      break;   
     } else { 
      // if the field could not be found, retry.. 
      retry--; 
     } 
    } 
} 

Надеется, что это помогает.

+0

Эй, там, firmanelhakim, большое спасибо за то, что нашли время, чтобы ответить на мой вопрос. Я пробовал код, который вы предлагали, но, к сожалению, я думаю, что условие в выражении if никогда не выполняется, и как таковой код просто продолжает обновлять страницу. Я проверил содержимое содержимого с помощью: \t \t window.alert (iimGetLastExtract(). Trim(). Length); Даже после того, как он немного изменился, он последовательно возвращается как 0. Итак, моя мысль состоит в том, что команда extract на самом деле не происходит (вы действительно просто добавляете эту строку в макроперемену), поэтому условие всегда ложный –

0

Быстрое обновление: в конце концов, я получил его, чтобы он работал так, как нужно. :)

var count_of_lines = parseInt(window.prompt("Enter number of lines in the CSV file.","Please enter a number...")); 
var DataSource = "/Users/Username/iMacros/Datasources/" + window.prompt("Please enter the name of the file.",""); 
var Load_Csv = ""; 
var Timeouts = 0; 

for (i = 1; i <= parseInt(count_of_lines); i++) { 
    iimDisplay("The script has run through " + i + " lines out of a total of " + count_of_lines + "."); //Provide feedback about progress. 
    iimDiplay("The script has timed out a total of " + Timeouts + " times."); //Provide feedback about total timeouts. 

     iimSet("i", i); //Necessary to make the attribution of i here. 
     iimSet("DataSource", DataSource); //Necessary to make the attribution of DataSource here. 
     Load_Csv = "TAB T=1 \n"; 
     Load_Csv += "CMDLINE !DATASOURCE {{DataSource}} \n"; 
     Load_Csv += "SET !DATASOURCE_LINE {{i}} \n"; 
     Load_Csv += "SET !TIMEOUT_PAGE 120 \n"; 
     Load_Csv += "URL GOTO={{!COL1}} \n"; 
     iimPlayCode(Load_Csv); 


     iimPlay("CODE:TAG POS=2 TYPE=SPAN ATTR=TXT:* EXTRACT=TXT"); //We are checking to see if the attribute exists (its length is >0) 


     if (iimGetLastExtract() != '#EANF#' && iimGetLastExtract().trim().length != 0) { 
      // Condition is met (Field exists = Page loaded correctly) 

      iimSet("i", i); //Necessary to make the attribution of i here. 
      iimSet("DataSource", DataSource); //Necessary to make the attribution of DataSource here. 
      Insert_Rating = "CMDLINE !DATASOURCE {{DataSource}} \n"; 
      Insert_Rating += "SET !DATASOURCE_LINE {{i}} \n"; 
      Insert_Rating += "TAG POS={{!COL2}} TYPE=A ATTR=TXT: \n"; 
      iimPlayCode(Insert_Rating); //Run the macro 

     } 
     else 
     { 
      // if the field could not be found, retry.. 
      iimPlay("CODE:REFRESH"); 
      i--; //If the load fails, you should subtract from i in order to make sure that you're not skipping a row in the .csv 
      Timeouts++; //Adds to the timeouts counter. 

     } 
} 
Смежные вопросы