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

one

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

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

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

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

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

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

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

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

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
С описанием шаблона ничего не получилось, сорри.
 
  • Спасибо
Реакции: Yuriy Zymlex

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
Это бомба! :D
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Статья о том как сделал проверку на наличие чекбокса?

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


2018-05-12_165930.png
 
  • Спасибо
Реакции: kagorec

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
Всё ещё проще:
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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
ну так это можно и простым for сделать чтобы не мудрить
 

one

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

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Хорошая статья о sergodjan66 получилась:D
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Также было в конкурсной статье https://zennolab.com/discussion/threads/nestandartnye-podxody-k-razrabotke-shablonov.48583/

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

An_To_Ha

Client
Регистрация
27.09.2010
Сообщения
21
Благодарностей
4
Баллы
3
Точно фокусы)
 

one

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

Хорошая статья о sergodjan66 получилась:D
Ну в принципе его мысль я использовал в статье, так что авторство подкинутой идеи принадлежит ему. Что в этом такого если я на это указал?
 

Nilsoner

Client
Регистрация
24.11.2017
Сообщения
214
Благодарностей
185
Баллы
43
Эта статья ориентирована на новичков
 
  • Спасибо
Реакции: daymos

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
Код:
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

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
примерно так работаю проверяю загрузку динамических элементов
Код:
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

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Тем не менее автор побудил желание у зенно гуру дополнить интересными вариантами.
п.с. one, если бомбит то лучше не пиши, чтоб тему не испортить разборками.:-)
 
  • Спасибо
Реакции: one

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Ну в принципе его мысль я использовал в статье, так что авторство подкинутой идеи принадлежит ему. Что в этом такого если я на это указал?
Имелось ввиду, что по делу у Вас написан всего 1 абзац из 6.
Где первые 2 - вступление, а следующие 3 - похвала sergodjan66.

Как и все конкурсные стати прежде всего должны быть направлены на новичков. Это есть прямая цель проводимых конкурсов на данном ресурсе. разве не так должно быть?
Да, но проблема в том, что Вы усложнили текущий функционал программы, что отталкивает, а не привлекает.
То, что включается и настраивается в 1 клик, у Вас это вынесено в 5 кубиков!
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Имелось ввиду, что по делу у Вас написан всего 1 абзац из 6.
Где первые 2 - вступление, а следующие 3 - похвала sergodjan66.
И 6-ой о чем?
Да, но проблема в том, что Вы усложнили текущий функционал программы, что отталкивает, а не привлекает.
То, что включается и настраивается в 1 клик, у Вас это вынесено в 5 кубиков!
Ну как сделал так сделал.
 

Juniorcpa

Client
Регистрация
27.05.2014
Сообщения
2 031
Благодарностей
1 286
Баллы
113
На самом деле стремно, что у ТСа не хватило выдержки ответить на критику спокойно, а так же что модератор вступает в дискуссии с агрессором. Если пустили эту статью, значит посчитали нужным, пускай, просто можно отдать голос свой за челика, что зенноэкстешнс расшарит скоро, надеюсь :-)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113
На самом деле стремно, что у ТСа не хватило выдержки ответить на критику спокойно
дело не в критике, а то что совсем мало по теме написано. За это и начали критиковать
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 456
Благодарностей
5 914
Баллы
113
К сожалению статья оказалась очень слабой... Не сможем её принять на конкурс.
Автору спасибо за старания.
 

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