Фокусы бывают не только в цирке! Стабилизируем и повышаем качество работы наших шаблонов.

  • Автор темы Автор темы one
  • Дата начала Дата начала

one

Client
Регистрация
22.09.2015
Сообщения
7 001
Реакции
1 308
Баллы
113
Работая с автоматизацией действий на сайтах важно корректное выполнение этих самых действий. Бывает так, что, если по какой-то причине не под грузился нужный элемент на странице, наш шаблон выполнит не корректно поставленную задачу и завершит свою работу с ошибкой. К примеру, не соберет сатоши с крана, не сделает или не подтвердит регистрацию аккаунта, не поставит лайк и т.д. тем самым мы получим завершённый цикл работы шаблона, который нам не принес ничего, а время на его выполнение было потрачено и потрачено оно было в пустую.

Работая над одним шаблоном, в процессе тестирования я обратил внимание на то, что из-за плохого качества проксей на нужной мне странице не подгружалась ReCaptcha2 при том что все элементы страницы уже, были загружены. Не дождавшись ее загрузки сниппет разгадывания капчи просто выходил по ошибке завершая работу шаблона, не доведя ее до положительного завершения. Все опробованные мной решения по тем или иным причинам меня не устраивали, хотелось что-то такого… Ну вот такого чтоб сразу и уххх… Как обычно в общем.

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

В данном топике откликнулся на мой вопрос sergodjan66. Приятный на мой взгляд человек, мне нравится как ведет он себя на форуме. Как модератор активно помогает менее опытным пользователям. В общем ходит по земле человек, без предвзятостей и поставленные вопросы понимает прямолинейно. Отличный чел! Спасибо тебе дружище! J Он и подкинул идею о которой я хочу рассказать.

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

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

Данное решение можно применять к любому нужному элементу страницы. К элементам AJAX данный метод не совсем применим. Тут надо искать более тонкое изощренное решение.

Описание шаблона
  • Входными настройками в шаблоне можно регулировать количество циклов и время ожидания появления элемента на странице;

BONUS
В шаблоне прилагается бонус! Модуль для полной анонимности профиля по whoer.net используя прокси. Работа данного модуля эффективна в ZennoPoster начиная с версии 5.17.0.0.
 

Вложения

С описанием шаблона ничего не получилось, сорри.
 
  • Спасибо
Реакции: Yuriy Zymlex
Статья о том как сделал проверку на наличие чекбокса?

Можно сделать без циклов.


2018-05-12_165930.png
 
  • Спасибо
Реакции: kagorec
Всё ещё проще:
C#:
Развернуть Свернуть Копировать
HtmlElement he;
int i = 0;
int timeout = 10;
// Ожидание появления
do
{
         //he = instance.ActiveTab.FindElementByXPath("тут xpath", 0); // удобней
         he = instance.ActiveTab.FindElementByAttribute("tags", "attrName", "attrValue", "searchKind", 0); // по старинке, как в кубике
         Thread.Sleep(1000);
        i++;
} while (he.IsVoid && i < timeout);
if (he.IsVoid) throw new Exception("Не найдено");
// дальше с he (элементом) делается, что угодно
как-то так.
:bk:
 
Последнее редактирование:
  • Спасибо
Реакции: iBotovod и one
ну так это можно и простым for сделать чтобы не мудрить
 
Также было в конкурсной статье https://zennolab.com/discussion/threads/nestandartnye-podxody-k-razrabotke-shablonov.48583/

Вот код метода WaitFor, который реализован в библиотеке:
Этот метод удобен в использовании при динамическом изменении страницы, когда нужно дождаться появления, исчезновения или изменения элемента. Первые две перегрузки метода WaitFor выполняют ожидание, пока не будет найден элемент, либо до истечения указанного времени. Третья перегрузка выполняет ожидание, пока переданный предикат не вернет true, либо до истечения указанного времени.
 
  • Спасибо
Реакции: shtift
Точно фокусы)
 
Также было в конкурсной статье
Действительно, схоже но с разными подходами.

Хорошая статья о sergodjan66 получилась:D
Ну в принципе его мысль я использовал в статье, так что авторство подкинутой идеи принадлежит ему. Что в этом такого если я на это указал?
 
Эта статья ориентирована на новичков
 
  • Спасибо
Реакции: daymos
Код:
Развернуть Свернуть Копировать
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading();
for (int z = 0; z <= 5; z++)
{
    var a = instance.ActiveTab.FindElementsByAttribute("span","class","suggest1","text");
    if (a.Count()>0) return "Found!";
    System.Threading.Thread.Sleep(1000);
}
throw new Exception("no element on page");
либо
Код:
Развернуть Свернуть Копировать
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading();
for (int z = 0; z <= 5; z++)
{
    var a = instance.ActiveTab.FindElementByAttribute("span","class","suggest2","text",0);
    if (!a.IsVoid) return "Found!";
    System.Threading.Thread.Sleep(1000);
}
throw new Exception("no element on page");
 
  • Спасибо
Реакции: one
примерно так работаю проверяю загрузку динамических элементов
Код:
Развернуть Свернуть Копировать
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading();
var a = instance.ActiveTab.FindElementByAttribute("div","id","demo","text",0).GetAttribute("innerhtml").Length;
for (int z = 0; z <= 15; z++)
{
    var b = instance.ActiveTab.FindElementByAttribute("div","id","demo","text",0).GetAttribute("innerhtml").Length;
    if (b!=a) return "Changed!";
    System.Threading.Thread.Sleep(1000);
}
throw new Exception("not changed");
 
  • Спасибо
Реакции: one
Тем не менее автор побудил желание у зенно гуру дополнить интересными вариантами.
п.с. one, если бомбит то лучше не пиши, чтоб тему не испортить разборками.:-)
 
  • Спасибо
Реакции: one
Ну в принципе его мысль я использовал в статье, так что авторство подкинутой идеи принадлежит ему. Что в этом такого если я на это указал?
Имелось ввиду, что по делу у Вас написан всего 1 абзац из 6.
Где первые 2 - вступление, а следующие 3 - похвала sergodjan66.

Как и все конкурсные стати прежде всего должны быть направлены на новичков. Это есть прямая цель проводимых конкурсов на данном ресурсе. разве не так должно быть?
Да, но проблема в том, что Вы усложнили текущий функционал программы, что отталкивает, а не привлекает.
То, что включается и настраивается в 1 клик, у Вас это вынесено в 5 кубиков!
 
Имелось ввиду, что по делу у Вас написан всего 1 абзац из 6.
Где первые 2 - вступление, а следующие 3 - похвала sergodjan66.
И 6-ой о чем?
Да, но проблема в том, что Вы усложнили текущий функционал программы, что отталкивает, а не привлекает.
То, что включается и настраивается в 1 клик, у Вас это вынесено в 5 кубиков!
Ну как сделал так сделал.
 
На самом деле стремно, что у ТСа не хватило выдержки ответить на критику спокойно, а так же что модератор вступает в дискуссии с агрессором. Если пустили эту статью, значит посчитали нужным, пускай, просто можно отдать голос свой за челика, что зенноэкстешнс расшарит скоро, надеюсь :)
 
На самом деле стремно, что у ТСа не хватило выдержки ответить на критику спокойно
дело не в критике, а то что совсем мало по теме написано. За это и начали критиковать
 
К сожалению статья оказалась очень слабой... Не сможем её принять на конкурс.
Автору спасибо за старания.
 

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