есть такая приколюха как открыть новую вкладку, там собствеено и открываешь новый сайт, но не забудь после открытия новой вкладки проверить список открытых вкладок, для этого есть специальный экшен , в нём ты и увидишь какой юрл у тебя в какой вкладке (с каким номером) в твоём в браузере открыты. После того как нашел номер кладки которую ты только что открыл, используй экшен закрыть вкладку , и у тебя закроется открытая только что вкладка и останется та на которую ты хотел вернуться. Да можно конечно закрыть первую вкладку и у тебя останется нулевая но в сложных скриптах бывают траблы и моржно запутаться и закрыть не ту)
Поток 2 часа весит с белым экраном с url равным about:blank
-
@kuzkuz said in Поток 2 часа весит с белым экраном с url равным about:blank:
P.S. У кого есть премиум аккаунт сообщите об данной проблеме разработчику так как костыли костылями, а думаю будет для всех лучше если разработчик сам пофиксит эти проблемы в коде самого BAS
Так а когда такая явная проблема - @Fox не обращает внимание разработчика на это?
У баса еще сотни таких еще багов. Зачем отвлекать важных людей? Нашел баг - пили костыль. Разработчик всего один, все усмотреть не может.
Если ты хочешь чтобы все работало идеально придеться пилить custom. -
@FastSpace said in Поток 2 часа весит с белым экраном с url равным about:blank:
@kuzkuz said in Поток 2 часа весит с белым экраном с url равным about:blank:
P.S. У кого есть премиум аккаунт сообщите об данной проблеме разработчику так как костыли костылями, а думаю будет для всех лучше если разработчик сам пофиксит эти проблемы в коде самого BAS
Так а когда такая явная проблема - @Fox не обращает внимание разработчика на это?
У баса еще сотни таких еще багов. Зачем отвлекать важных людей? Нашел баг - пили костыль. Разработчик всего один, все усмотреть не может.
Если ты хочешь чтобы все работало идеально придеться пилить custom.Ну если ты помнишь - в одной из обнов я заметил что не поставить локал ip. Говорили не в приоритете, а сделали с первой же обновой.
Но у меня нет проблемы белого экрана. А если и есть то я решил что оно мне не мешает.ps я решил проблему хитрее )
-
@kuzkuz said in Поток 2 часа весит с белым экраном с url равным about:blank:
Но у меня нет проблемы белого экрана. А если и есть то я решил что оно мне не мешает.
Да я тоже ставлю допустим не 50 потоков а 55 как раз с поправкой на эти зависшие потоки, но это ж не решение проблемы.
-
@Fox посоветовал снифферить запросы к ip-api.com
И таким образом найти те ответы или не ответы от ip-api.com
которые приводят к зависанию потокаПосле этого эту информацию уже можно будет передать разработчику.
-
Hi,
I'm from ip-api.com - if you notice any network or other issues with our service, please write to us at contact@ip-api.com, please include your IP (or proxy IP) and any other timeout/error information you may have. -
-
@vlad_ip-api said in Поток 2 часа весит с белым экраном с url равным about:blank:
Hi,
I'm from ip-api.com - if you notice any network or other issues with our service, please write to us at contact@ip-api.com, please include your IP (or proxy IP) and any other timeout/error information you may have.If you are really a representative of the site https://ip-api.com/, then it is better to create a separate topic with this message.
-
Все таки нужно вернуться к этой теме
так как потоки как не завершались так и не завершаются
а теперь мне хотелось бы использовать Планировщик что б запускать свои скрипты один за другим, но из за того что скрипты не завершаются нормальной работы с планировщиком не получитсяВот что хотелось бы уточнить
@FastSpace said in Поток 2 часа весит с белым экраном с url равным about:blank:Dstoffset нет у сервиса
Что за параметр Dstoffset
я посмотрел на тот json что возвращает https://ip-api.com/
да там нет ни какого Dstoffset , это значит что если я выбираю в кубике прокси в параметре метод получения информации об ip ip-api.com, то это это поле у меня всегда становиться равно 0 , или что там тогда пишется
И вообще не сколько важен этот параметр, у меня прокси со всего мира.
И как этот параметр можно получить откуда нить используя те данные которые возвращает ip-api.com -
Сегодня установил Wireshark
за ночь работы осталось 4 зависших потока
отключил все что можно на компе, закрыл все мессенжеры, все браузеры, выключил все другие скрипты BAS, выключил openserver
в общем выключил все что было можно
за 30 мин работы Wireshark не было не точно http но и tcp запросов
значит версия о том что происходит бесконечный цикл запросов к ip-api.com не подтвердилась
а потоки как весели так и продолжают весеть. -
@gomeapat Dstoffset это смещение летнего времени, если прокси из Мира, то надо смотреть есть ли в той стране такое понятие как сдвиг времени по летнему времени, иначе кубик невереную дату выставит.
Виноват именно ip-api. Выше пример кастом функции, никаких зависаний нет.
Зависать может даже не на каком-нибудь запросе. -
@FastSpace said in Поток 2 часа весит с белым экраном с url равным about:blank:
Dstoffset это смещение летнего времени, если прокси из Мира, то надо смотреть есть ли в той стране такое понятие как сдвиг времени по летнему времени, иначе кубик невереную дату выставит.
Да но сейчас же от ip-api не возвращается ни какого смещения летнего времени, так как этого параметра нет у них в списке возвращаемых значений
и что там выставляется сейчас?
C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\23.2.2\modules\Timezones\engine.js
строка 104
json_parsed["dstoffset"] = timezone_json["dstoffset"] || 0 -
@kuzkuz Я ставил через - ip-api.com
Но потом мои Пользователи Кучай начали писать мне что Прокси Отваливаются.
Я Оставил как было по Умолчанию и на всяк Случай в Игнор Ошибок их с последущей попыткой Загрузить их.
Ну и дай бог пока норм всё.
У меня Люди тож на Скриптах разными пользуются то ( кто по умней те в основном на Мобилках ) а есть и просто на Дешманских ( я сразу всех предупреждаю, что Пабл это говно ).
Вот по Умолчанию так Сказать и у меня и у моих пользователей норм работает ( было несколько человек и вот из за них в Игнор Обернул их и вроде всё норм более не жалуются ).
Тут вот, так сказать Палка о двух концах, у кого то Норм а у другого вообще Глюк за Глюком.
Кстати, была же Тема и я то вот Пока вообще от Самой Новой Версии отказался, и предпоследняя как по мне Лучше, последняя у меня вообще Глючила до ужаса, на Пустом Месте тупила.

-
Я добавил логирование того что происходит в файле
C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\23.2.2\modules\Timezones\engine.js
Теперь мой файл выглядит вот такfunction _get_ip_info() { _ARG = _arguments() _if_else(_ARG[1] == "database", function(){ _set_result(JSON.parse(native("timezones", "ipinfo", _ARG[0]))) },function(){ _if_else(_ARG[1] == "ip-api.com", function(){ _switch_http_client_internal() http_client_set_fail_on_error(false) _do(function(){ var Now = Date.now() /* Parse request list */ var RequestList = P("ipapi", "requestlist") if(!RequestList) RequestList = [] else { RequestList = JSON.parse(RequestList) } /* Remove old requests */ RequestList = RequestList.filter(function(Item){return (Now - Item.date < 3 * 60 * 1000)}); /* Parse ban time */ var EndTime = P("ipapi", "endtime") if(!EndTime) EndTime = 0 else { EndTime = parseInt(EndTime) } /* If ban time finished, reset block */ if(EndTime > 0 && Date.now() > EndTime) { EndTime = 0; PSet("ipapi", "endtime", "0") } /* Create request id for this thread or get old */ if(typeof(IPAPI_REQEUSTID) == "undefined") { IPAPI_REQEUSTID = rand() } /* Check if possible to do request */ var DoRequest = (RequestList.length < 5 || _ARG[2].length > 0) && EndTime == 0 && RequestList.indexOf(function(Item){return Item.id == IPAPI_REQEUSTID}) < 0 log('DoRequest = '+DoRequest) /* Add request to data structure */ if(DoRequest) { RequestList.push({id: IPAPI_REQEUSTID, date: Now}) PSet("ipapi", "requestlist", JSON.stringify(RequestList)) } _if(DoRequest, function(){ http_client_get2("http://" + (_ARG[2].length > 0 ? "pro." : "") + "ip-api.com/json/" + _ARG[0].replace(/[/g,"").replace(/]/g,"") + "?fields=status,message,countryCode,city,lat,lon,timezone,offset" + (_ARG[2].length > 0 ? ("&key=" + _ARG[2]) : ""),{method:("GET"),headers:("Accept-Encoding: gzip, deflate")})! /* Delete request id */ var RequestList = P("ipapi", "requestlist") log('RequestList '+RequestList) RequestList = JSON.parse(RequestList) RequestList = RequestList.filter(function(Item){return (Item.id != IPAPI_REQEUSTID)}); PSet("ipapi", "requestlist", JSON.stringify(RequestList)) log('RequestList '+JSON.stringify(RequestList)) var EndTime = http_client_header("X-Ttl") var RequestLeft = http_client_header("X-Rl") log('EndTime '+EndTime) log('RequestLeft '+RequestLeft) if(EndTime && RequestLeft) { /* Temporary ban new requests */ RequestLeft = parseInt(RequestLeft) if(RequestLeft < 20) { EndTime = Date.now() + (parseInt(EndTime) + 15) * 1000 PSet("ipapi", "endtime", EndTime.toString()) } } if(http_client_status() == 200 || http_client_status() == 403) { var json = http_client_content() log('ip-api = '+json) try { var json_parsed = JSON.parse(json) if(json_parsed["status"] == "success") { delete json_parsed["status"] json_parsed["country"] = json_parsed["countryCode"] delete json_parsed["countryCode"] json_parsed["latitude"] = json_parsed["lat"] delete json_parsed["lat"] json_parsed["longitude"] = json_parsed["lon"] var timezone_json = JSON.parse(native("timezones", "timezone_name_to_offset", json_parsed["timezone"])) json_parsed["offset"] = timezone_json["offset"] || 0 json_parsed["dstoffset"] = timezone_json["dstoffset"] || 0 json_parsed["valid"] = true _set_result(json_parsed) _break(2) }else { _set_result({valid:false}) _break(2) } }catch(e){ log(e) } }else{ log('http_client_status = '+http_client_status()) } })! sleep(3000)! })! http_client_set_fail_on_error(true) _switch_http_client_main() }, function(){ if(typeof(_ARG[3]) != "function") { fail("\"Custom IP information function\" parameter is not a function.") } _call_function(_ARG[3],{ "Ip" : (_ARG[0]) })! var FunctionResult = _result_function() if(typeof(FunctionResult) != "object") { fail("IP information function result is not an object") } if(typeof(FunctionResult.valid) != "boolean") { fail("IP information function result doesn't contain \"valid\" property.") } if(FunctionResult.valid) { if(typeof(FunctionResult.country) == "undefined") { fail("IP information function result doesn't contain \"country\" property.") } if(typeof(FunctionResult.latitude) == "undefined") { fail("IP information function result doesn't contain \"latitude\" property.") } if(typeof(FunctionResult.longitude) == "undefined") { fail("IP information function result doesn't contain \"longitude\" property.") } if(typeof(FunctionResult.timezone) == "undefined") { fail("IP information function result doesn't contain \"timezone\" property.") } if(typeof(FunctionResult.offset) == "undefined") { fail("IP information function result doesn't contain \"offset\" property.") } if(typeof(FunctionResult.dstoffset) == "undefined") { fail("IP information function result doesn't contain \"dstoffset\" property.") } } _set_result(FunctionResult) })! })! }Логирование показало бесконечный цикл
[757856303] [11:08:14] Поток №59 : DoRequest = true
[757856303] [11:08:14] Поток №59 : RequestList [{"id":"uJKNxZ6L2e","date":1611479294981}]
[757856303] [11:08:14] Поток №59 : RequestList []
[757856303] [11:08:14] Поток №59 : EndTime
[757856303] [11:08:14] Поток №59 : RequestLeft
[757856303] [11:08:14] Поток №59 : http_client_status = -1
[757856303] [11:08:14] Поток №59 : http_client_error_string =
[757856303] [11:08:18] Поток №59 : DoRequest = true
[757856303] [11:08:18] Поток №59 : RequestList [{"id":"uJKNxZ6L2e","date":1611479298043}]
[757856303] [11:08:18] Поток №59 : RequestList []
[757856303] [11:08:18] Поток №59 : EndTime
[757856303] [11:08:18] Поток №59 : RequestLeft
[757856303] [11:08:18] Поток №59 : http_client_status = -1
[757856303] [11:08:21] Поток №59 : DoRequest = true
[757856303] [11:08:21] Поток №59 : RequestList [{"id":"uJKNxZ6L2e","date":1611479301100}]
[757856303] [11:08:21] Поток №59 : RequestList []
[757856303] [11:08:21] Поток №59 : EndTime
[757856303] [11:08:21] Поток №59 : RequestLeft
[757856303] [11:08:21] Поток №59 : http_client_status = -1
[757856303] [11:08:24] Поток №59 : DoRequest = true
[757856303] [11:08:24] Поток №59 : RequestList [{"id":"uJKNxZ6L2e","date":1611479304168}]
[757856303] [11:08:24] Поток №59 : RequestList []
[757856303] [11:08:24] Поток №59 : EndTime
[757856303] [11:08:24] Поток №59 : RequestLeft
[757856303] [11:08:24] Поток №59 : http_client_status = -1
[757856303] [11:08:27] Поток №59 : DoRequest = true
[757856303] [11:08:27] Поток №59 : RequestList [{"id":"uJKNxZ6L2e","date":1611479307230}]
[757856303] [11:08:27] Поток №59 : RequestList []
[757856303] [11:08:27] Поток №59 : EndTime
[757856303] [11:08:27] Поток №59 : RequestLeft
[757856303] [11:08:27] Поток №59 : http_client_status = -1Который выполняется каждые 3 сек
думается мне что там где я дописал
log('http_client_status = '+http_client_status())
нужно поставить счетчик который бы увеличивался на 1, и так до тех пор пока он скажем будет меньше 10 , как только он станет равен 10 нужно вызывать fail('Не могу установить прокси более 10 раз')
но вот как в этот файл правильно вставить счетчик что б он работал для каждого потока, и при инициализации потока был равен 0
я не знаю в этом прошу мне помочь -
@gomeapat, добавил счетчик и ошибку если за 10 попыток получить информацию не удалось, можно установить свое количество попыток через выполнить код
_GET_IP_MAX_FAIL = количество попыток, весь модуль с изменением Timezones.zipfunction _get_ip_info() { _ARG = _arguments() _if_else(_ARG[1] == "database", function(){ _set_result(JSON.parse(native("timezones", "ipinfo", _ARG[0]))) },function(){ _if_else(_ARG[1] == "ip-api.com", function(){ _switch_http_client_internal() http_client_set_fail_on_error(false) _do(function(){ var cycle_index = _iterator(); var maximum_failes = typeof(_GET_IP_MAX_FAIL)=="undefined" ? 10 : _GET_IP_MAX_FAIL; var Now = Date.now(); /* Parse request list */ var RequestList = P("ipapi", "requestlist") if(!RequestList) RequestList = [] else { RequestList = JSON.parse(RequestList) } /* Remove old requests */ RequestList = RequestList.filter(function(Item){return (Now - Item.date < 3 * 60 * 1000)}); /* Parse ban time */ var EndTime = P("ipapi", "endtime") if(!EndTime) EndTime = 0 else { EndTime = parseInt(EndTime) } /* If ban time finished, reset block */ if(EndTime > 0 && Date.now() > EndTime) { EndTime = 0; PSet("ipapi", "endtime", "0") } /* Create request id for this thread or get old */ if(typeof(IPAPI_REQEUSTID) == "undefined") { IPAPI_REQEUSTID = rand() } /* Check if possible to do request */ var DoRequest = (RequestList.length < 5 || _ARG[2].length > 0) && EndTime == 0 && RequestList.indexOf(function(Item){return Item.id == IPAPI_REQEUSTID}) < 0 /* Add request to data structure */ if(DoRequest) { RequestList.push({id: IPAPI_REQEUSTID, date: Now}) PSet("ipapi", "requestlist", JSON.stringify(RequestList)) } _if(DoRequest, function(){ http_client_get2("http://" + (_ARG[2].length > 0 ? "pro." : "") + "ip-api.com/json/" + _ARG[0].replace(/[/g,"").replace(/]/g,"") + "?fields=status,message,countryCode,city,lat,lon,timezone,offset" + (_ARG[2].length > 0 ? ("&key=" + _ARG[2]) : ""),{method:("GET"),headers:("Accept-Encoding: gzip, deflate")})! /* Delete request id */ var RequestList = P("ipapi", "requestlist") RequestList = JSON.parse(RequestList) RequestList = RequestList.filter(function(Item){return (Item.id != IPAPI_REQEUSTID)}); PSet("ipapi", "requestlist", JSON.stringify(RequestList)) var EndTime = http_client_header("X-Ttl") var RequestLeft = http_client_header("X-Rl") if(EndTime && RequestLeft) { /* Temporary ban new requests */ RequestLeft = parseInt(RequestLeft) if(RequestLeft < 20) { EndTime = Date.now() + (parseInt(EndTime) + 15) * 1000 PSet("ipapi", "endtime", EndTime.toString()) } } if(http_client_status() == 200 || http_client_status() == 403) { var json = http_client_content() try { var json_parsed = JSON.parse(json) if(json_parsed["status"] == "success") { delete json_parsed["status"] json_parsed["country"] = json_parsed["countryCode"] delete json_parsed["countryCode"] json_parsed["latitude"] = json_parsed["lat"] delete json_parsed["lat"] json_parsed["longitude"] = json_parsed["lon"] var timezone_json = JSON.parse(native("timezones", "timezone_name_to_offset", json_parsed["timezone"])) json_parsed["offset"] = timezone_json["offset"] || 0 json_parsed["dstoffset"] = timezone_json["dstoffset"] || 0 json_parsed["valid"] = true _set_result(json_parsed) _break(2) }else { _set_result({valid:false}) _break(2) } }catch(e){} } })! if(cycle_index >= maximum_failes) { fail("Failed to get IP information in " + maximum_failes + " attempts.") } sleep(3000)! })! http_client_set_fail_on_error(true) _switch_http_client_main() }, function(){ if(typeof(_ARG[3]) != "function") { fail("\"Custom IP information function\" parameter is not a function.") } _call_function(_ARG[3],{ "Ip" : (_ARG[0]) })! var FunctionResult = _result_function() if(typeof(FunctionResult) != "object") { fail("IP information function result is not an object") } if(typeof(FunctionResult.valid) != "boolean") { fail("IP information function result doesn't contain \"valid\" property.") } if(FunctionResult.valid) { if(typeof(FunctionResult.country) == "undefined") { fail("IP information function result doesn't contain \"country\" property.") } if(typeof(FunctionResult.latitude) == "undefined") { fail("IP information function result doesn't contain \"latitude\" property.") } if(typeof(FunctionResult.longitude) == "undefined") { fail("IP information function result doesn't contain \"longitude\" property.") } if(typeof(FunctionResult.timezone) == "undefined") { fail("IP information function result doesn't contain \"timezone\" property.") } if(typeof(FunctionResult.offset) == "undefined") { fail("IP information function result doesn't contain \"offset\" property.") } if(typeof(FunctionResult.dstoffset) == "undefined") { fail("IP information function result doesn't contain \"dstoffset\" property.") } } _set_result(FunctionResult) })! })! }