@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Помогите с логикой.
-
@fastspace said in Помогите с логикой.:
Воспроизвел Ваш участок скрипта. При выполняемых действиях в переменную LAST_ERROR упало "Не удалось загрузить страницу youtube.com". Анимация загрузки, которую Вы видите - результат выполнения предыдущей итерации рекурсии. Новый запрос не выполнился.
-
@fastspace said in Помогите с логикой.:
@xclsv Как мне сбросить старый запрос и сделать новый уже без ошибки?
Запрос нельзя сбросить, т.к. действия по нему уже совершены.
Выполнить запрос через другой прокси-сервер, либо воздержаться от его использования совсем.
Ещё можете попробовать добавить задержку между итерациями. -
@fastspace said in Помогите с логикой.:
Другой прокси сервер не вариант. У меня строгая привязка 1 аккаунт - 1 прокси.
К сожалению, проблемы прокси средствами bas решить не удастся.
-
@fastspace said in Помогите с логикой.:
@xclsv Я как-то давно гонял другой шаблон и там не было такой проблемы. Повторно всё грузилось без ошибок, жаль у меня не осталось этого шаблона.
Возможно, прокси был другой.
-
-
@fox У меня домашний IP не медленный, поэтому создать такую ситуацию на 100% не могу.
Что сделал: Установил таймаут в 5 секунд. В итоге ситуация номер 2, когда скрипт при повторной загрузке не дожидается окончания действия загрузки и едет дальше. -
@fastspace said in Помогите с логикой.:
но страница грузится
Это результат выполнения предыдущей итерации рекурсии.
Вы используете медленный прокси. Делаете запрос к серверу. Ждёте по таймауту и выполняете новый запрос до окончания выполнения предыдущего. Прокси бреет вас. В это время предыдущий запрос продолжает выполняться, результат его выполнения вы и видите на экране.
Это легко проверяется, если воспроизводить действия поэтапно.Это нормальная ситуация при работе с объемными запросами в обычном браузере. В бас это должно работать как-то иначе?
-
@fastspace said in Помогите с логикой.:
@xclsv Если ставить дефолтное ожидание, то всё работает как надо.
Наличие ограниченного ожидания лишь регулирует лимит ожидания полной загрузки страницы, но не отменяет продолжение получения ответа сервера и компиляцию данных в браузере.
-
@xclsv Хорошо, как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый? Я просто тогда таймауйт действие могу установить именно в тот момент когда прошлый запрос должен был оборваться. От чего это зависит? Это сам сервер устанавливает свой таймаут подключения к нему?
-
@fastspace said in Помогите с логикой.:
как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый
Ждать полной загрузки страницы =)
Полагаю, в это ожидание входит не только полная загрузка ответов серверов, но и компиляция полученных ответов в браузере.
Может случиться так, что какой-то из запросов на странице выполняется слишком долго, но к серверу уже можно делать новый запрос.
Думаю, в браузере не удастся настолько тонко регулировать таймауты.
Если не хотите ждать, пока будет происходить загрузка в браузере, используйте http-клиент.И воздержитесь от ожидания полной загрузки страницы. Используйте ожидание элемента. Регулируйте таймаут внутри этого действия. Тогда Вам будет не важно, выполнился ли запрос к серверу через прокси и в какой по счету итерации подгрузилась страница. Если уж за 5 итераций элемента дождаться не удалось, то всё, фиаско.
-
@xclsv said in Помогите с логикой.:
@fastspace said in Помогите с логикой.:
как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый
Ждать полной загрузки страницы =)
Полагаю, в это ожидание входит не только полная загрузка ответов серверов, но и компиляция полученных ответов в браузере.
Может случиться так, что какой-то из запросов на странице выполняется слишком долго, но к серверу уже можно делать новый запрос.
Думаю, в браузере не удастся настолько тонко регулировать таймауты.
Если не хотите ждать, пока будет происходить загрузка в браузере, используйте http-клиент.Это понятно, что необходимо ждать полную загрузку, вопрос лишь в том что сколько ждать. По умолчанию там стоит 60 сек и это видно мало, т.к сервер продолжает мне отдавать элементы и при повторной загрузке я ловлю ошибки. http клиент тоже не вариант использовать.
Чем будет отличаться ожидания полной загрузки от ожидания элемента? Ну вот допустим я жду кнопку button1 60 сек, нет этой кнопки за 60 сек - я делаю повторный запрос, я же ведь снова словлю ошибку?
-
@fastspace
Тем, что отдельные элементы могут появляться на странице гораздо быстрее, чем она полностью загрузится. И этого может быть вполне достаточно для продолжения работы, за исключением случаев, когда задача подразумевает обязательную полную загрузку страницы, к примеру, для отработки счётчиков. -
@xclsv Это хотя бы что-то. Тем более я проверку буду делать на нужный элемент который я должен буду нажать.
В общем итог, как решить проблему:
1)Дождаться таймаута от сервера. Нужно узнать сколько максимальное время подключения к серверу. Оно может быть и 2 минуты и все 3. Только тогда делать повторный запрос.
2)Убрать галку "ждать полной загрузки страницы" и начать ждать элемент. В случае ошибки ожидания элемента сделать повторный запрос.
Правильно?