Меню сайта
Форма входа
Категории раздела
Поиск
Статистика
Онлайн всего: 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 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]