Логика при записи скрипта.
-
Здравствуйте. Пожалуйста сделайте для каждого действия шаблона успех и неудача , то есть шаблон не в одну колонку с вложенностью, а в три колонки для каждого действия - то есть если действие выполнено мы делаем одно, а если нет то второе. Или покажите подробнее как реализована логика в данный момент - не нашел в вики.
-
Пожалуйста сделайте для каждого действия шаблона успех и неудача
В таком случае все скрипты будут выглядеть диагонально.
Или покажите подробнее как реализована логика в данный момент - не нашел в вики.
Если действие выполнено успешно, то выполняется действие следующее за ним.
Если действие не выполнено, то поток завершает работу, сразу же запускается новый поток, который начинает действия сначала.Если вы не хотите чтобы поток завершался, то действия можно поместить в функцию. http://wiki.bablosoft.com/doku.php?id=ru:functions
Использование функций очень хорошо видно на примере:
Допустим, вы пишите комбайн для соц сети, тогда код может выглядеть так:Вызвать функцию вход в аккаунт Если пользователь выбрал постинг Вызвать функцию постинга Если пользователь выбрал добавление в друзья Вызвать функцию добавления в друзья итд
Таким образом если постинг не удастся, то добавление в друзья может отработать потом, и поток не будет входить повторно.
-
@support said in Логика при записи скрипта.:
Если действие выполнено успешно, то выполняется действие следующее за ним.
Если действие не выполнено, то поток завершает работу, сразу же запускается новый поток, который начинает действия сначала.Сегодня делал парсер выдачи одного сайта - значит на выдаче таблица 1ый столбец - прокси, 2ой столбец порт - алгоритм получился такой:
- Начинаем цикл -> получить текст для каждого элемента и записать в переменную -> добавить элемент(указываю текстовый файл куда добавить строку.
Пытался в цикл запихнуть второй столбец и в "добавить элемент писать сразу Proxy_variable:port_variable - но не получается! - пришлось делать цикл для второго столбца - записал оба цикла в функцию - А самое интересное начинается дальше - выдача идет на нескольких страницах - делаю новый цикл - проверяю существование кнопки перехода на следующую страницу - двигаю и кликаю мышью - запускаю функцию парсинга - вроде все нормально - даже просто супер - Огромное Спасибо за проделанную работу! НО! Задача то не закончена!!! Мне необходимо после того как я получу все значения со страницы - парсить поочередно строки с обоих файлов в переменные и писать в новый файл в формате переменная1:переменная2 - но вся работа обрывается когда не срабатывает проверка на существование кнопки перехода на следующую страницу - поэтому я и просил сделать действия для правда и ложь! и не писать шаблон в столбец - это делает его очень "узким" не позволяющим решать сложные задачи.
Как мне быть в этом случае - понятно, что я могу сделать объединение строк в новом шаблоне - но это как то грубо получится).
Пришла мысль о том, а что если для цикла указывать не стиль конкретной ячейки конкретного столбца, а указать цикл для таблицы в целом, а текст взять не по параметрам стиля цикла, по заданным - сработало! но без цикла! Получил текст 1столбец:1я строка - получил текст 2ой столбец:1строка - записал в файл переменная 1 : переменная 2 - и все скрипт остановился - без повтора для других элементов. Сделайте такую возможность или объясните как реализовать?
-
но вся работа обрывается когда не срабатывает проверка на существование кнопки перехода на следующую страницу - поэтому я и просил сделать действия для правда и ложь!
Есть действие "Игнорировать Ошибки" После него записывается переменная WAS_ERROR можете делать иф и выполнять что угодно там. http://wiki.bablosoft.com/doku.php?id=ru:how_to_catch_errors
Сделайте такую возможность или объясните как реализовать?
Я не понял. Какую возможность?
-
@support said in Логика при записи скрипта.:
Сделайте такую возможность или объясните как реализовать?
Я не понял. Какую возможность?
Очень хочется видеть не линейное построение шаблона - так как я не могу задать цикл одновременно для двух массивов - то возможно параллельный запуск циклов?
Либо исполнять в цикле различные параметры - для цикла задаем родительский класс элемента, а для выполняемой функции дочерние. Как в примере с парсингом таблицы - начинаю цикл по классу .proxy__t - это общий класс для таблицы, получаю текст первой ячейки по классу .tdl - это класс для первого столбца таблицы, получаю текст по классу .proxy__t td:nth-child(2) - это класс ячеек второго столбца - срабатывает - но не идет в цикл.
Либо я сильно заморочился, просто хочется сделать скрипт без задания ресурсов из файла в которые сперва отдельно будут записываться прокси и отдельно порты - а потом все это будет писаться в конечный файл - было бы красиво -цикл-спарсить первый прокси - спарсить порт - записать в файл прокси порт.
-
@Turutur said in Логика при записи скрипта.:
Очень хочется видеть не линейное построение шаблона - так как я не могу задать цикл одновременно для двух массивов - то возможно параллельный запуск циклов?
Объеденить 2 списка проще простого. Сделать цикл по первому, в нем брать элемент со второго и присоединять к [[FOREACH_DATA]].
Та и все. Вот проект mergelists.xml
-
@support said in Логика при записи скрипта.:
Объеденить 2 списка проще простого. Сделать цикл по первому, в нем брать элемент со второго и присоединять к [[FOREACH_DATA]].
Та и все. Вот проект mergelists.xmlСегодня полдня ломал голову, что Вы указали в примере - это совсем не то о чем идет речь! Причем здесь объединение данных двух списков - списки здесь вовсе не причем!!! Речь идет о параллельном запуске двух ЦИКЛОВ - по разным параметрам - это очень необходимо, чтобы не писать взятые значения с цикла в файл, а держать его в присвоенной переменной. Может я реально не так объясняю???!!! - Просто е действие не могу второй день сделать!!! Покажите на примере пожалуйста:
у меня такая задача - с страницы http://hideme.ru/proxy-list/#list - начать цикл по первому и второму столбцу "IP адрес" и ПОРТ - взять значение IP с первой ячейки первого столбца - сохранить в переменную, взять порт спервой ячеки второго столбца - сохранить в переменную - записать в файл в виде переменнаяIP:переменнаяПОРТ. Чтобы именно так получилось - без предварительной записи a разных файлах отдельно ip отдельно порт - покажите как реализовать
-
@Turutur Можно сохранить ип в один список, потом сохранить порты в другой список а потом объединить их используя мой пример.
-
Ладно здесь все понятно - делаем что можем - возникла далее такая ситуация - так как выдача идет постраничная - то соответственно в цикл включаем клик по кнопке для перехода на следующую страницу и парсинг - задача получить данные со всех страниц выдачи по запросу - НО на этом скрипт не должен остановиться, а должно произойти следующее - если клик по кнопке следующей страницы не произведен, так как страницы закончились - то выполняем следующее действие - обработку данных - я реально не догоняю как использовать логику - как то очень сложно реализована для понимания!
И еще пожалуйста объясните на примере чем файл отличается от списка?? И как и в каком случае это используется и почему в списке только 3 значения?
И еще пожалуйста, очень прошу - сделайте уже какой то способ, чтобы можно было просматривать содержимое переменных и листов.
Да кстати - когда будет рабочая версия программы с действующей прокруткой к элементу и вообще прокруткой - Вы фикс мне скинули - но он для внешних кнопок - внутренний функционал все равно не работает.
-
@Turutur said in Логика при записи скрипта.:
Ладно здесь все понятно - делаем что можем - возникла далее такая ситуация - так как выдача идет постраничная - то соответственно в цикл включаем клик по кнопке для перехода на следующую страницу и парсинг - задача получить данные со всех страниц выдачи по запросу - НО на этом скрипт не должен остановиться, а должно произойти следующее - если клик по кнопке следующей страницы не произведен, так как страницы закончились - то выполняем следующее действие - обработку данных - я реально не догоняю как использовать логику - как то очень сложно реализована для понимания!
Есть действие "Игнорировать Ошибки", софт продолжит работу, если возникнет исключение, к тому же у вас будет возможность его обработать использовав переменные WAS_ERROR и LAST_ERROR. http://wiki.bablosoft.com/doku.php?id=ru:how_to_catch_errors
Вроде все просто. Если знаете способ проще - скажите, я попробую его реализовать.И еще пожалуйста объясните на примере чем файл отличается от списка?? И как и в каком случае это используется и почему в списке только 3 значения?
Список - это набор данных, строки из файла, или найденные результаты на странице. С помощью действия "добавить элемент" можно сделать больше чем 3 элемента. Также списки можно записать/сохранить в файл одним действием.
И еще пожалуйста, очень прошу - сделайте уже какой то способ, чтобы можно было просматривать содержимое переменных и листов.
Этот функционал уже есть 2 последних версии. https://www.youtube.com/watch?v=UBgpWayk0SU
Да кстати - когда будет рабочая версия программы с действующей прокруткой к элементу и вообще прокруткой - Вы фикс мне скинули - но он для внешних кнопок - внутренний функционал все равно не работает.
Прокрутка работает нормально. Но на сайте hideme.ru разработчики переопределили системную функцию scrollTo именно из-за этого БАС не работал с этим сайтом. Сам баг я исправил несколько дней назад.
http://bablosoft.com/distr/BrowserAutomationStudioDevelopment/15.1.0/BrowserAutomationStudioInstallAllInOne.exe
-
Спасибо - большое за исчерпывающие ответы!
-
@support said in Логика при записи скрипта.:
Список - это набор данных, строки из файла, или найденные результаты на странице. С помощью действия "добавить элемент" можно сделать больше чем 3 элемента. Также списки можно записать/сохранить в файл одним действием.
Очень прошу - сделайте пожалуйста нормальный пример со списком - как туда добавить больше трех значений - ?
Я делал так - создаю список в переменную NEW_LIST - затем получаю текст в переменную - PROXY_ID - затем добавить элемент в список - выбираю список - выбираю добавляемую переменную - и все это обернуто в цикл! - в результате только одно значение IP в списке??? Как использовать список, как буфер обмена - для сохранения массива данных и дальнейшей обработки - пожалуйста на примере
-
@Turutur said in Логика при записи скрипта.:
и все это обернуто в цикл!
Нужно вынести действие создать список за цикл. В цикле должно остаться только добавление в список, но не его создание.
-
@support said in Логика при записи скрипта.:
Нужно вынести действие создать список за цикл. В цикле должно остаться только добавление в список, но не его создание.
Спасибо все получилось!
-
Не срабатывает логика - "Игнорировать ошибки" - ситуация следующая - внизу страницы есть кнопки для перехода между страницами выдачи - в виде цифры и стрелки вправо - делаю следующее - прокручиваю к элементу стрелки вправо - навести и нажать на класс правой стрелки(дождаться полной загрузки страницы) - и следующий блок "игнорировать ошибки" - так вот - например на выдаче 2 е страницы - нажатие стоит в цикле и блок игнора ошибки тоже - при первом витке цикла все срабатывает нормально - так как ошибки при нажатии на правую стрелку нет - но при переходе на вторую страницу - стрелка вправо исчезает - действие невыполняется очень долго - а потом скрипт останавливается и выдается сообщение, что не удалось дождаться цcc правой стрелки - что не так делаю? ведь по сути - зачем ждать появление элемента - если действие идет на клик, а страница загружена полностью. Как быть?
-
@Turutur said in Логика при записи скрипта.:
и следующий блок "игнорировать ошибки"
Действия, в которых игнорируются ошибки должны внутри "Игнорировать ошибки", а не перед ним.
Как быть?
Проверять существует ли стрелка вправо, и если она существует - завершать цикл.
-
@support said in Логика при записи скрипта.:
Проверять существует ли стрелка вправо, и если она существует - завершать цикл.
Логика программы меня реально в тупик загоняет - не могу срастить - админ - если не сложно сделай туториал по логике используемой в циклах - у меня просто платы в голове уже перегорели( - вот проект - в чем ошибка? - почему блок IF и не выполняется? - вернее игнорируются действия внутри блока: 0_1471607938317_proxi_parse_hideme.xml
Иногда - вернее всегда не понимаю - как использовать условия как в проекте для примера - то есть - как завязать цикл, да так, чтобы спарсить первую страницу, затем вторую, затем третью, а если третей нет - завершить цикл по парсу и начать обработку с записью d файл. Пожалуйста давйте этот момент разберем - уже который день голову ломаю - перебрал все варианты с логикой - не пойму правильно ли я начинаю цикл без элемента, а просто по переменной циклиндекс и как завершить цикл, если условия не выполнились?
-
если не сложно сделай туториал по логике используемой в циклах
Пожалуйста:
http://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_use_loops
http://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_execute_certain_action_depending_on_condition_if_statementЯ не вижу блока if в вашем проекте, поэтому не могу ответить на ваш вопрос.
Foreach должен получать на вход переменную типа список. CYCLE_INDEX - это номер. Так что работать не будет. Сделайте просто бесконечный цикл(от 1 до 10000) и завершайте его, когда нету кнопки перехода на следующую страницу.
Так же действие "Игнорировать ошибки" не содержит внутри себя ничего, поэтому не имеет смысла.
-
Я сильно извиняюсь не тот проект скинул - просто очень много чего пробывал - ниче не срабатывает - вот проект - где в цикле используются значения логики 0_1471692349011_proxi_parse_hideme - копия.xml - они так же не срабатывают - как и сама логика
-
@support said in Логика при записи скрипта.:
Сделайте просто бесконечный цикл(от 1 до 10000) и завершайте его, когда нету кнопки перехода на следующую страницу.
Это как? - как это реализовать то? Допустим я проверяю наличие элемента - если он есть переменная получает результат true - и что с этого как дальше поступить по чему вообще цикл начинать = как его останавливать - как работать с условиями - вы программист - Вам может это очевидно - я вроде не даун - но третий день пытаюсь разобраться в логике - по сути - логика - это цепочка последовательных умозаключений - в БАСе они отсутствуют - последовательные умозаключения - - нормально пожалуйста покажите как реализовать логику - по русски - на русскоязычном проекте пожалуйста!!!!
-
@Turutur Отличный проект!
Чтобы все заработало нужно заменить условие в цикле с
[[IS_EXISTS]] == "true"
на[[IS_EXISTS]]
и обновлять переменную IS_EXISTS в конце цикла.Вот так: