Сниппеты эмуляции мыши: FullEmulationMouse

Вроде так?
Код:
Развернуть Свернуть Копировать
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", (project.Variables["domen"].Value), "regexp", 0);//находим элемент по УРЛу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке

Код ошибок не выдает, отрабатывает, говорит "ок". Те действие происходит, правильно понимаю?
 
Последнее редактирование:
Вроде так?
Код:
Развернуть Свернуть Копировать
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", (project.Variables["domen"].Value), "regexp", 0);//находим элемент по УРЛу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке

Код ошибок не выдает, отрабатывает, говорит "ок". Те действие происходит, правильно понимаю?
Скобки лишние вокруг переменной. Хотя и с ними работает:D.
А у вас не видно результат?
 
Скобки лишние вокруг переменной. Хотя и с ними работает:D.
А у вас не видно результат?
Да, попробовал с вводом ключа в поисковике, отработал, только запрос оч резко вводится, как будто ctrl+c - ctrl+v нажали
Скажите как сделать эмуляцию плавного ввода запроса ? в яа?
 
Да, попробовал с вводом ключа в поисковике, отработал, только запрос оч резко вводится, как будто ctrl+c - ctrl+v нажали
Скажите как сделать эмуляцию плавного ввода запроса ? в яа?
Вы про это?
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.KeyEvent("A","press","ctrl");//замена всего текста в поле
instance.SendText(project.Variables["Переменная"].Value, Global.Classes.rnd.Next(125, 200));//ввод текста из переменной
 
Вы про это?
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.KeyEvent("A","press","ctrl");//замена всего текста в поле
instance.SendText(project.Variables["Переменная"].Value, Global.Classes.rnd.Next(125, 200));//ввод текста из переменной
Возможно.
Я имел в виду чтобы запрос вводился плавно, как правильно? по буквам те, а не ctrl+c - ctrl+v
Вроде верно объяснил:))) Сейчас протестирую
 
Вы про это?
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.KeyEvent("A","press","ctrl");//замена всего текста в поле
instance.SendText(project.Variables["Переменная"].Value, Global.Classes.rnd.Next(125, 200));//ввод текста из переменной
У меня почти получилось сделать, то что мне нужно.
Код по ключевому слову хорошо ищет нужный элемент, а по домену почему-то мышка улетает вообще за экран(
В чем может быть вопрос?
Код:
Развернуть Свернуть Копировать
Random rand = new Random();//переменная для рандома
HtmlElementCollection hes = instance.ActiveTab.GetDocumentByAddress("0").FindElementsByAttribute("div","class","organic__url-text","regexp");//берем все элементы
HtmlElement he;//переменная для будущего элемента
int i = 0;//счетчик
do{
    int url = rand.Next(0, hes.Count);//выбираем совпадение элемента рандомно
    i++;
    he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("div","class","organic__url-text","regexp", url);//берем элемент
    if (Convert.ToInt32(he.GetAttribute("leftInTab")) <= 0 && Convert.ToInt32(he.GetAttribute("topInTab")) <= 0){//если элемент не находится в поле видимости
        continue;//если да, то продолжаем искать
    }
    else{
        break;//если нет, то выходим из цикла
    }
}
while (i!=100);//пока не будет "100", не выходим из цикла
HtmlElement he1 = instance.ActiveTab.FindElementByAttribute("a", "href", project.Variables["domen"].Value, "regexp", 0);//находим элемент по имени домена
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he1);//двигаем мышку к нему
System.Threading.Thread.Sleep(1000);//ждем пол 1сек перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке

Видео с процессом: https://yadi.sk/i/y_-7sJMgywqiSA

Домен указан без https://
 
Решил вопрос таким способом:
Код:
Развернуть Свернуть Копировать
Random rand = new Random();//переменная для рандома

HtmlElementCollection hes = instance.ActiveTab.GetDocumentByAddress("0").FindElementsByAttribute("div","class","organic__url-text","regexp");//берем все элементы
HtmlElement he;//переменная для будущего элемента
int i = 0;//счетчик
do{
    int url = rand.Next(0, hes.Count);//выбираем совпадение элемента рандомно
    i++;
    he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("div","class","organic__url-text","regexp", url);//берем элемент
    if (Convert.ToInt32(he.GetAttribute("leftInTab")) <= 0 && Convert.ToInt32(he.GetAttribute("topInTab")) <= 0){//если элемент не находится в поле видимости
        continue;//если да, то продолжаем искать
    }
    else{
        break;//если нет, то выходим из цикла
    }
}
while (i!=100);//пока не будет "100", не выходим из цикла
he = instance.ActiveTab.FindElementByAttribute("b", "innertext", project.Variables["domen"].Value, "regexp", 0);//находим элемент по имени домена

instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(1000);//ждем 1сек перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
 
  • Спасибо
Реакции: prodox
Да, давно пора.)



Итак, с версии 5.18.0.0 появилась перегрузка метода FullEmulationMouseWheel.
Позволяет делать прокрутку до определенного Html-элемента на странице. Первый вариант метода позволяет крутить только на указанное количество пикселей, и для прокрутки до элемента нужно было сооружать свои костылики.
Теперь имеем готовый соответствующий метод, и надо сказать, он получился очень удобным.

Параметры.
1. HtmlElement he

Описание. Элемент, до которого нужно сделать прокрутку.

2. int topOffsetToElementCenter
Описание. Отступ от верхней границы окна инстанса до середины элемента, в процентах. Когда метод докрутит до середины элемента с нужным отступом, тогда прокрутка и остановится.
Значение по умолчанию: 50.
Параметр необходим для прокрутки по вертикали (т.е. использовать придётся скорее всего часто).

3. int leftOffsetToElementCenter
Описание. Отступ от левой границы окна инстанса до середины элемента, в процентах. Когда метод докрутит до середины элемента с нужным отступом, тогда прокрутка и остановится.
Значение по умолчанию: 50.
Параметр необходим для прокрутки по горизонтали (т.е. использовать придётся почти никогда).

Честно говоря, как не пытайся объяснить предназначение 2 и 3 параметра без самостоятельных тестов, выходит всё равно непонятно.
Поэтому призову в помощь такую картинку. Рассматриваем прокрутку по вертикали.

Посмотреть вложение 31531

Если надо прокрутить до элемента так, чтобы он оказался примерно в верхней части окна - во второй параметр ставим, например, 10 (процентов). Прокрутка остановится тогда, когда элемент во вкладке по высоте будет примерно где нарисовано число "10".
Если надо прокрутить до элемента так, чтобы он оказался примерно в середине окна- во второй параметр ставим 50 (процентов). Прокрутка остановится тогда, когда элемент во вкладке по высоте будет примерно где нарисовано число "50".
Если надо прокрутить до элемента так, чтобы он оказался примерно в нижней части окна- во второй параметр ставим, например, 90 (процентов). Прокрутка остановится тогда, когда элемент во вкладке по высоте будет примерно где нарисовано число "90".

Касательно третьего параметра - тот же принцип, только по горизонтали.

Особенности.
Если во 2 или 3 параметре указать значение ниже 0 или выше 100 - метод отработает, но никакой прокрутки совершено не будет.
Не забываем, что прокрутка идёт к центру элемента, а не к его краю (важно помнить при работе с крупными по размерам элементами).

Выводы.
Весьма удобный метод прокрутки до элемента. Встроенные отступы позволяют крутить до элемента так, чтобы его случайно не закрыла, например, закрепленная шапка на странице (эта проблема может здорово мешать в ботах на FullEmulationMouse, если вы не сооружали аналог этого метода или не знаете как это сделать). Я бы даже сказал, это 5, ZennoLab :ay:

Не знаете можно ли задавать скорость прокрутки? На длинных сайтах можно уснуть пока он докрутит ...
 
Пробовал сделать подстановку рандомных координат их переменной, сделал такой код:
Код:
Развернуть Свернуть Копировать
// Движение к координатам
//Координата по X (по горизонтали)
int toX = (project.Variables["ToX"].Value);
//Координата по Y (по вертикали)
int toY = (project.Variables["ToY"].Value);

//Проверка значений
if (toX>instance.ActiveTab.MainDocument.Width)    toX = instance.ActiveTab.MainDocument.Width;
if (toY>instance.ActiveTab.MainDocument.Height)    toY = instance.ActiveTab.MainDocument.Height;
//Движение к указанным координатам
instance.ActiveTab.FullEmulationMouseMove(toX, toY);

Шаб выдает ошибку: Неявное преобразование string в int невозможно
В чем может быть вопрос?

X и Y генерируются стандартными кубиками "random"
 
Пробовал сделать подстановку рандомных координат их переменной, сделал такой код:
Код:
Развернуть Свернуть Копировать
// Движение к координатам
//Координата по X (по горизонтали)
int toX = (project.Variables["ToX"].Value);
//Координата по Y (по вертикали)
int toY = (project.Variables["ToY"].Value);

//Проверка значений
if (toX>instance.ActiveTab.MainDocument.Width)    toX = instance.ActiveTab.MainDocument.Width;
if (toY>instance.ActiveTab.MainDocument.Height)    toY = instance.ActiveTab.MainDocument.Height;
//Движение к указанным координатам
instance.ActiveTab.FullEmulationMouseMove(toX, toY);

Шаб выдает ошибку: Неявное преобразование string в int невозможно
В чем может быть вопрос?

X и Y генерируются стандартными кубиками "random"
Сам спросил, сам решил:
Код:
Развернуть Свернуть Копировать
int toX = Convert.ToInt16(project.Variables["ToX"].Value);
:D
 
Сам спросил, сам решил:
Код:
Развернуть Свернуть Копировать
int toX = Convert.ToInt16(project.Variables["ToX"].Value);
:D

лучше это

C#:
Развернуть Свернуть Копировать
int toX = int.Parse(project.Variables["ToX"].Value);
 
  • Спасибо
Реакции: artsmm
Че-то я подвис немного)) Как сделать, чтобы после клика на сайте:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(1000);//ждем 1сек перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
шаб находился на сайте еще 2 - 10 сек ?

Тут можно еще добавить рандомные движения мышью на сайте, но это уже проще))
Заранее спасибо за помощь)

Вроде вот это надо добавить:
Код:
Развернуть Свернуть Копировать
System.Threading.Thread.Sleep(1000);
Может я не прав... Диапазон по-моему задается 1000,2000 и тп
 
Можно ли эмулировать движение пальца?
 
Интересует эмуляция touch на мобилках
Где-то попадалась инфа, что в метрике будет отображаться как движение мышью. Но это не точно)
Сам думал заняться этим, но как-то не доходит. Если кто подскажет буду благодарен.
 
Подскажите пожалуйста, как можно сделать рандом действия мышки, когда в 20% случаев происходит tab1.FullEmulationMouseMoveAboveHtmlElement(h2, rnd.Next(30,50));, а в остальных 80% действие tab1.FullEmulationMouseMoveToHtmlElement(h2); для данного кода (строка 13):


Код:
Развернуть Свернуть Копировать
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));
}
 
Подскажите пожалуйста, как можно сделать рандом действия мышки, когда в 20% случаев происходит tab1.FullEmulationMouseMoveAboveHtmlElement(h2, rnd.Next(30,50));, а в остальных 80% действие tab1.FullEmulationMouseMoveToHtmlElement(h2); для данного кода (строка 13):


Код:
Развернуть Свернуть Копировать
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));
}
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);
    if (20 >= new Random().Next(1,101)) {
        //Проводим мышкой по заголовку, для второго параметра используем рандом (например, от 30 до 50)
        tab1.FullEmulationMouseMoveAboveHtmlElement(h2, rnd.Next(30,50));
    }
    else {
        tab1.FullEmulationMouseMoveToHtmlElement(h2);      
    }
    //Делаем случайную паузу от 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));
}
 
Последнее редактирование модератором:
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);
    if (20 <= new Random().Next(1,101)) {
        //Проводим мышкой по заголовку, для второго параметра используем рандом (например, от 30 до 50)
        tab1.FullEmulationMouseMoveAboveHtmlElement(h2, rnd.Next(30,50));
    }
    else {
        tab1.FullEmulationMouseMoveToHtmlElement(h2);      
    }
    //Делаем случайную паузу от 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));
}

Благодарю, то что нужно!
 
Благодарю, то что нужно!
Ахтунг, там критическая ошибка, наоборот знак надо поставить, а уже не могу пост отредактировать. Вместо неправильного:
C#:
Развернуть Свернуть Копировать
if (20 <= new Random().Next(1,101))
надо вот так:
C#:
Развернуть Свернуть Копировать
if (20 >= new Random().Next(1,101))
 
Приветствую всех!

Не так давно 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));
}

Перед использованием методов FullEmulationMouseMoveAboveHtmlElement и FullEmulationMouseSetOptions рекомендую потестить разные значения их целочисленных параметров, возможно вам удастся получить более адекватные движения мышки.

Если у вас вопросы, идеи сниппетов, или же есть самим что написать по теме виртуальной мыши - жду ваших сообщений в топике. :-)


классная статья благодарю)
Но что-то трудно разобраться самому!
Может вы поможете как проскролить на этой странице
https://yandex.ua/maps/11121/almety...=0.180588,0.070060&text=Альметьевск суши&z=13
 

Вложения

  • Screenshot_23.png
    Screenshot_23.png
    385,9 KB · Просмотры: 27
Всем привет. Как правильно должен работать данный код?
Код:
Развернуть Свернуть Копировать
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
Random rnd = new Random();
x += rnd.Next(50, 200);
y += rnd.Next(50, 200);
// массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[10]
{
    new Point(x, y),
    new Point(x + 10, y + 5),
    new Point(x + 20, y + 10),
    new Point(x + 30, y + 15),
    new Point(x + 40, y + 20),
    new Point(x + 50, y + 25),
    new Point(x + 60, y + 30),
    new Point(x + 70, y + 35),
    new Point(x + 80, y + 40),
    new Point(x + 90, y + 45)
};
// случайные задержки между движениями
int[] delay = new int[10] {
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150)
};
// функция, выполняющая движение по заданной траектории с указанными задержками
instance.ActiveTab.MouseMove(points, delay, false);

У меня он почему-то выдает коротенькое движение мышью и затихает .. Судя по коду, он должен 10 точек пройти или я что-то не так понял?
 
Всем привет. Как правильно должен работать данный код?
Код:
Развернуть Свернуть Копировать
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
Random rnd = new Random();
x += rnd.Next(50, 200);
y += rnd.Next(50, 200);
// массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[10]
{
    new Point(x, y),
    new Point(x + 10, y + 5),
    new Point(x + 20, y + 10),
    new Point(x + 30, y + 15),
    new Point(x + 40, y + 20),
    new Point(x + 50, y + 25),
    new Point(x + 60, y + 30),
    new Point(x + 70, y + 35),
    new Point(x + 80, y + 40),
    new Point(x + 90, y + 45)
};
// случайные задержки между движениями
int[] delay = new int[10] {
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150),
    rnd.Next(50, 150)
};
// функция, выполняющая движение по заданной траектории с указанными задержками
instance.ActiveTab.MouseMove(points, delay, false);

У меня он почему-то выдает коротенькое движение мышью и затихает .. Судя по коду, он должен 10 точек пройти или я что-то не так понял?
именно так и должен делать. Только там фактически не "движения" мишки получаются, а просто курсор прыгает между точками. Для плавности курсора лучше вот так:
C#:
Развернуть Свернуть Копировать
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
Random rnd = new Random();
x += rnd.Next(50, 200);
y += rnd.Next(50, 200);
// массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[10]
{
    new Point(x, y),
    new Point(x + 10, y + 5),
    new Point(x + 20, y + 10),
    new Point(x + 30, y + 15),
    new Point(x + 40, y + 20),
    new Point(x + 50, y + 25),
    new Point(x + 60, y + 30),
    new Point(x + 70, y + 35),
    new Point(x + 80, y + 40),
    new Point(x + 90, y + 45)
};
// в цикле двигаем курсором между точками
for (int i = 0; i<10; i++)
{
    //задаем рандомно скорость движения для каждого рывка:
    instance.ActiveTab.FullEmulationMouseSetOptions(rnd.Next(4,7),rnd.Next(4,7),rnd.Next(2,5));
    //Двигаем мышкой плавно:
    instance.ActiveTab.FullEmulationMouseMove(points.ElementAt(i).X, points.ElementAt(i).Y);
}
А если задачей было сделать рандомное движение курсора, то можно вот так переделать этот код, с заданием любого количества точек в цикле:
C#:
Развернуть Свернуть Копировать
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
Random rnd = new Random();
// указываем количество точек
int Kolichestvo_Tochek = 33;
// обьявляем массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[Kolichestvo_Tochek];
// в цикле заполняем наш масив
for (int i = 0; i<Kolichestvo_Tochek; i++)
{
    // указываем рандомные пределы для сдвига курсора в пикселях:
    x += rnd.Next(-64,64);
    y += rnd.Next(-64,64);
    // если координаты выходят за пределы страницы (минусовые), то водим не доходя до края (меняем на "чуть плюсовые").
    if (x < 0) {
        x = rnd.Next(0,5);
    }
    if (y < 0) {
        y = rnd.Next(0,5);
    }
    points[i] = new Point(x, y);
    project.SendInfoToLog(x.ToString() + " , " + y.ToString(), false); // выводим в лог координаты
}

// в цикле двигаем курсором между точками
for (int i = 0; i<Kolichestvo_Tochek; i++)
{
    //задаем рандомно скорость движения для каждого рывка:
    instance.ActiveTab.FullEmulationMouseSetOptions(rnd.Next(4,7),rnd.Next(4,7),rnd.Next(2,5));
    //Двигаем мышкой плавно:
    instance.ActiveTab.FullEmulationMouseMove(points.ElementAt(i).X, points.ElementAt(i).Y);
}
 
Благодарю, вы оч помогли:))
 
А если задачей было сделать рандомное движение курсора, то можно вот так переделать этот код, с заданием любого количества точек в цикле:
Подскажите, а переменные x и y, значения которых записываются из переменных проекта - это координаты куда в итоге должен быть подведен курсор?
 

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