Поток 2 часа весит с белым экраном с url равным about:blank

Поддержка
  • @gomeapat может запустить потоки, погонять часок, затем стопнуть потоки через ждать каждый поток, тем самым оставив зависщий поток
    Затем посмотреть на каком запросе виснет и что приходит. Мне лень этим занятся, кастом работает.

  • @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

  • ну так а кто что скажет, в кубике прокси можно убрать галочку - получать внешний ip?
    я так понимаю тогда и ошибки этой не будет. не?

  • @kuzkuz Я ставил через - ip-api.com
    Но потом мои Пользователи Кучай начали писать мне что Прокси Отваливаются.
    Я Оставил как было по Умолчанию и на всяк Случай в Игнор Ошибок их с последущей попыткой Загрузить их.
    Ну и дай бог пока норм всё.
    У меня Люди тож на Скриптах разными пользуются то ( кто по умней те в основном на Мобилках ) а есть и просто на Дешманских ( я сразу всех предупреждаю, что Пабл это говно ).
    Вот по Умолчанию так Сказать и у меня и у моих пользователей норм работает ( было несколько человек и вот из за них в Игнор Обернул их и вроде всё норм более не жалуются ).
    Тут вот, так сказать Палка о двух концах, у кого то Норм а у другого вообще Глюк за Глюком.
    Кстати, была же Тема и я то вот Пока вообще от Самой Новой Версии отказался, и предпоследняя как по мне Лучше, последняя у меня вообще Глючила до ужаса, на Пустом Месте тупила.

    alt text
    alt text

  • @super84 database не точная база. Очень часто фейковое гео.

  • @gomeapat said in Поток 2 часа весит с белым экраном с url равным about:blank:

    json_parsed["dstoffset"] = timezone_json["dstoffset"] || 0

    ИЛИ 0.

  • Я добавил логирование того что происходит в файле
    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 Ну вот ты баг почти принес на блюдечке, думаю разработчик случайно заметит и поправит.

  • @gomeapat, добавил счетчик и ошибку если за 10 попыток получить информацию не удалось, можно установить свое количество попыток через выполнить код _GET_IP_MAX_FAIL = количество попыток, весь модуль с изменением Timezones.zip

    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 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)
            })!
        })!
        
    }
    
  • @GhostZ И это в офф релиз войдёт?

  • @GhostZ Жаль

  • @DoctorKrolic, ну если это поможет с данной проблемой, то могу сделать нормальное решение и предложить добавить в основную сборку. Просто чтобы добавить в основу нужно изменять не просто engine.js, но и добавить настройку количества попыток в 3 действия использующих эту функцию.

  • @GhostZ имеешь ввиду менюшку? Было очень кстате, меня разработчик не слышит, а вот с этим решением может и зайдет.

  • @FastSpace, добавить инпут "Количества попыток" в действия "Прокси", "Сведения об ип", "Установить месторасположение браузера по ип"

  • @GhostZ If i use "Set browser location by ip" from your Timezone module, should I set to False all the options from the proxy action?Screenshot_1.png )

  • 0 Votes
    9 Posts
    855 Views
  • 0 Votes
    4 Posts
    688 Views
  • 0 Votes
    8 Posts
    638 Views
  • 0 Votes
    4 Posts
    812 Views
  • 0 Votes
    23 Posts
    3008 Views