Как заработать в сети internet
Вторник, 21-Май-2024, 00:48
Меню сайта

Форма входа

Категории раздела
Технические вопросы [12]
Спонсоры [2]
Общие [0]

Поиск

Друзья сайта
  • Úklid v Praze

  • Статистика



    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Главная » Статьи » Технические вопросы

    Автоматизация выполнения бонусных заданий часть 2
    Продолжим усовершенствование нашего скрипта для выполнения бонусных заданий. Но сначала определимся, чего же нам не хватает? Начнем с того, что у нас никаким образом не ведется лог работы скрипта. И это в принципе не нужно, пока заданий 5 или 15. Можно и самому отследить. А если их больше? У кого есть желание отследивать работу скрипта 20 минут или больше? Да найдутся и более важные дела! А потому добавляем в наш код следующее:

    Code

    var logText, path = "*", file = "log.txt";

    // сначала удаляем старый файл лога.
    errCode = iimPlay("CODE:FILEDELETE name=" + file);
       
    function writeLog(text){
      // пишем лог в файл.
      errCode = iimPlay("CODE:SET !EXTRACT " + text.replace(/ /gi,"<SP>") + "\nSAVEAS TYPE=EXTRACT FOLDER=" + path + " FILE=" + file);
    }


    Если вдруг потребуется писать лог в более удобное место, нежели каталог имакроса по умолчанию, то меняем сей кусок на следующее:

    Code

    var logText, path = "c:\\path\\to\\file\\", file = "log.txt";

    // сначала удаляем старый файл лога.
    errCode = iimPlay("CODE:FILEDELETE name=" + path + file);
       
    function writeLog(text){
      // пишем лог в файл.
      errCode = iimPlay("CODE:SET !EXTRACT NULL\nSET !EXTRACT " + text.replace(/ /gi,"<SP>") + "\nSAVEAS TYPE=EXTRACT FOLDER=" + path + " FILE=" + file);
    }


    И когда нам потребуется что-то записать в лог, мы просто указываем:

    Code

    writeLog("наша запись в лог");


    Единственный минус в том, что каждый вызов функции начинается с новой строки, что очень неудобно. Поэтому впоследствии будем пользоваться переменной, чтобы сделать комбинированную запись строки.
    Хорошо. Теперь сделаем проверку на логин. И заодно запишем результат в наш лог:

    Code

    var wmid = WMID;
    var pass = PASS;
    var globError = false;

    // проверяем, что мы залогинены
    errCode = iimPlay("CODE:URL GOTO=http://www.web-ip.ru/index.php?action=members&where=stat\nSET !EXTRACT NULL\nTAG POS=1 TYPE=FONT ATTR=CLASS:main&&TXT:СТАТИСТИКА<SP>ПОЛЬЗОВАТЕЛЯ");
    if (errCode <= 0){
      //логинимся
      errCode = iimPlay("CODE:URL GOTO=http://www.web-ip.ru/");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:wmid CONTENT=" + wmid);
      errCode = iimPlay("CODE:SET !ENCRYPTION NO");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:PASSWORD FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:pass CONTENT=" + pass);
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:subent&&VALUE:Войти");
      errCode = iimPlay("CODE:SET !EXTRACT NULL\nTAG POS=1 TYPE=FONT ATTR=CLASS:main&&TXT:СТАТИСТИКА<SP>ПОЛЬЗОВАТЕЛЯ");
      if (errCode > 0) {
      writeLog("Логин прошел успешно");
      } else {
      writeLog("Ошибка логина! Скрипт остановлен!");
      globError = true;
      }
    } else {
      writeLog("Логин не потребовался.");
    }


    Сей кусок кода можно чуток упростить, если ВМИД и пароль сохранены в базе паролей файрфокса. Но я всегда отталкиваюсь от наихудшей ситуации. Тут мы вводим переменную, которая будет управлять прохождением скрипта, поскольку нормальной системы выхода из скрипта я пока не нашел (есть пара идей, но с ними еще надо разбираться).
    Ну и осталось нам в наш основной код внести задержки, проверки и логирование. В итоге получаем вот такой скрипт, который вполне можно назвать "почти совершенством":

    Code

    var errCode, logText, path = "*", file = "log.txt";
    var wmid = WMID;
    var pass = "PASS";
    var globError = false;

    // массивы заданий ["автор", номера, заданий, "пароль"]
    var tasks =[
      //User1
      ["User1", 11, 22, 33, 44, 55, "aa"],
      //User2
      ["User2", 111, 222, 333, 444, 555, "bbb"],
    ]

    function writeLog(text){
      // пишем лог в файл.
      errCode = iimPlay("CODE:SET !EXTRACT NULL\nSET !EXTRACT " + text.replace(/ /gi,"<SP>") + "\nSAVEAS TYPE=EXTRACT FOLDER=" + path + " FILE=" + file);
    }

    // сначала удаляем старый файл лога.
    writeLog("1");
    errCode = iimPlay("CODE:FILEDELETE name=" + file);

    // проверяем, что мы залогинены
    errCode = iimPlay("CODE:URL GOTO=http://www.web-ip.ru/index.php?action=members&where=stat\nSET !EXTRACT NULL\nTAG POS=1 TYPE=FONT ATTR=CLASS:main&&TXT:СТАТИСТИКА<SP>ПОЛЬЗОВАТЕЛЯ");
    if (errCode <= 0){
      //логинимся
      errCode = iimPlay("CODE:URL GOTO=http://www.web-ip.ru/");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:wmid CONTENT=" + wmid);
      errCode = iimPlay("CODE:SET !ENCRYPTION NO");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:PASSWORD FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:pass CONTENT=" + pass);
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:index.php?action=members&where=stat ATTR=NAME:subent&&VALUE:Войти");
      errCode = iimPlay("CODE:SET !EXTRACT NULL\nTAG POS=1 TYPE=FONT ATTR=CLASS:main&&TXT:СТАТИСТИКА<SP>ПОЛЬЗОВАТЕЛЯ");
      if (errCode > 0) {
      writeLog("Логин прошел успешно");
      } else {
      writeLog("Ошибка логина! Скрипт остановлен!");
      globError = true;
      }
    } else {
      writeLog("Логин не потребовался.");
    }

    if (!globError){
      for (j=0; j<tasks.length; j++){
      writeLog("Начинаем " + tasks[j][0] + ": ");
      logText = "";
      for (i=1; i<(tasks[j].length-1); i++){
      errCode = iimPlay("CODE:SET !TIMEOUT 60\nURL GOTO=http://www.web-ip.ru/index.php?action=members&where=work&type=&page=1&work_id=" + tasks[j][i]);
      errCode = iimPlay("CODE:TAG POS=1 TYPE=B ATTR=TXT:Оплачиваемое<SP>задание*");
      if (errCode > 0){
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:work_check&&VALUE:Проверить<SP>выполнение<SP>задания");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=B ATTR=TXT:Проверка<SP>результатов<SP>выполнения");
      if (errCode > 0){
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:index.php?action=members&where=work&type=&type2=&page=1&lm=&work_id=" + tasks[j][i]+" ATTR=NAME:answer CONTENT=" + tasks[j][tasks[j].length-1]);
      errCode = iimPlay("CODE:TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:index.php?action=members&where=work&type=&type2=&page=1&lm=&work_id=" + tasks[j][i]+" ATTR=VALUE:OK");
      errCode = iimPlay("CODE:TAG POS=1 TYPE=FONT ATTR=TXT:*выполнено*");
      if (errCode > 0){
      logText += tasks[j][i] + " OK ";
      } else {
      logText += tasks[j][i] + " ошибка (не прошло проверку) ";
      }
      errCode = iimPlay("CODE:WAIT SECONDS=4");
      } else {
      logText += tasks[j][i] + " ошибка (нет проверки результата) ";
      errCode = iimPlay("CODE:WAIT SECONDS=4");
      }
      } else {
      logText += tasks[j][i] + " ошибка (не найдено) ";
      }
      }
      writeLog(logText);
      writeLog("ends \n");
      }
    }

    И последнее на сегодня. В пароле пробел, если он там есть, заменяем на "<SP>". иМакрос не воспринимает пробелы в их естесственном виде.

    И продолжение следует...
    Категория: Технические вопросы | Добавил: websponsory (28-Окт-2012)
    Просмотров: 660 | Комментарии: 1 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Copyright MyCorp © 2024
    Бесплатный хостинг uCoz