Описание доступных классов и методов (всего в либе 4600 строк кода с комментариями, 16 классов и 148 методов):
Здесь будет краткое описание методов, чтобы были понятны возможности. Подробное описание методов, полей и свойств – в библиотеке непосредственно для разработчиков. Подробно прокомментирован основной класс, в котором пишется код шаблона, класс настроек, а также вызовы методов других классов. Остальное без подробных комментариев, туда лезть не нужно – а кто захочет, те и без комментов спокойно поймут. Для примера посмотрите прикрепленные скриншоты.
Droid
Класс Droid – для написания шаблонов кодом в студии без использования кубиков зенки, поэтому здесь подробно описывать не буду (в коде есть подробные комментарии).
Droid.Droid – конструктор класса.
Droid.ReInit – ре-инициализация для повторных выполнений, если кол-во повторений указывать в либе, а не в зенке.
Droid.Worker – основной код шаблона, если не используются кубики.
Для инициализации библиотеки в кубике нужно написать следующий код:
DLibRus.Droid droid = new DLibRus.Droid(project, instance);
Если вы хотите вызывать методы либы из других кубиков, а не из кода, добавьте к инициализации в экшен еще строку:
project.Context["droid"] = droid;
И потом в другом кубике, к примеру, для простого гет запроса:
project.Context["droid"].Http.GetSimple("
http://localhost/");
Browser
Класс Browser – работа с браузером.
Browser. Browser – конструктор класса.
Browser.Tunes – всего 31 поле базовых настроек браузера, которые поддерживает зенка. Возможность очистки кеша, кук, прокси. Установка кук и суперкук. Настройка уровней эмуляции (в том числе сверх эмуляция с реалистичными движениями мышки на основе кривых безье и реалистичными задержками при вводе текста). Достаточно один раз настроить и потом использовать во всех проектах.
Browser.Proxy – получение прокси из файла по номеру потока (в файле ничего не затирается) и установка прокси в браузер, с проверкой на успешность установки.
Browser.WebRTC – настройка веб ртс, чтобы реальный айпи не утекал, а также настройка аудио и видео устройств.
Browser.Wait – ожидание готовности вкладки, если идет процесс загрузки страницы.
Browser.Navigate – переход на заданный адрес, с возможностью указать рефер и вкладку, с проверкой существования вкладки, ожиданием готовности вкладки и проверкой на осуществление перехода. То есть если переход не произошел, и вместо страницы открылась about.blank (бывает такое) – будет ошибка и сообщение в лог.
Благодаря классу Browser можно писать очень упрощенный код, к примеру, чтобы в проекте перейти на страницу, нужно просто написать одну строку кода, при этом все настройки и очистки барузера, вебртс, установка прокси будут сделаны при инициализации фреймворка, не нужно об этом даже вспоминать:
Browser.Navigate("https://mail.ru/");
Profiles
Класс Profiles – для работы с созданными и нагулянными профилями браузера.
Profiles.Profiles – конструктор класса.
Profiles.CreateOrLoad – выбор номера профиля и проверка возможности его загрузки или необходимости генерации нового.
Profiles.GetData – генерация данных профиля.
Profiles.SaveFull – сохранение полного профиля
.
Profiles.SaveStr – служебный прайвет метод, сохранение основных данных профиля в текстовый файл.
Profiles.LoadFull – служебный прайвет метод, загрузка полного профиля.
Profiles.LoadStr – служебный прайвет метод, загрузка основных данных профиля из текстового файла.
Profiles.GetPathProfile – служебный прайвет метод, получение пути к профилю
Profiles.GenerateLogin – служебный прайвет метод, генерация логина.
Profiles.GeneratePass – служебный прайвет метод, генерация пароля.
Данный класс позволяет сохранять полные профили для их последующей загрузки, а также сохранять основные данные профиля в текстовые файлы для использования в других проектах, которые не позволяют загружать профили браузера.
Простой вызов одной строкой:
Profiles.SaveFull();
Mouse
Класс Mouse – класс работы с мышкой (наведение, клик, движение, скролл).
Mouse.Mouse – конструктор класса.
Mouse.FindCoordsForMouseMove – определение координат для движения мыши для методов Scroll и Move.
Mouse.RiseEvent – простое событие.
Mouse.Click – основной метод, включающий поиск координат, скролл до нужного места страницы, подводку мыши к элементу и непосредственно клик, имеет 4 уровня эмуляции.
Mouse.Move – если вам отдельно нужно движение мыши, имеет 4 уровня эмуляции.
Mouse.Scroll – если вам отдельно нужен скролл, требует уровня FullEmulation и выше (3 и 4 уровни в либе, «полная эмуляция мыши» в зенке).
Mouse.MoveLikeHumanInViewport – если вам отдельно нужно естественное человеческое движение мыши.
Mouse.MoveWithRandomScroll – служебный прайвет метод частичного скролла страницы с паузами и движением мышки между скроллами.
Mouse.MoveWithRandomScrollRange – служебный прайвет метод движения мыши и скролла на определенное расстояние.
Mouse.MoveWithRandomScrollOverElement – служебный прайвет метод подведения мыши к элементу после скролла.
Mouse.MoveBezier – служебный прайвет метод движения по кривым Безье.
Mouse.DrawBezierX – служебный прайвет метод создания кривых Безье.
Mouse.DrawBezierY – служебный прайвет метод создания кривых Безье.
Mouse.DrawBezier – служебный прайвет метод создания кривых Безье.
Наиболее часто используется метод Click, он является наиболее простым в использовании и включает максимальные возможности.
На 1 уровне это просто мгновенный скролл и клик на JS.
На 2 уровне мышка подводится к элементу по прямой с максимально быстрым скроллом и клик производится через событие.
На 3 уровне сначала определяются нужные координаты, потом в видимой части окна браузера по кривым Безье мышка делает хаотичные, но плавные человеческие движения, как будто пользователь задумался и изучает сайт. Потом происходит простой скролл к нужному месту страницы и быстрое движение мышки к элементу, после чего совершается клик с полной эмуляцией.
На 4 уровне сначала определяются нужные координаты, потом в видимой части окна браузера по кривым Безье мышка делает хаотичные человеческие движения, как будто человек задумался и изучает сайт. Это также, как на 3 уровне. Но вот после происходит не быстрый прямой скролл, а страница пролистывается частями, и между скроллами совершаются движения мышки – опять же, как будто человек постепенно изучает страницу сайта и по привычке двигает мышкой. И, когда долистывается до нужного элемента, мышка подводится к нему и совершается клик с полной эмуляцией. При этом на 4 уровне разные движения мышки производятся с разной скоростью, как у обычного пользователя. На вебвизоре получается очень человечная картинка поведения пользователя.
Уровни эмуляции указываются один раз в настройках класса Registry.
Клик со всеми манипуляциями вызывается одной простой строкой кода, ни о чем больше думать не нужно:
Mouse.Click(element);
Txt
Класс Txt – работа с текстом.
Txt.
Txt – конструктор класса.
Txt.Transliterate – транслитерация кирилиццы.
Txt.RegexMatch – возвращает часть строки по регулярному выражению.
Txt.SubBy – переводит строку в список по разделителю.
Txt.SendWithRandDelay – отправка текста в поле формы со случайной задержкой между символами (эмуляция ввода текста человеком с клавиатуры).
Txt.SendClearField – очистка поля формы (удаление текста).
Txt.Send – отправка текста в поле формы, имеет 4 уровня эмуляции.
Наиболее часто используется метод Send для заполнения полей формы на странице.
На 1 уровне это базовое мгновенное присвоение значение полю.
На 2 уровне используется вставка из буфера обмена – категорически не рекомендуется для использования в многопотоке.
На 3 уровне используется отправка текста с фиксированной задержкой между символами.
На 4 уровне используется отправка текста в поле формы со случайной задержкой между символами (эмуляция ввода текста человеком с клавиатуры) – то есть вызывается метод SendWithRandDelay.
Уровни эмуляции указываются один раз в настройках класса Registry.
Заполнение поля со всеми манипуляциями вызывается одной простой строкой кода, ни о чем больше думать не нужно:
Txt.Send(element, “текст”);
Captcha
Класс Captcha – решение каптчи через api сервисов и прог, по умолчанию (другой софт), можно на том же компе, что и зенка, можно на другом компе или сервере.
Captcha.
Captcha – конструктор класса.
Captcha.XevilBalance – тест подключения к (другой софт).
Captcha.XevilReV2 – решение рекапчи v2 на текущей страницы (вызывается без аргументов, метод сам все делает).
Captcha.XevilReV2full – решение рекапчи v2 с аргументами метода, если вам нужно сформировать их самим.
Captcha.XevilImageUrl – решение капчи по адресу картинки.
Captcha.XevilImageXpath – находит адрес изображения капчи по xpath и решает через api (другой софт).
Captcha.XevilImageScreen – находит изображение капчи по xpath, делает скриншот, и пост-запросом отправляет его через api на решение в (другой софт).
Captcha.XevilImageFile – решение капчи в файле картинки.
Captcha.Base – служебный прайвет метод решения каптчи с настройкой подключения по api.
Captcha.ReV2 – служебный прайвет метод решения рекаптчи.
Captcha.Image – служебный прайвет метод решения каптчи на картинке.
Captcha.Response – служебный прайвет метод получения ответа по api с решением каптчи.
Благодаря методам решения каптчи можно писать вот такой простой код, в первой строке переходим на страницу с каптчей, во второй строке ее решаем, и все, ничего больше делать не нужно:
Browser.Navigate("https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=low");
Captcha.XevilReV2();
Files
Класс Files – работа с файлами.
Files.
Files – конструктор класса.
Files.AddLineSync – добавить в файл строку, с синхронизацией.
Files.AddListNoSync – добавить в файл список строк, без синхронизации.
Files.SaveAllTextNoSync – создать файл и записать в него содержимое, без синхронизации.
Files.GetAllLinesToStringNoSync – считать все строки из файла в строку, без синхронизации.
Files.GetAllLinesToListSync – считать все строки из файла в список, с синхронизацией.
Files.GetNextLineSync – считать следующую строку из файла, с синхронизацией.
Files.GetRandomLineSync – считать случайную строку из файла, с синхронизацией.
Files.CountLinesSync – подсчет строк в файле (работает быстро, к примеру, считает строки в 500 мб файле за 4 секунды), с синхронизацией.
Files.CountFilesSync – подсчет файлов в директории.
Чтение и запись сделаны через потоки (FileStream, StreamReader, StreamWriter) для надежности и быстродействия. Простой вызов одной строкой:
Files.AddLineSync(“текст”,”путь к файлу”,”объект синхронизации”);
Http
Класс Http – работа с сетевыми запросами.
Http.
Http – конструктор класса.
Http.CookieCreate – создание куки.
Http.PostUpload – загрузка файлов пост-запросом.
Http.PostXml – отправка xml пост-запросом.
Http.PostJson – отправка json пост-запросом.
Http.PostSimple – простой пост-запрос (отправка полей формы).
Http.GetFile – скачивание файла.
Http.GetSimple – простой гет-запрос.
Http.Post – пост-запрос со всеми аргументами.
Http.Get – гет-запрос со всеми аргументами.
Http.Exec – служебный прайвет метод выполнения запросов.
Http.ExecSettings – служебный прайвет метод настроек запросов.
Http.ExecCookie – служебный прайвет метод куки запросов.
Http.ExecProxy – служебный прайвет метод прокси запросов.
Http.ExecAuth – служебный прайвет метод авторизации запросов.
Http.ExecPost – служебный прайвет метод пост-запросов.
Http.ExecPostData – служебный прайвет метод данных в пост запросах
Http.ExecPostUpload – служебный прайвет метод загрузки файлов пост-запросами.
Http.ExecResponse – служебный прайвет метод получения и обработки ответа сервера на запрос.
Удобный класс для построения гет и пост запросов. Возможна работа через прокси, авторизация, скачивание и отправка файлов, xml, json. Используются HttpWebRequest. Возможна настройка таймаутов (базового и отдельно на чтение/запись, по умолчанию 15 секунд), количества допустимых редиректов, буфера, юзерагентов и заголовков, сделан обход проверки валидности сертификата.
Очень простой вызов, к примеру простой гет-запрос:
Http.GetSimple("http://localhost/");
Простой пост-запрос:
Http.PostSimple("http://localhost/", "inptxt=mytestvalue&inpsubmit=ok");
Отправка файла пост-запросом:
Http.PostUpload("http://localhost/", "inptxt=mytestvalue&inpsubmit=ok", @"inputname=inpfile&filename=c:\logo.gif&type=image/gif");
Email
Класс Email – работа с электронной почтой.
Email.
Email – конструктор класса.
Email.ConfirmLinkSingle – подключение к почте и поиск в письмах ссылки для подтверждения.
Email.DeleteAll – удаление писем из ящика.
Email.GetConfirmLink – служебный прайвет метод получения подтверждающей ссылки.
Email.FindInBody – служебный прайвет метод поиска ссылки в письме.
Email.ConnectPop – служебный прайвет метод подключения к почтовому серверу.
Данный класс не имеет отношения к методам зенки, написан с использованием бесплатной библиотеки OpenPop. Простая работа с почтой – получение ссылок для подтверждения аккаунтов при регистрации и удаление писем в ящике. Вызывается очень просто, ищет письмо с нужным текстом и возвращает ссылку для подтверждения:
Email.ConfirmLinkSingle(“адрес почтового сервера” ,”логин” ,”пароль” ,”искать в адресе” ,”искать в теме” ,”искать в теле письма”);
Дополнительно можно указать таймаут (по умолчанию 15 секунд), использование ssl, порт, удаление найденных писем, выводить ли информацию в лог.
Вообще таймаут на сетевых подключениях очень важен, иначе в случае каких-то ошибок шаб может просто зависнуть.
Обратите внимание, что данный метод не поддерживает прокси, мне на pop3 протоколе они не были нужны. Это можно решить, используя вместо бесплатной OpenPop – платную либу типа Mail.dll, которая поддерживает и соксы и oauth.
Procs
Класс Procs – работа с процессами.
Procs.
Procs – конструктор класса.
Procs.RunAndReadOutput – запуск процесса через командную строку с аргументами со скрытым окном и получение результатов вывода в список.
Procs.MemoryCurrent – проверка потребления памяти текущего процесса, только для дебага, вызывает утечки памяти.
Procs.MemoryByName – проверка потребления памяти процессами по имени, только для дебага, вызывает утечки памяти.
Procs.GetPidCurrent – получить pid текущего процесса.
Procs.GetPidByName – получить pid процессов по имени.
Запустить процесс в скрытом окне и получить результать вывода в лист можно одной строкой:
Procs.RunAndReadOutput(“путь к исполняемому файлу”,“аргументы”);
Проверка потребления памяти нужна для дебага, потому что в зенке нет встроенного профайлера.
Screens
Класс Screens – создание скриншотов.
Screens.
Screens – конструктор класса.
Screens.Full – скриншот всего окна браузера.
Screens.Crop – скриншот части окна браузера по координатам.
В процессе обработки ошибок и вывода в лог скриншоты могут создаваться автоматически.
Вызов одной строкой (для текущей вкладки браузера):
Screens.Full();
Elem
Класс Elem – класс для работы с элементами html.
Elem.
Elem – конструктор класса.
Elem.GetAttribute – получение значения атрибута элемента.
По сути, данный класс – это обертка над методами работы с элементами зенки, нужен он, чтобы сразу включить необходимые проверки и вывод информации о ходе выполнения в лог, а не писать это каждый раз при вызове отдельных методов зенки, так код шаба становится намного короче и прозрачнее.
Для понимания, что за проверки, и насколько короче становится код, вот так вызывается метод:
Elem.GetAttribute(element, attributeName);
А вот столько проверок и вывода информации в лог содержится в методе, иначе бы их пришлось писать в коде шаба (здесь приведен код без комментариев, в либе они есть):
public static string GetAttribute(HtmlElement el, string attrName, bool throwError = true, bool throwLog = true)
{
string attrValue = "";
if (el != null && !el.IsNull && !el.IsVoid && !el.ErrorDetected)
{
attrValue = el.GetAttribute(attrName);
if (attrValue == null || attrValue == "")
{
if (throwLog) { Logs.MsgError("пустое значение атрибута " + attrName); }
if (throwError) { Registry.SetErrorWorker(); }
}
}
else
{
if (throwLog) { Logs.MsgError("невозможно получить значение атрибута – элемент отсутствует на странице"); }
if (throwError) { Registry.SetErrorWorker(); }
}
return attrValue;
}
FindElem
Класс FindElem – класс для поиска элементов html на странице.
FindElem.
FindElem – конструктор класса.
FindElem.SingleWaitForValue – поиск одного элемента с ожиданием, пока тот примет значение.
FindElem.XpathClick – поиск элемента по xpath и клик по нему.
FindElem.XpathScroll – поиск элемента по xpath, подведение мыши и скролл на заданное расстояние.
FindElem.XpathSendText – поиск элемента по xpath и заполнение текстом.
FindElem.XpathClickSendText– поиск элемента по xpath, клик по нему и заполнение текстом.
FindElem.SingleById – поиск элемента по айди.
FindElem.SingleByTag – поиск элемента по тегу.
FindElem.SingleByName – поиск элемента по имени.
FindElem.SingleByXpath – поиск элемента по xpath.
FindElem.CollectionByTag – поиск коллекции элементов по тегу.
FindElem.CollectionByName – поиск коллекции элементов по имени.
FindElem.CollectionByXpath – поиск коллекции элементов по xpath.
FindElem.ChildById – поиск дочернего элемента по айди.
FindElem.ChildByTag – поиск дочернего элементов по тегу.
FindElem.ChildByName – поиск дочернего элементов по имени.
FindElem.ChildByXpath – поиск дочернего элементов по xpath.
FindElem.ChildrenByTag – поиск коллекции дочерних элементов по тегу.
FindElem.ChildrenByName – поиск коллекции дочерних элементов по имени.
FindElem.ChildrenByXpath – поиск коллекции дочерних элементов по xpath.
FindElem.Single – служебный прайвет метод поиска отдельного элемента.
FindElem.Collection – служебный прайвет метод поиска коллекции элементов.
FindElem.Child – служебный прайвет метод одного дочернего элемента.
FindElem.Children – служебный прайвет метод поиск коллекции дочерних элементов.
По сути, данный класс – это обертка над методами поиска элемента зенки, нужен он, чтобы сразу включить необходимые проверки и вывод информации о ходе выполнения в лог, а не писать это каждый раз при вызове отдельных методов зенки, так код шаба становится намного короче и прозрачнее. Вместо отдельных методов можно было сделать просто перезагрузку, но с отдельными методами с говорящими названиями код лучше читается. Также сделаны методы для таких частых действий, как найти элемент и кликнуть по нему или найти поле и заполнить его текстом.
Пример вызова поиска элемента и клика по нему:
FindElem.XpathAndClick(“xpath”);
Registry
Класс Registry – регистр переменных, настроек путей либы и уровней эмуляции, глобалок зенки и проверка запуска повторных выполнений воркера, править его нужно только для перенастройки либы, поэтому подробно не буду останавливаться (в коде есть подробные комментарии).
Registry.
Registry – конструктор класса.
Registry.ClearErrors – сброс ошибок
Registry.CheckPermission – проверка разрешений
Registry.SetErrorWorker – установка рабочей ошибки
Registry.SetErrorCrit – установка критической ошибки
Registry.Local – настройки путей либы и уровней эмуляции
Registry.Global – глобальные переменные зенки
Registry.WorkerNext – настройки перехода к следующему выполнению, если кол-во повторений указывать в либе, а не в зенке.
Crypto
Класс Crypto – работа с криптографией.
Crypto.
Crypto – конструктор класса.
Crypto.StringMD5 – получение MD5 хеша строки
Crypto.FileMD5 – получение MD5 хеша файла
MD5 хеш полезен к примеру при сравнении файлов, намного надежнее, чем по размеру сравнивать. Вызов одной строкой:
Crypto. FileMD5 (“путь к файлу”);
Logs
Класс Logs – вывод информации о ходе выполнения и об ошибках в лог.
Logs.
Logs – конструктор класса.
Logs.Start – инициализация лога (вызывается при инициализации либы).
Logs.HandleErrors – обработка вывода информации об ошибках.
Logs.HandleErrorsZenno – вывод информации об ошибках только в лог зенно.
Logs.MsgError – вывод ошибок в лог.
Logs.Msg – вывод сообщения в лог.
Logs.Flush – отправка кешированной части логи на запись в файл.
Logs.Stop – остановка лога (вызывается при завершении работы либы).
Logs.StartVars – служебный прайвет метод, обрабатывающий переменные инициализации.
Logs.Write – служебный прайвет метод, кеширование лога.
Logs.WriteError – служебный прайвет метод, кеширование информации об ошибках.
Logs.SavePageDom – служебный прайвет метод, сохранение страницы, на которой произошла ошибка.
Logs.ElapsedTime – служебный прайвет метод, запись времени выполнения потока.
Logs.SaveTxt – служебный прайвет метод, сохранение кешированной части лога в файл.
В настройках либы можно указать, выводить ли всю информацию в лог или только информацию об ошибках. Также можно указать, использовать ли мой лог или только зенно. Мой лог создает отдельные файлы с расширенной информацией, при необходимости делает скриншоты и сохраняет код страницы, выдает полную информацию об ошибках (message, targetSite, StackTrace), а также замеряет время выполнения потока. В том числе мой лог выводит подробную информацию не только в прожект мейкере, но и в зеннопостере (это отключаемая опция, для дебага).
Сообщение в лог отправляется строкой:
Logs.Msg(“текст”);
Ошибка отправляется в лог строкой:
Logs.MsgError(“текст”);
Подробная информация об ошибке из блока try{}catch{}:
Logs.HandleErrors(exception);