- Регистрация
- 01.10.2015
- Сообщения
- 227
- Благодарностей
- 927
- Баллы
- 93
Приветствую всех!
Не так давно ZennoLab порадовали нас обновой с виртуальной мышью. Хотя лично у меня пока не было нужды использовать мышь в своих проектах, из интереса посидел вечерок за тестами новой эмуляции. В результате родились на свет пара сниппетов и чутка размышлений, кои и представлены ниже - возможно кому пригодятся.
Итак, появилось несколько методов работы с виртуальной мышью, доступных из C#-кода.
Самый интересный, несомненно, FullEmulationMouseMoveAboveHtmlElement, предназначенный для эмуляции чтения. Метод принимает в качестве параметров элемент страницы, который нужно "прочесть", и некий sizeOfType в виде некоего числа. На момент создания темы до сих пор непонятно, что это за sizeOfType такой - в документации объяснения нет, от разработчиков конкретного ответа тоже не было. Много тестил поведение метода с различными значениями, но так и не пришёл к понятному объяснению, как и на что влияет этот параметр. Если кто-то понял его назначение, или хотя бы есть однозначные предположения - большая просьба отписаться.
Также добавлю, что в ходе тестов не получилось найти и оптимального значения sizeOfType, при котором эмуляция чтения смотрелась бы более-менее реалистично. Моё мнение - над реализацией этой виртуальной мыши разработчикам ещё работать и работать.
Но довольно о проблемах. Так как виртуальная мышь сейчас доступна только из кода, с которым немало пользователей ZennoPoster "на Вы", разберём пару простых задач с применением виртуальной мыши. Для примера возьмём главную страницу известного портала 4pda.
Задача 1: "прочитать" рандомный пост с главной страницы и перейти к его полной версии.
Задача 2: "прочитать" все посты на главной странице.
Перед использованием методов FullEmulationMouseMoveAboveHtmlElement и FullEmulationMouseSetOptions рекомендую потестить разные значения их целочисленных параметров, возможно вам удастся получить более адекватные движения мышки.
Если у вас вопросы, идеи сниппетов, или же есть самим что написать по теме виртуальной мыши - жду ваших сообщений в топике.
Не так давно ZennoLab порадовали нас обновой с виртуальной мышью. Хотя лично у меня пока не было нужды использовать мышь в своих проектах, из интереса посидел вечерок за тестами новой эмуляции. В результате родились на свет пара сниппетов и чутка размышлений, кои и представлены ниже - возможно кому пригодятся.
Итак, появилось несколько методов работы с виртуальной мышью, доступных из C#-кода.
Самый интересный, несомненно, FullEmulationMouseMoveAboveHtmlElement, предназначенный для эмуляции чтения. Метод принимает в качестве параметров элемент страницы, который нужно "прочесть", и некий sizeOfType в виде некоего числа. На момент создания темы до сих пор непонятно, что это за sizeOfType такой - в документации объяснения нет, от разработчиков конкретного ответа тоже не было. Много тестил поведение метода с различными значениями, но так и не пришёл к понятному объяснению, как и на что влияет этот параметр. Если кто-то понял его назначение, или хотя бы есть однозначные предположения - большая просьба отписаться.
Также добавлю, что в ходе тестов не получилось найти и оптимального значения sizeOfType, при котором эмуляция чтения смотрелась бы более-менее реалистично. Моё мнение - над реализацией этой виртуальной мыши разработчикам ещё работать и работать.
Но довольно о проблемах. Так как виртуальная мышь сейчас доступна только из кода, с которым немало пользователей ZennoPoster "на Вы", разберём пару простых задач с применением виртуальной мыши. Для примера возьмём главную страницу известного портала 4pda.
Задача 1: "прочитать" рандомный пост с главной страницы и перейти к его полной версии.
C#:
var rnd = new Random();
//Переходим на целевую страничку
Tab tab1 = instance.ActiveTab;
tab1.Navigate("http://4pda.ru/");
if (tab1.IsBusy) tab1.WaitDownloading();
//Находим коллекцию элементов-постов (на главной нашего сайта их 30 штук)
//Эти элементы будем использовать как родительские, для поиска заголовка и контента каждого из постов
var posts = tab1.FindElementsByXPath("//article[@class='post']");
//Я обычно использую XPath, но можно искать и просто по атрибутам:
//posts = tab1.FindElementsByAttribute("article", "class", "post", "text");
//Если ни одного поста не найдено, выходим из сниппета по красной ветке
if (posts.Count==0) throw new Exception("Посты не найдены!");
//Получаем рандомный пост на странице
var post = posts.GetByNumber(rnd.Next(0,posts.Count));
//Ведём мышку к этому посту
tab1.FullEmulationMouseMoveToHtmlElement(post);
//Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h2",0);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
//Ищем текст поста
var p = post.FindChildByXPath(".//p",0);
//Проводим мышкой по тексту
tab1.FullEmulationMouseMoveAboveHtmlElement(p, 40);
Thread.Sleep(2000); //Пауза 2 с
//Ведём мышку к кнопке "далее" и кликаем по ней
var more = post.FindChildByXPath(".//a[text()='далее']",0);
tab1.FullEmulationMouseMoveToHtmlElement(more);
tab1.FullEmulationMouseClick("left", "click");
Задача 2: "прочитать" все посты на главной странице.
C#:
var rnd = new Random();
//Переходим на целевую страничку
Tab tab1 = instance.ActiveTab;
tab1.Navigate("http://4pda.ru/");
if (tab1.IsBusy) tab1.WaitDownloading();
//Находим коллекцию элементов-постов
var posts = tab1.FindElementsByXPath("//article[@class='post']");
//Проходим в цикле по каждому посту
foreach (var post in posts.Elements){
//Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h2",0);
//Проводим мышкой по заголовку, для второго параметра используем рандом (например, от 30 до 50)
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, rnd.Next(30,50));
//Делаем случайную паузу от 0,1 до 1 секунды
Thread.Sleep(rnd.Next(1,10) * 100);
//Ищем текст поста
var p = post.FindChildByXPath(".//p",0);
//Проводим мышкой по тексту
tab1.FullEmulationMouseMoveAboveHtmlElement(p, rnd.Next(30,50));
//Делаем случайную паузу от 0,5 до 3 секунд
Thread.Sleep(rnd.Next(4,30) * 100);
//Для доп рандомизации (или просто опытов), можно также после "прочтения" каждого поста менять настройки движения мышки (метод доступен с версии 5.10.4.1)
//По умолчанию каждый параметр равен 5. Для их изменения также можно применять рандом:
//t1.FullEmulationMouseSetOptions(rnd.Next(3,20), 5, rnd.Next(5,10));
}
Если у вас вопросы, идеи сниппетов, или же есть самим что написать по теме виртуальной мыши - жду ваших сообщений в топике.