@kolanthony
Вам в первом сообщении все написали
Читайте https://rucaptcha.com/api-rucaptcha#solving_captchas
Смотрите https://rucaptcha.com/demo
Универсальное решение по обработке ошибок BAS?
-
Большое спасибо за советы друзья)
+- всё понял, но пока что полная картинка не вырисовалась как сделать по людски, возможно кто-то может поделиться неактуальным проектом у которого достаточно большой код и который организован именно на Выполнить код а не на кубиках, это было бы лучшим примером ) Рыскаю по всему форуму, те проекты что выкладывают участники, все на кубиках.
Я так понимаю текущий проект переделывать ради кода нет смысла всё таки. Есть смысл дальше по мере увеличения проекта внедрять именно код а не кубики.
Тогда вопрос по работе с ошибками остается открытым)

Как можно игнорировать все ошибки?) не пропуская при этом следующие действия, чтобы я хотя бы в нужных местах мог поставить исключения, а там где это неважно мог бы просто игнорировать?)
В текущем примере при любой ошибке в Register, дальше дело не пойдет, повторюсь у меня в реальном проекте много действий, если каждое оборачивать в Игнор ошибок, это будет немного неудобно, разве нет простого решения этому?)
-
@centerdevs Лучше игнорировать ошибки устанавливайте не на функции, вы просто не поймете что там было, а на действия. в самих функциях. Т.е найти какой то элемент например или загрузка url и вот его оборачивайте. Что бы это не выглядело в кубиках очень уж страшно у баса есть вот это

Вы же пишете код с нуля и шаблона нет потому каждое можете конечно заморочится и написать модуль с обработкой ошибок установить его и пусть обрабатывает. Но штатно только так. Это не сильно заморочит кубики можно комментировать и можно сворачивать. Как на скрине выше.
-
@f0cus Да, получается придется каждое действие оборачивать в игнор) в котором в случае ошибки можно вызывать функцию которая отправляет мне скриншот и информирует. Пока начну так "в лоб" делать, если приду к какому-нибудь адекватному комплексному решению - поделюсь с сообществом. Большое спасибо Вам за разъяснения и все наводки !)
-
Нашёл интересную штуку, при открытом проекте, можно нажать Менеджер модулей, и создать модуль из текущего проекта, таким образом мы получаем все свои кубики, в виде кода, где каждая функция интерфейсная, становится реальной) и с кодом внутри.
Вот пример тестовый
function Login() { _call(function() { _on_fail(function(){ VAR_LAST_ERROR = _result() VAR_ERROR_ID = ScriptWorker.GetCurrentAction() VAR_WAS_ERROR = false _break(1,true) }) CYCLES.Current().RemoveLabel("function") load("googlecom")! log("Неудачно"); load("http://google.com/")! log("Удачно"); },null)! _if(VAR_WAS_ERROR,function(){ log("Произошла ошибка : " + VAR_LAST_ERROR) })! }Сделал пару тестов методом тыка, при ошибке все ровно обработка дальнейшая прекращается, тут разве что делать какую-то функцию/класс обёртку.
А еще нашел кнопку скрипт, которая показывает код всех кубиков в более реальном как оно показывается в кубиках, с ид-шками итд. По сути тот же код что и выше + указание начала конца кубиков и инфо.
-
-
https://community.bablosoft.com/assets/uploads/files/1476381371015-internalapi.pdf
-
https://raw.githubusercontent.com/bablosoft/BAS/master/Engine/text/apilist.txt
Вот список функций доступных к обращению, и главный вопрос )) Как организовать ignore error при работе с ними?
try { load("googlecom")! log("1 Удачно"); }catch (e){ log("1 Неудачно"); } try { load("http://google.com/")! log("2 Удачно"); }catch (e){ log("2 Неудачно"); }Вот так получилось игнорировать ошибку и продолжать выполнение кода, но блок catch не срабатывает при этом.
-
-
@centerdevs Оборачивайте не каждое действие, а зависимые блоки действий, то есть если в одном из них произойдет ошибка, то остальные не будут выполняться. Для более детальной обработки ошибок вы можете создать отдельную функцию, которую будите вызывать после каждого блока игнорирования ошибок.
-
@centerdevs said in Универсальное решение по обработке ошибок BAS?:
Вот так получилось игнорировать ошибку и продолжать выполнение кода, но блок catch не срабатывает при этом.
Этот код неверный, у БАС не все так просто, действия с ! в конце являются асинхронными. Я не буду объяснять как все это работает потому что это плохой путь и не рекомендуется разработчиком БАС.
-
@UserTrue странно, но эту асинхронность сгенерил сам BAS, на скриншоте выше там оригинал того что я экспортировал в модуль.
Так и планирую оборачивать группами которые взаимосвязаны, просто я уже +- нашел все методы для работы через Код, и для организации такой работы мне ведь и в коде нужно как-то игнорировать ошибки и их обрабатывать ) потому стало интересно как это делают собраться, кто работает с БАС через код )
-
@centerdevs said in Универсальное решение по обработке ошибок BAS?:
странно, но эту асинхронность сгенерил сам BAS, на скриншоте выше там оригинал того что я экспортировал в модуль.
Посмотрите внимательный, там где сгенерировал сам БАС нет try/catch у БАС свое api для работы с асинхронностью
-
@UserTrue да, это моя неудачная попытка словить ошибку )
_call(function(){ _on_fail(function(){ VAR_LAST_ERROR = _result() VAR_ERROR_ID = ScriptWorker.GetCurrentAction() log(VAR_ERROR_ID+' '+VAR_LAST_ERROR); }) load("googlecom")! log("1 Удачно"); }, null)! _call(function(){ _on_fail(function(){ VAR_LAST_ERROR = _result() VAR_ERROR_ID = ScriptWorker.GetCurrentAction() log(VAR_ERROR_ID+' '+VAR_LAST_ERROR) }) load("http://google.com/")! log("2 Удачно"); }, null)!Вот таким образом получилось на данный момент ловить ошибку и продолжать работу дальше. Интересно можно ли будет как-то использовать этот _on_fail глобально.
-
@centerdevs нуу. ты можешь использовать лютейший костыль в виде eval. а вообще есть try catch
-
@centerdevs Я повторюсь БАС не заточен для работы через API, вы в итоге потратите кучу времени на танцы с бубном и понимание странных багов, которые скорей всего будут! Лучше учиться строить логику скрипта в соответствии с возможностями БАС
-
@centerdevs said in Универсальное решение по обработке ошибок BAS?:
Добрый день, прошу совета опытных ребят, поделитесь самым рабочим паттерном по работе с ошибками и исключениями.
Имеем - проект на 20 функций, в каждой 10-20 действий.
Вопрос - как можно, красиво и универсально обрабатывать ошибки?
Это мой первый проект, потому на данный момент, исходя из примеров и документации, для себя вижу пока что одно решение "в лоб":
- каждое действие оборачивать в блок "Игнор ошибок" где при ошибке делаем "Скриншот" + отправка мне в телеграмм извещения ( или сервер, не суть ), с указанием места где произошла ошибка в коде, или простое игнорирование.
Получается нужно два типа реагирования на ошибки:
-
когда точно знаю что элемент на странице обязан быть, а его нет, таким образом можно предположить что веб-ресурс поменял вёрстку, мы пропускаем функцию или совсем стопаем проект, зависит от условий в разных местах.
-
когда элемент не обязательно должен существовать, и нам нужно просто тихо проигнорировать и идти дальше
Проблема - если оборачивать каждое действие в игнор, это очень сильно увеличит общее количество кода ( блоков ), ухудшит общую читаемость, восприятие и тд.
Чего хотелось бы - не изобретать велосипед, а сразу сделать правильно. Поделитесь опытом друзья)
Только вы знаете, какие действия на странице важные, а какие нет. Оберните необходимые действия в игнор ошибок, или отключите опцию "Остановить поток, если элемент не найден"

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



А на счёт использования api BAS в действии "выполнить код", приведу скриншот ответа @support :

-
@f0cus said in Универсальное решение по обработке ошибок BAS?:
@Fox Воспользуюсь моментом. @Fox а защиту с нодой исправили? ато я чота этот момент пропустил. И в поиске нет ответа.
Ты про код из действия node js в открытом виде? Быстрее было проверить, чем спрашивать :). С шифровкой кода для ноды были какие то серьёзные трудности, какие именно не помню (не нашёл сходу ответ @support).
Я прятал важные участки кода в переменные BAS и выполнял в ноде через eval() -
Всё понял друзья, большое спасибо за внимание и помощь)
"Остановить поток если элемент не найден" даже не подумал глянуть про такую опцию)
Буду делать дальше тогда в том виде в котором есть, и понемногу копать про nodejs.