Помогите с логикой.

Поддержка
  • @fastspace said in Помогите с логикой.:

    Видео с комментариями.

    Воспроизвел Ваш участок скрипта. При выполняемых действиях в переменную LAST_ERROR упало "Не удалось загрузить страницу youtube.com". Анимация загрузки, которую Вы видите - результат выполнения предыдущей итерации рекурсии. Новый запрос не выполнился.

  • @xclsv Как мне сбросить старый запрос и сделать новый уже без ошибки?

  • @fastspace said in Помогите с логикой.:

    @xclsv Как мне сбросить старый запрос и сделать новый уже без ошибки?

    Запрос нельзя сбросить, т.к. действия по нему уже совершены.
    Выполнить запрос через другой прокси-сервер, либо воздержаться от его использования совсем.
    Ещё можете попробовать добавить задержку между итерациями.

  • Другой прокси сервер не вариант. У меня строгая привязка 1 аккаунт - 1 прокси.
    Задержку шас попробую.

  • @fastspace said in Помогите с логикой.:

    Другой прокси сервер не вариант. У меня строгая привязка 1 аккаунт - 1 прокси.

    К сожалению, проблемы прокси средствами bas решить не удастся.

  • @xclsv Я как-то давно гонял другой шаблон и там не было такой проблемы. Повторно всё грузилось без ошибок, жаль у меня не осталось этого шаблона.

  • @fastspace said in Помогите с логикой.:

    @xclsv Я как-то давно гонял другой шаблон и там не было такой проблемы. Повторно всё грузилось без ошибок, жаль у меня не осталось этого шаблона.

    Возможно, прокси был другой.

  • @xclsv Я пробовал 5 разных прокси. Либо ошибки действия как на видео, либо пропуск действия Was Error. Скрипт дальше бегает по действиям, но страница грузится.

  • @gr-al-ni Сброс работает, но это не вариант. Сброс обнуляет всё, что можно, лучше уж тогда поток завершить.
    FOX выручай :D

  • @fastspace said in Помогите с логикой.:

    FOX выручай :D

    Как ведёт себя скрипт без прокси?

  • @fox У меня домашний IP не медленный, поэтому создать такую ситуацию на 100% не могу.
    Что сделал: Установил таймаут в 5 секунд. В итоге ситуация номер 2, когда скрипт при повторной загрузке не дожидается окончания действия загрузки и едет дальше.

  • @fastspace said in Помогите с логикой.:

    но страница грузится

    Это результат выполнения предыдущей итерации рекурсии.
    Вы используете медленный прокси. Делаете запрос к серверу. Ждёте по таймауту и выполняете новый запрос до окончания выполнения предыдущего. Прокси бреет вас. В это время предыдущий запрос продолжает выполняться, результат его выполнения вы и видите на экране.
    Это легко проверяется, если воспроизводить действия поэтапно.

    Это нормальная ситуация при работе с объемными запросами в обычном браузере. В бас это должно работать как-то иначе?

  • @xclsv Если ставить дефолтное ожидание, то всё работает как надо.

  • @fastspace said in Помогите с логикой.:

    @xclsv Если ставить дефолтное ожидание, то всё работает как надо.

    Наличие ограниченного ожидания лишь регулирует лимит ожидания полной загрузки страницы, но не отменяет продолжение получения ответа сервера и компиляцию данных в браузере.

  • @xclsv Хорошо, как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый? Я просто тогда таймауйт действие могу установить именно в тот момент когда прошлый запрос должен был оборваться. От чего это зависит? Это сам сервер устанавливает свой таймаут подключения к нему?

  • @fastspace said in Помогите с логикой.:

    как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый

    Ждать полной загрузки страницы =)
    Полагаю, в это ожидание входит не только полная загрузка ответов серверов, но и компиляция полученных ответов в браузере.
    Может случиться так, что какой-то из запросов на странице выполняется слишком долго, но к серверу уже можно делать новый запрос.
    Думаю, в браузере не удастся настолько тонко регулировать таймауты.
    Если не хотите ждать, пока будет происходить загрузка в браузере, используйте http-клиент.

    И воздержитесь от ожидания полной загрузки страницы. Используйте ожидание элемента. Регулируйте таймаут внутри этого действия. Тогда Вам будет не важно, выполнился ли запрос к серверу через прокси и в какой по счету итерации подгрузилась страница. Если уж за 5 итераций элемента дождаться не удалось, то всё, фиаско.

  • @xclsv

    @xclsv said in Помогите с логикой.:

    @fastspace said in Помогите с логикой.:

    как мне тогда дождаться окончания выполнения предыдущего запроса и сделать новый

    Ждать полной загрузки страницы =)
    Полагаю, в это ожидание входит не только полная загрузка ответов серверов, но и компиляция полученных ответов в браузере.
    Может случиться так, что какой-то из запросов на странице выполняется слишком долго, но к серверу уже можно делать новый запрос.
    Думаю, в браузере не удастся настолько тонко регулировать таймауты.
    Если не хотите ждать, пока будет происходить загрузка в браузере, используйте http-клиент.

    Это понятно, что необходимо ждать полную загрузку, вопрос лишь в том что сколько ждать. По умолчанию там стоит 60 сек и это видно мало, т.к сервер продолжает мне отдавать элементы и при повторной загрузке я ловлю ошибки. http клиент тоже не вариант использовать.

    Чем будет отличаться ожидания полной загрузки от ожидания элемента? Ну вот допустим я жду кнопку button1 60 сек, нет этой кнопки за 60 сек - я делаю повторный запрос, я же ведь снова словлю ошибку?

  • @fastspace
    Тем, что отдельные элементы могут появляться на странице гораздо быстрее, чем она полностью загрузится. И этого может быть вполне достаточно для продолжения работы, за исключением случаев, когда задача подразумевает обязательную полную загрузку страницы, к примеру, для отработки счётчиков.

  • @xclsv Это хотя бы что-то. Тем более я проверку буду делать на нужный элемент который я должен буду нажать.

    В общем итог, как решить проблему:
    1)Дождаться таймаута от сервера. Нужно узнать сколько максимальное время подключения к серверу. Оно может быть и 2 минуты и все 3. Только тогда делать повторный запрос.
    2)Убрать галку "ждать полной загрузки страницы" и начать ждать элемент. В случае ошибки ожидания элемента сделать повторный запрос.
    Правильно?