Проверка открытия страницы.

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
Если работать через прокси, иногда бывает что прокси битый и страница не открылась, но экшен Переход на страницу отрабатывает по зеленому выходу. Отсюда сыпится вся работа шаблона.

Подскажите идеи, как с этим бороться? В моем случае шаблон броузерный.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
Может кто подкинет снипет который будет переходить по указанному адресу и паралельно записывать хедер в переменную. Тогда можно будет отлавливать бед
 

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
Другой вариант перед экшеном Переход на страницу, GET'ом дергать страницу, обработать результат и если ответ 200, то идем дальше. Я такое придумал.
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63
Другой вариант перед экшеном Переход на страницу, GET'ом дергать страницу, обработать результат и если ответ 200, то идем дальше. Я такое придумал.
Адаптируйте это под себя тыц
 
  • Спасибо
Реакции: one

backoff

Client
Регистрация
20.04.2015
Сообщения
6 002
Благодарностей
6 447
Баллы
113
Переход на страницу, GET'ом дергать страницу
можно, но гет легче чем страница.
лучше конечно по возможности все на геты перевести, если нет, то сделать несколько проверок, постараться поймать все ошибки, которые происходят при переходе.
ИЛИ, наверно лучший варик будет, это проверять на какую-то фразу на нормально открывшейся странице. если фразы нет, то делаем цикл в 5-10 раз пока не появится, если не появляется, то скидываем акк и берем следующий.

ps \ я о медленных прокси говорю.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 884
Баллы
113
Просто проверяйте после загрузки страницы на наличие какого-то обязательного элемента. Если его нет - идём на повторную загрузку страницы.
Только в этом случае нужно добавить счетчик, чтобы не зациклить на этом этапе шаблон.
Так же можно кодом:
Код:
HtmlElement he = null;
for (int i = 0; i<10; i++)
{
    var tab = instance.ActiveTab;
    tab.Navigate(@"УРЛ");
    if (tab.IsBusy) tab.WaitDownloading();
    he = tab.FindElementByAttribute("select","name","locationId","text",0);// прописать свои параметры поиска элемента
    if (!he.IsNull)
    {
            return "OK";
    }
}
return null;
 
  • Спасибо
Реакции: Roman48, Sergodjan и one

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63
А нельзя так сделать?
Берем url по которому переходим, засовываем его в if сравниваем его с текущим url который загрузился, по зеленой все норм отрабатывает, по красной выход на цикл
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
А нельзя так сделать?
Берем url по которому переходим, засовываем его в if сравниваем его с текущим url который загрузился, по зеленой все норм отрабатывает, по красной выход на цикл
урл будет нужный, а страница прежняя
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63

Zoron

Client
Регистрация
24.09.2014
Сообщения
145
Благодарностей
39
Баллы
28
  • Спасибо
Реакции: ТРОН

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 865
Баллы
113
Ещё есть отличный вариант, который я не тестировал, но всё хочу попробовать. В зенке с добавлением монитора трафика появились новые методы, для получения данных оттуда. Если оттуда удастся выцепить хеадер, то это вообще волшебно будет :-)
Может кто-то заморочится и сделает сниппет:
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic1089.html
 
  • Спасибо
Реакции: one

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Ещё есть отличный вариант, который я не тестировал, но всё хочу попробовать. В зенке с добавлением монитора трафика появились новые методы, для получения данных оттуда. Если оттуда удастся выцепить хеадер, то это вообще волшебно будет :-)
Может кто-то заморочится и сделает сниппет:
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic1089.html
выдыхай, это методы разработчиков)
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63
считать такую строку можно помнится так - instance.ActiveTab.MainDocument.URL, а далее уже проверить методом Contains на нужное содержимое
Благодарю, теперь отрабатывает как надо
upload_2017-12-13_15-14-35.png
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 865
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
В зенке с добавлением монитора трафика появились новые методы, для получения данных оттуда. Если оттуда удастся выцепить хеадер, то это вообще волшебно будет
Да, это будет очень волшебно. :-)
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 100
Благодарностей
8 976
Баллы
113
Другой вариант перед экшеном Переход на страницу, GET'ом дергать страницу, обработать результат и если ответ 200, то идем дальше. Я такое придумал.
проверять 200 - не оч. надежный способ проверки, GET может пройти нормально, а качество прокси при прогурзке более массивных блоков данных может оставлять желать лучшего..
 
Последнее редактирование:

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63
проверять 200 - не оч. надежный способ проверки, GET может пройти нормально, а качество прокси при прогурзке более массивных блоков данных может оставлять желать лучшего..
Скажите, а чем такой вариант не решение? Какие тут подводные камни есть?
upload_2017-12-13_15-34-21.png
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 100
Благодарностей
8 976
Баллы
113
Скажите, а чем такой вариант не решение? Какие тут подводные камни есть?
не знаю, я как то пробовал по такому принципу, заметил, что зенка оставляет старый урл при неудаче подгрузки нового..
если сейчас работает как надо, то почему бы и нет.. а так - хороший способ, вполне, я тоже его использовал как то..
 
Последнее редактирование:
  • Спасибо
Реакции: ТРОН

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
Взял на вооружение это решение добавил эмуляцию Geo, Time и изменил сервер проверки прокси. Сервер проверки от зенки тупит безбожно, разработчики даже не пытаются исправить ситуацию. Столько проксей нормальных убивает (определяет как мертвые) этот проксичекер ихний что просто жуть! А снипет от Mikhail B. работает быстро. Кто Михаила увидит, передайте ему благодарность от меня! :-)
 
Последнее редактирование:

sten30

Client
Регистрация
05.09.2017
Сообщения
238
Благодарностей
29
Баллы
28
Проверка открытия страницы в ZennoPoster - это взять любое значение со страницы в конструкторе.
тэг a
Имя атрибута href (например если ссылки есть на странице)
Действие Get
Regexp . точка (любое значение)
 

Вложения

  • 462,4 КБ Просмотры: 59

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Просто проверяйте после загрузки страницы на наличие какого-то обязательного элемента. Если его нет - идём на повторную загрузку страницы.
Только в этом случае нужно добавить счетчик, чтобы не зациклить на этом этапе шаблон.
Так же можно кодом:
Код:
HtmlElement he = null;
for (int i = 0; i<10; i++)
{
    var tab = instance.ActiveTab;
    tab.Navigate(@"УРЛ");
    if (tab.IsBusy) tab.WaitDownloading();
    he = tab.FindElementByAttribute("select","name","locationId","text",0);// прописать свои параметры поиска элемента
    if (!he.IsNull)
    {
            return "OK";
    }
}
return null;
Можете, пожалуйста, подсказать, как вставить XPath, сишарп не знаю, разобраться очень тяжело, пробовал так, как ниже, не работает
C#:
HtmlElement he = null;
for (int i = 0; i<10; i++)
{
    var tab = instance.ActiveTab;
    tab.Navigate(@project.Variables["url"].Value);
    if (tab.IsBusy) tab.WaitDownloading();
//    he = tab.FindElementByAttribute("select","name","locationId","text",0);// прописать свои параметры поиска элемента
    var elPass = tab.FindElementByXPath("//div[@class='ftitle']", 0);
   
    if (!he.IsNull)
    {
            return "OK";
    }
}
return null;
Разобрался, если кому то нужно будет так he = tab.FindElementByXPath("//a[@title='На главную']//img[1]", 0);
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)