Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - stadon

Pages: [1]
1
Переделал.)
Очистку лога перенес во внутренний цикл.
Вынес в начало скрипта настройки: удаления файлов (переменная $del) и очистки Лога (переменная $clear).

Code: (clickermann) [Select]
// Этот скрипт положить в папку с обрабатываемыми им файлами

// Удаление обработанных файлов:
$del = 0 // 1 - удалять; 0 - не удалять

// Очистка Лога:
$clear = 150 // количество обработанных строк до очистки Лога

//--------------------------------

LOGCLEAR

GETFILELIST($arr, "*.txt") // список всех *.txt файлов в папке

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, $i < $count) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк в файлах
     
      INC($e,1)  // нарастающая переменная, считает количество строк в Логе
     
      IF($e = $clear) // если обработано 150 строк - очищаем Лог
         WAITMS(10)
         LCLICK(1011,360)
         $e = 0 // обнуляем счетчик строк Лога
         LCLICK(344,705)
      END_IF
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк в файлах, по окончании обработки фала
   
   IF($del)
      TFCLEAR($file, 1) // удаление обработанного файла с диска (мимо корзины)
   END_IF
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT


Спасибо Вам большое! :)
Тестил пол дня, в разных вариациях )) все отлично работает, как часы, тумблер только переключил на 1 в "$del = 0 // 1 - удалять; 0 - не удалять", потому что при 0 считывает больше строк (3000+) чем есть в файлах (2750)...
Еще раз спасибо, так в Вашей помощью тут можно машину по картинкам собрать  8)

2
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)

Что то пошло не так ( :'(
Сегодня выходной ... Немного присмотрелся, увидел что то-то не так, решил закинуть в папку буфера (GETFILELIST($arr, "C:\papka\*.txt")) 2 txt файла на 500 и 2000 строк. Запустил скрипт и понял что он не остановился на "количество обработаных строк 2600+ ", понял что он читает рандомом файлы и строки (

Как сделать что бы он работал по порядку начиная с 1.txt +1... 10.txt и так же шел по строкам в каждом файле ? Или даже просто после прочтения файла удалял его?
Если возможно реализовать удаления файлов после прочтения, считать строки уже тогда будет не актуально.

Спасибо за помощь!

Программка которой я режу txt на количество строк "KeyWordKeeper"
Изначально я задумывал 2 цикла:

1.
Почистил лог.
Code: (clickermann) [Select]
FOR ($a=0, $a<1)    // 1 кусок цикла
 
      WAITMS(10)
      LCLICK(1011,360)
 
   END_CYC
- это для того что бы клацать на кнопку очистки лога, что бы он не рос...

2. Это сам процесс со строками, из текстового файла скопировать строку в буфер и вставить куда нужно.

Отрабатывает $i < 150 выходит с цикла, - жмет кнопку, чистит лог ) только для этого. И так по идеи должно было быть по кругу.


Только что запустил для теста скрипт что Вы написали:
Создал 2 txt файла закинул в один 2000 строк в другой 750.
Скрипт прочитал по 150 строк из каждого файла и удалил их )

я бы мог изменить значение $i < 150 например на 50000 но тогда, лог будет расти и начнет тормозить ( особенно под конец.

Идея простая (наверное :D), нажать ЛКМ (почистить лог), вставить по очереди 150 строк из файла на 100к строк, нажать ЛКМ. И так по кругу до конца строк в файле и так к следующему.

не знаю на сколько это правильно но команду
Code: (clickermann) [Select]
HALT
я всегда убираю
Code: (clickermann) [Select]
//HALT

3
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)

Что то пошло не так ( :'(
Сегодня выходной ... Немного присмотрелся, увидел что то-то не так, решил закинуть в папку буфера (GETFILELIST($arr, "C:\papka\*.txt")) 2 txt файла на 500 и 2000 строк. Запустил скрипт и понял что он не остановился на "количество обработаных строк 2600+ ", понял что он читает рандомом файлы и строки (

Как сделать что бы он работал по порядку начиная с 1.txt +1... 10.txt и так же шел по строкам в каждом файле ? Или даже просто после прочтения файла удалял его?
Если возможно реализовать удаления файлов после прочтения, считать строки уже тогда будет не актуально.

Спасибо за помощь!

4
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)

5
Чтобы небыло ошибки, надо в строке
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив
оставить только имена существующих файлов, остальные удалить (вместе с разделителями).

И значит нужно вернуть на место нарастающую переменную:
INC ($num,1)   // нарастающая переменная, строка +1
или
INC($e,1)  // нарастающая переменная, считает количество строк в логе
И соответственно, вывести её в лог.



Сидел смотрел на код... Чет ничего не получается реализовать ((

Нашел программку которая режет txt на количество строк, разрезал на файлы по 5 мб, - их быстрее Clickermann переваривает )

Могу Вас попросить, прикрутить нарастающую переменную которая будет считать строки до конца перебора всех файлов, к скрипту с масивами (он быстрее работает)

Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив
 
FOR($n = 0, $n < ARRSIZE($arr))
 
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
 
   FOR ($a=0, $a<1)    // 1 кусок цикла
 
      WAITMS(10)
      LCLICK(1011,360)
 
   END_CYC
 
   LCLICK(344,705)
 
   $count = TFCOUNT($file) + 1 // количество строк в файле
 
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
 
      $b = TFREAD($file, $i)
 
      TOCLIP(STRCONCAT("Привет ", $b))
 
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
 
      KEYPRESS(#ENTER)
      WAITMS(5)
 
   END_CYC
 
END_CYC
 
THREAD(name, 1)
   WAIT(3) // частота вывода в лог
   // LOGCLEAR // чтобы лог не разрастался
   LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
END_THREAD
 
HALT


6
А еще лучше будет, если лог обновлять не по времени, а по требованию.

Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
   END_CYC
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
//
LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог последней статистики

HALT

THREAD(log, 1)
   WAIT(3) // ожидание обновления лога
   WHILE(ISKEYDOWN(#F4)) // если нажата клавиша F4 - лог будет обновляться
      // LOGCLEAR // чтобы лог не разрастался
      LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
      WAIT(1) // частота обновления лога
   END_CYC
END_THREAD

Спасибо большое Вам за помощь!

1 вариант более мне понятен, но работает немного медленнее чем 2 вариант, единственное что счетчик слетает после выхода из 2 куска скрипта после выполнения $i < 150 (и в 1 скрипте и во 2)... Как это можно исправить ? - что бы постоянно считало, мне это нужно что бы не использовать TFDELETE, я потом сам руками открываю и удаляю пройденные строки, так как иногда скрипт может часов 10 работать, а иногда жена говорит поехали в магазин и я все останавливаю через 30 минут )))

3 скрипт заканчивается ошибкой, добавил 2 вложения (скрины)


7
https://yadi.sk/d/twaOcrnqrgPyGw
SoftPerfect RAM Disk
 
Этой программой можно сделать виртуальный диск в оперативной памяти. Выглядит, как обычный диск с буквой, главное что бы оперативной памяти хватил.



Установил, выделил 200 мб, скинул скрипт и файл, но что-то не очень улучшило ситуацию (

Подскажите пожалуйста реализацию с чтением файлов из папки по очереди, если это возможно.

8
Большие файлы с SSD быстрее читаются или с виртуального диска в оперативной памяти

Если я правильно понял вопрос, то файлы читаются с SSD (на вооружении имеется 2 SSD по 1.5 ТБ), потому что я далек от "Виртуального диска в оперативной памяти", - даже не представляю как это реализовать (

9
Всем доброго времени суток Уважаемые!

Написал скрипт, ну точнее собрал по частям с того что нашел на форуме, так как не особо соображаю в алгоритмах (
Проблема в том что файлы txt в среднем от 80 до 100 метров, и весь этот процесс очень туго идет, хотя тестировал на файлах до 2-3 метров - все летит как ракета )

Подскажите пожалуйста как можно это все безобразие оптимизировать и ускорить ?
Или как вариант чтение txt файлов с определенной папки по очереди (add.txt, add2.txt, ... add100.txt) к примеру.

Получилось вот что:

Code: (clickermann) [Select]
FOR ($a=0, $a<1)    // 1 кусок цикла
   
   WAITMS(10)
   LCLICK(1011,360)
   
END_CYC

LCLICK(344,705)

FOR ($i=0, $i<150) // 2 кусок
   
   INC ($num,1)    // нарастающая переменная, строка +1
   
   IF($num > TFCOUNT ("add.txt"))     // файл со строками
   HALT        // конец скрипта
   END_IF
   
   $b = TFREAD ("add.txt", $num)
   //TFDELETE("add.txt", 1)  - неактуально, очень замедляет процесс
   
   INC($e,1)  // нарастающая переменная, считает количество строк в логе
   
   TOCLIP(strconcat("Привет ",$b))
   
   KEYDOWN (#CTRL)
   KEYDOWN (#V)
   KEYUP (#V)
   KEYUP (#CTRL)
   
   KEYPRESS(#ENTER)
   WAITMS(5)
   
   LOGWRITE ($e)     // лог
   
END_CYC

Спасибо за Ваше внимание, буду очень благодарен за помощь!

10
Вот опять, нафига цикл
Code: (clickermann) [Select]
   $check2 = 0      // 1 сравнение
   WHILE($check2 = 0)
если при любом варианте происходит выход из него $check2 = 1 ?
Получается и этот цикл не нужен...

Простите, но я не понял вопроса ((

Я пока тестил: сравнивал все варианты, перезагружал ПК, вырубал интернет, крашил страницу... Выпил литр кофе :-\

Суть в том что оно работает как мне было нужно и ЦП грузит в половину, я доволен, Вам спасибо!  ;)

11
Спасибо Oraven! :) добавил пару строк и заработало как я хотел!
Удалил лишний код, с временем решил не играться, оставил просто что бы через 5000 повторов была перезагрузка.

вот код который мне был нужен, точнее конечный и правильный результат
Code: (clickermann) [Select]
#autorun
#logfile

// Ожидание загрузки Chrome
SUB(ожидание)
   $t = $_time_t + 30      // до 30 сек
   $check1 = 0
   WHILE($check1 = 0)
      GETSCREEN(1650,270, 1820,306)
      IF_PICTURE_IN (1650,270, 1820,306, "b.bmp", -1, 100)
         // Проверка 1 bmp
         $check1 = 1
         WAITMS(100)
      ELSE             // если нет
         IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 100)
            // Проверка 2 bmp
            $check1 = 1
            WAITMS(100)
         ELSE         // если ничего не совпадает обновляем
            WAITMS(150)
            IF($t < $_time_t)
               LOGWRITE ("ОБНОВИТЬ LC")
               LCLICK(77,43)     // жмем LC по x, y
               WAITMS(100)
               $t = $_time_t + 30
            END_IF
         END_IF
      END_IF
   END_CYC
END_SUB
// end ожидания

// обновить страницу
SUB(обновить)
   LCLICK(77,43)
   WAIT(5)
END_SUB
// end обновить страницу

//=== Основной код ==========================================

WAIT(40)
LOGWRITE ("НАЧАЛО ФОР")
FOR($i=0, $i<5000)   // начало цикла проверок,  повторить 5000 раз
   LOGWRITE ("1 СТАРТ")
   WAITMS(250)
   ожидание()
   LOGWRITE ("НАЧАЛО сравнения")
   $check2 = 0      // 1 сравнение
   WHILE($check2 = 0)
      WAITMS(150)
      GETSCREEN(1650,270, 1820,306)
      IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 100)
         GETSCREEN
         SCREENSHOTEX(0,0, $_xmax,$_ymax, "Image_xp1_", 1) // делаем скрин в  папку
         SOUND("Dring.wav")           // немного музыки в минуты радости :)
         WAITMS(150)
         LOGWRITE ("GOOD НАЙДЕН")
         LCLICK(1775,239)   // жмем след страницу
         WAIT(3)
         $check2 = 1        // Идем в начало
      ELSE           // 2 сравнение
         LOGWRITE ("начало сравнения по серому цвету bmp картинкой")     // для точности
         GETSCREEN(1610,375, 1765,535)
         IF_PICTURE_IN (1610,375, 1765,535, "b.bmp", -1, 100)
            LOGWRITE ("СЕРЫЙ найден")
            WAITMS(150)
            LOGWRITE ("жмем след страницу")
            LCLICK(1775,239)   // жмем след страницу
            WAIT(3)
            $check2 = 1        // Идем в начало
         ELSE       // 3 сравнение
            LOGWRITE ("начало сравнения по красному цвету bmp картинкой")
            IF_PICTURE_IN (1610,375, 1765,535, "red.bmp", -1, 100)
               LOGWRITE ("красный найден")  // не подходит, ошибка, обновляем
               LOGWRITE ("обновить страницу")
               обновить()
               WAITMS(150)
               LOGWRITE ("В НАЧАЛО")
               $check2 = 1        // Идем в начало
            ELSE              // если вдруг отпадет инет
               WAITMS(150)
               LOGWRITE ("красный НЕ найден")
               LOGWRITE ("обновить страницу")
               обновить()
               WAITMS(150)
               LOGWRITE ("В НАЧАЛО")
               $check2 = 1        // Идем в начало
            END_IF
         END_IF
      END_IF
   END_CYC
   LOGWRITE ("конец сравнения")
END_CYC
LOGWRITE ("RESTART")

WAIT(10)
LCLICK(1892,7)
WAIT(5)
// рестарт ПК
EXECUTE ("TASKKILL","/ f /IM chrome.exe")
EXECUTE ("shutdown.exe", "/r /f /t 03")
HALT(1)

Всем добра  ;)

12
IF($time1 < $_time_t)
   $time1 = $_time_t + 5600 // 5600 сек перезагрузка   
 это   ваше условие вообще работать не будет, так как после после перезагрузки компа и перезапуска программы переменные обнулятся

так было и задумано, перезагрузка, обнуление и заново  :)

13
А еще есть ли смысл писать 90 % совпадения без использования цветокоррекции? Это ты сам придумал или просто от куда то скопировал? Процент совпадения меньше 100 создает дополнительную нагрузку и уменьшает скорость поиска.

Спасибо за помощь, искал по форуму, рвал куски кода которые мне были нужны и правил пока код не заработает как мне нужно,  теперь я понял что за 90 ... исправил на 100.
Загрузка ЦП упала до 4-50% после добавления GETSCREEN с конкретной областью поиска.

Начал тестировать код который Вы дали и понял что я коментарии написал не правильно, изначально открыл страницу с серым цветом в Chrome и при запуске кликера с ожиданием 40 сек в логе я увидел:

17:42:04 1 СТАРТ
17:42:04 конец ожидания
17:42:04 начало сравнения
17:42:04 начало сравнения по серому цвету bmp картинкой
17:42:04 СЕРЫЙ найден
17:42:05 начало сравнения по серому цвету bmp картинкой
17:42:05 СЕРЫЙ найден
17:42:06 начало сравнения по серому цвету bmp картинкой
17:42:06 СЕРЫЙ найден
17:42:07 начало сравнения по серому цвету bmp картинкой
17:42:07 СЕРЫЙ найден...........
..............................................

Code: (clickermann) [Select]
ELSE           // 2 сравнение
            LOGWRITE ("начало сравнения по серому цвету bmp картинкой")     // для точности
            IF_PICTURE_IN (1610,375, 1765,535, "b.bmp", -1, 90)
               LOGWRITE ("СЕРЫЙ найден")  // начать заново
               WAITMS(150)
            ELSE       // 3 сравнение

в задумке должно было закончить сравнение (нажать на следующую страницу строка 90.) и начать цикл заново
Верный код
Code: (clickermann) [Select]
#autorun

// Ожидание загрузки Chrome
SUB(ожидание)
   $t = $_time_t + 30      // до 30 сек
   $check1 = 0
   WHILE($check1 = 0)
      GETSCREEN
      IF_PICTURE_IN (1650,270, 1820,306, "b.bmp", -1, 90)
         // Проверка 1 bmp
         // 0,0, $_xmax,$_ymax, file.bmp  53,26, 95,59,     12,1, 42,25, "file2.bmp"
         $check1 = 1
         WAITMS(100)
      ELSE             // если нет
         IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 90)
            // Проверка 2 bmp
            $check1 = 1
            WAITMS(100)
         ELSE         // если ничего не совпадает обновляем
            WAITMS(150)
            IF($t < $_time_t)
               LOGWRITE ("ОБНОВИТЬ LC")
               LCLICK(77,43)     // жмем LC по x, y
               WAITMS(100)
               $t = $_time_t + 30
            END_IF
         END_IF
      END_IF
   END_CYC
END_SUB
// end ожидания

// обновить страницу
SUB(обновить)
   LCLICK(77,43)
   WAIT(5)
END_SUB
// end обновить страницу

//=== Основной код ==========================================

WAIT(40)
IF($time1 < $_time_t)
   $time1 = $_time_t + 5600 // 5600 сек перезагрузка
   
   FOR($i=0, $i<5000)   // начало цикла проверок,  повторить 5000 раз
      LOGWRITE ("1 СТАРТ")
      WAITMS(250)
      ожидание()
      //   LOGWRITE ("конец ожидания")
      LOGWRITE ("начало сравнения")
      $check2 = 0      // 1 сравнение
      WHILE($check2 = 0)
         WAITMS(150)
         GETSCREEN
         IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 90)
            $check2 = 1
            SCREENSHOTEX(0,0, $_xmax,$_ymax, "Image_xp1_", 1) // делаем скрин в  папку
            WAITMS(150)
            LOGWRITE ("GOOD НАЙДЕН")
         ELSE           // 2 сравнение
            LOGWRITE ("начало сравнения по серому цвету bmp картинкой")     // для точности
            IF_PICTURE_IN (1610,375, 1765,535, "b.bmp", -1, 90)
               LOGWRITE ("СЕРЫЙ найден")  // начать заново
               WAITMS(150)
            ELSE       // 3 сравнение
               LOGWRITE ("начало сравнения по красному цвету bmp картинкой")
               IF_PICTURE_IN (1610,375, 1765,535, "red.bmp", -1, 90)
                  LOGWRITE ("красный найден")  // не подходит, ошибка, обновляем
                  LOGWRITE ("обновить страницу")
                  обновить()
                  WAITMS(150)
                  LOGWRITE ("В НАЧАЛО")
                  $check2 = 2        // Идем в начало
               ELSE              // если вдруг отпадет инет
                  WAITMS(150)
                  LOGWRITE ("красный НЕ найден")
                  LOGWRITE ("обновить страницу")
                  обновить()
                  WAITMS(150)
                  LOGWRITE ("В НАЧАЛО")
                  $check2 = 2        // Идем в начало
               END_IF
            END_IF
         END_IF
      END_CYC
      IF($check2 ! 2)
         LOGWRITE ("конец сравнения")
         WAITMS(150)
         LCLICK(1775,239)   // жмем след страницу
         LOGWRITE ("ЗАНОВО")
         WAIT(3)
      END_IF
   END_CYC
   
   // после 5000 сравнений обновить страницу
   WAIT(5)
   LOGWRITE ("ОБНОВЛЕНИЕ, ПОСЛЕ 1 ФОР")
   обновить()
   LOGWRITE ("RESTART")
END_IF

WAIT(10)
LCLICK(1892,7)
WAIT(5)
// рестарт ПК
EXECUTE ("TASKKILL","/ f /IM chrome.exe")
EXECUTE ("shutdown.exe", "/r /f /t 03")
HALT(1)

Думал переделать свой код с Вашими исправлениями но у меня там GOTO, по другому я не понимаю как ( склад ума не кодера и практики нет...

Если не в тягость исправьте пожалуйста что бы было:
Зашел в цикл:
1 сравнение: синий нашли делаем скрин - следующая страница, цикл заново, - если нет ищем серый
2 сравнение: нашли серый - БЕЗ скрина следующая страница, цикл заново, - если нет ищем красный (это ошибка, страница загрузилась не полностью или не правильно)
3 сравнение: нашли красный - обновили, вернулись в начало проверок, если нет - просто обновили и в начало проверок.


14
Доброе время суток Уважаемые!
Помогите пожалуйста понять почему ЦП грузится на 100% и если возможно исправить скрипт.
Установлена Oracle VM VirtualBox там Windows XP PS3 x86 выделил 1GB виртуальной памяти и один процессор от i7-7700HQ.

Всю ночь сидел писал, тестил, читал форум и снова писал.
Все работает, но мне что то подсказывает что где-то что-то не так, иногда проскакивает строки кода (вывод из LOGWRITE).

Задача была что бы при вкл. ПК батником с автозагрузки запускался Ghrome и Clickermann, дальше вкладка с миллионами страниц..
1) идет проверка на загрузку страницы и javascript двумя bmp картинками.
2) сравнение картинками цвета, цепочка такая: синий подходит делаем скрин - следующая страница, если нет ищем серый - нашли - идем дальше, если нет ищем красный (это ошибка) - нашли - обновили, вернулись в начало проверок, если нет просто обновили и в начало.
3) все это дело в условии со временем, что бы через 5600 секунд перезагрузить ПК.

Вот код, посмотрите если не тяжело, буду очень благодарен! Заранее спасибо  :)

Code: (clickermann) [Select]
#autorun
WAIT(40)
IF($time1 < $_time_t)
   $time1 = $_time_t + 5600 // 5600 сек перезагрузка
   
   // Ожидание загрузки Chrome
   SUB(ожидание)
      $t = $_time_t + 30      // до 30 сек
      $check1 = 0
      WHILE($check1 = 0)
         GETSCREEN
         IF_PICTURE_IN (1650,270, 1820,306, "b.bmp", -1, 90)
            // Проверка 1 bmp
            // 0,0, $_xmax,$_ymax, file.bmp  53,26, 95,59,     12,1, 42,25, "file2.bmp"
            $check1 = 1
            WAITMS(100)
         ELSE             // если нет
            IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 90)
               // Проверка 2 bmp
               $check1 = 1
               WAITMS(100)
            ELSE         // если ничего не совпадает обновляем
               WAITMS(150)
               IF($t < $_time_t)
                  LOGWRITE ("ОБНОВИТЬ LC")
                  LCLICK(77,43)     // жмем LC по x, y
                  $t = $_time_t + 30
               END_IF
            END_IF
         END_IF
      END_CYC
   END_SUB
   // end ожидания
   
   // обновить страницу
   SUB(обновить)
      LCLICK(77,43)
      WAIT(5)
   END_SUB
   // end обновить страницу
   
   FOR ($i=0, $i<5000)   // начало цикла проверок,  повторить 5000 раз
      1:
      LOGWRITE ("1 СТАРТ")
      WAITMS(250)
      ожидание()
      //   LOGWRITE ("конец ожидания")
      LOGWRITE ("начало сравнения")
      $check2 = 0      // 1 сравнение
      WHILE($check2 = 0)
         WAITMS(150)
         GETSCREEN
         IF_PICTURE_IN (1650,270, 1820,306, "b2.bmp", -1, 90)
            $check2 = 1
            SCREENSHOTEX(0,0, $_xmax,$_ymax, "Image_xp1_", 1) // делаем скрин в  папку
            WAITMS(150)
            LOGWRITE ("GOOD НАЙДЕН")
         ELSE           // 2 сравнение
            WAITMS(250)
            LOGWRITE ("начало сравнения по серому цвету bmp картинкой")     // для точности
            $check2 = 0
            WHILE($check2 = 0)
               WAITMS(100)
               IF_PICTURE_IN (1610,375, 1765,535, "b.bmp", -1, 90)
                  $check2 = 1
                  LOGWRITE ("СЕРЫЙ найден")  // начать заново
                  WAITMS(150)
               ELSE       // 3 сравнение
                  LOGWRITE ("начало сравнения по красному цвету bmp картинкой")
                  $check3 = 0
                  WHILE($check3 = 0)
                     WAITMS(100)
                     IF_PICTURE_IN (1610,375, 1765,535, "red.bmp", -1, 90)
                        $check3 = 1
                        LOGWRITE ("красный найден")  // не подходит, ошибка, обновляем
                        LOGWRITE ("обновить страницу")
                        обновить()
                        WAITMS(150)
                        LOGWRITE ("В НАЧАЛО")
                        goto(1)        // Идем в начало
                     ELSE              // если вдруг отпадет инет
                        WAITMS(150)
                        LOGWRITE ("красный НЕ найден")
                        LOGWRITE ("обновить страницу")
                        обновить()
                        WAITMS(150)
                        LOGWRITE ("В НАЧАЛО")
                        goto(1)        // Идем в начало
                     END_IF
                  END_CYC
               END_IF
            END_CYC
         END_IF
      END_CYC
     
      LOGWRITE ("конец сравнения")
      WAITMS(150)
      LCLICK(1775,239)   // жмем след страницу
      LOGWRITE ("ЗАНОВО")
      WAIT(3)
   END_CYC
   
   FOR ($a=0, $a<1)        // после 5000 сравнений обновить страницу
      WAIT(5)
      LOGWRITE ("ОБНОВЛЕНИЕ, ПОСЛЕ 1 ФОР")
      обновить()
     
   END_CYC
   LOGWRITE ("RESTART")
END_IF

WAIT(10)
LCLICK(1892,7)
WAIT(5)
// рестарт ПК
EXECUTE ("TASKKILL","/ f /IM chrome.exe")
EXECUTE ("shutdown.exe", "/r /f /t 03")
HALT(1)

Pages: [1]