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

Roman48

Client
Joined
Feb 28, 2016
Messages
2,058
Reaction score
746
Points
113
эти клики по шапке сайта , происходят не от того что используется кубик или снипет. это особенность верстки этого сайта. шапка закреплена и начинает перекрывать некоторые элементы.
тут просто так не получиться. тут либо надо находить элемент этой шапки и удалять из верстки, либо проверять куда крыса кликает и сравнивать с тем элементом на который хотим кликнуть. и если есть перекрытие то что то сделать, например проскролить выше страницу и идти на второй заход клика. тут нужны циклы , счетчики повторов, проверки элементов. наверно 1-й вариант проще все таки :-)
Как удалить из верстки?
 

Iv1

Client
Joined
Feb 21, 2016
Messages
1,953
Reaction score
780
Points
113
Как удалить из верстки?
не надо ничего удялать.
сколько я понимаю, ты хочешь написать свой кликер выдачи яндекса.
Нихрена с таким подходом не выйдет.
этих кликеров в интернете уже полно и на сильно более профессиональном уровне. И у них реальные проблемы с эффективностью.

Потому делай все постепенно и сразу с учетом того, что с другой стороны не дураки сидят.

Если удаляешь элементы - ломается навигация по координатам. И если ты выдачу Яндексе глянешь - он четко трекает по каким элементам ты мышкой водишь. И если что-то удалишь, как миниум окажется что по какой-то причине по ним мышка не ездит. И еще миллион других зависимостей.

Надо писать универсальные коды! С учетом разноообразных ситуаций и версток!
Учи Xpath прям по серьезному!


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


У меня, например, уже хрен знает какой релиз основных ботов по порядку, не считая мелких улучшений. Старт с коленки - это фейл.
 

AZANIR

Client
Joined
Jun 9, 2014
Messages
405
Reaction score
200
Points
43
Ребята столкнулся с траблой , сервер винда 2016 , не работают сниппеты мыши , зенка версия 5,41
 

bizzon

Client
Joined
Sep 8, 2015
Messages
1,105
Reaction score
132
Points
63
Есть решение плавного вертикального скрола сверху вниз с возможностью настраивать скорость для создания видео?
 

molotok

Client
Joined
Apr 17, 2015
Messages
742
Reaction score
366
Points
63

bizzon

Client
Joined
Sep 8, 2015
Messages
1,105
Reaction score
132
Points
63

ukrainec2014

Client
Joined
May 12, 2017
Messages
351
Reaction score
52
Points
28
tab.FullEmulationMouseMoveToHtmlElement(elLogIn);
а при клике по элементу, куда именно будет клик?
у элемента есть же размеры (координаты)то клик будет в рандомные координаты или как??
 

Iv1

Client
Joined
Feb 21, 2016
Messages
1,953
Reaction score
780
Points
113
а при клике по элементу, куда именно будет клик?
у элемента есть же размеры (координаты)то клик будет в рандомные координаты или как??
1. Выше - это функция перемещения, а не клика
2. Клик будет в то место, где стоит курсор
3. Обычно перемещается ближе к верхнему левому углу (хотя и говорят что по всему элементу должно)
4. Никто не мешает самому потом "додвинуть" мышку куда надо и после этого кликнуть.
 
  • Thank you
Reactions: ukrainec2014

Семен12

Client
Joined
Jul 22, 2019
Messages
51
Reaction score
12
Points
8
друзья,привет. Скажите как уменьшить скорость ввода данных из переменных

сам код:
C#:
var tab = instance.ActiveTab;

//Ищем поля логина и пароля, кнопку входа
var username = tab.FindElementByXPath("//input[@id='username']", 0);
var password = tab.FindElementByXPath("//input[@name='password']", 0);
var passwordc = tab.FindElementByXPath("//input[@id='passwordc']", 0);
string login = project.Variables["login"].Value;
string pass = project.Variables["pass"].Value;


//Изменяем настройки мыши (теперь двигается чутка быстрее)
tab.FullEmulationMouseSetOptions(5,5,10);
//Ведём её к полю ввода eлогина
tab.FullEmulationMouseMoveToHtmlElement(username);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим логин
username.SetValue(project.Variables["login"].Value, "Middle");
//Микропауза (300-800 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);

//Возвращаем настройки мыши к стандартным
tab.FullEmulationMouseSetOptions();
//Ведём её к полю ввода пароля
tab.FullEmulationMouseMoveToHtmlElement(password);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим пароль
password.SetValue(project.Variables["pass"].Value, "Middle");
//Микропауза (300-700 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);

//Изменяем настройки мыши (теперь двигается чутка быстрее)
tab.FullEmulationMouseSetOptions(5,5,10);
//Ведём её к полю ввода подтверждению пароля
tab.FullEmulationMouseMoveToHtmlElement(passwordc);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим логин
passwordc.SetValue(project.Variables["pass"].Value, "Middle");
//Микропауза (300-700 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);
 

ezotonal

Client
Joined
Jan 13, 2014
Messages
821
Reaction score
232
Points
43
друзья,привет. Скажите как уменьшить скорость ввода данных из переменных

сам код:
C#:
var tab = instance.ActiveTab;

//Ищем поля логина и пароля, кнопку входа
var username = tab.FindElementByXPath("//input[@id='username']", 0);
var password = tab.FindElementByXPath("//input[@name='password']", 0);
var passwordc = tab.FindElementByXPath("//input[@id='passwordc']", 0);
string login = project.Variables["login"].Value;
string pass = project.Variables["pass"].Value;


//Изменяем настройки мыши (теперь двигается чутка быстрее)
tab.FullEmulationMouseSetOptions(5,5,10);
//Ведём её к полю ввода eлогина
tab.FullEmulationMouseMoveToHtmlElement(username);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим логин
username.SetValue(project.Variables["login"].Value, "Middle");
//Микропауза (300-800 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);

//Возвращаем настройки мыши к стандартным
tab.FullEmulationMouseSetOptions();
//Ведём её к полю ввода пароля
tab.FullEmulationMouseMoveToHtmlElement(password);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим пароль
password.SetValue(project.Variables["pass"].Value, "Middle");
//Микропауза (300-700 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);

//Изменяем настройки мыши (теперь двигается чутка быстрее)
tab.FullEmulationMouseSetOptions(5,5,10);
//Ведём её к полю ввода подтверждению пароля
tab.FullEmulationMouseMoveToHtmlElement(passwordc);
//Кликаем по полю
tab.FullEmulationMouseClick("left", "click");
//Вводим логин
passwordc.SetValue(project.Variables["pass"].Value, "Middle");
//Микропауза (300-700 мс)
Thread.Sleep(Global.Classes.rnd.Next(3,8)*100);
Вместо Middle None
 

Семен12

Client
Joined
Jul 22, 2019
Messages
51
Reaction score
12
Points
8
Вместо Middle None
а какие еще есть условия ввода текста? ну всмысле значения,как middle и none
Вручную как-то это можно редактировать? паузы там проставлять,либо стереть\дописать символ с задержкой
 

ezotonal

Client
Joined
Jan 13, 2014
Messages
821
Reaction score
232
Points
43
а какие еще есть условия ввода текста? ну всмысле значения,как middle и none
Вручную как-то это можно редактировать? паузы там проставлять,либо стереть\дописать символ с задержкой
"None", "Middle", "Full" или " Super Emulation"

Да есть тут сниппеты подобные... Пишет печатает, ошибочный символ. Потом его удаляет

Вот в этой ветке глянь
 
  • Thank you
Reactions: Семен12

daymos

Client
Joined
Nov 11, 2009
Messages
807
Reaction score
241
Points
43
Добрый день. Есть задача осуществлять серию кликов по одному елементу. Скорость кликов в цикле очень медленная. Вроде 1-2 клика в секунду. Минимальный тип эмуляции: Middle. Ondoubleclick не работает. Эмуляция задержек на минимуме. Подскажите что делать? Надо прям отстучать ЛКП по элементу.
 

Iv1

Client
Joined
Feb 21, 2016
Messages
1,953
Reaction score
780
Points
113
Добрый день. Есть задача осуществлять серию кликов по одному елементу. Скорость кликов в цикле очень медленная. Вроде 1-2 клика в секунду. Минимальный тип эмуляции: Middle. Ondoubleclick не работает. Эмуляция задержек на минимуме. Подскажите что делать? Надо прям отстучать ЛКП по элементу.
Можно же просто эвенты слать. Там скорость сильно выше можно сделать.
Полная эмуляция принципиальная?
 

b1zar

Client
Joined
Jun 29, 2019
Messages
107
Reaction score
68
Points
28
Добрый день. Есть задача осуществлять серию кликов по одному елементу. Скорость кликов в цикле очень медленная. Вроде 1-2 клика в секунду. Минимальный тип эмуляции: Middle. Ondoubleclick не работает. Эмуляция задержек на минимуме. Подскажите что делать? Надо прям отстучать ЛКП по элементу.
Хочешь скорости, тогда тебе нужно сделать через параллель
C#:
instance.EmulationLevel = "Full";
int MaxClick = 5;

System.Threading.Tasks.Parallel.For(0, MaxClick, p => {
    instance.ActiveTab.FullEmulationMouseClick("left", "click");}
 
  • Thank you
Reactions: daymos and SHILY

zlodey

Client
Joined
Apr 24, 2011
Messages
135
Reaction score
9
Points
18
Подскажите как правильно получить список элементов для чтения заголовков, а именно https://zennolab.com/discussion/threads/snippety-ehmuljacii-myshi-fullemulationmouse.35369/post-271425
Везде данный код работает хорошо, но вот на yahoo не получается поводить мышкой по тайтлам и дескрипшенам

C#:
Tab tab = instance.ActiveTab;

var rnd = new Random();


//Находим коллекцию элементов-постов
//var posts = tab.FindElementByXPath("//*[@id=\"yui_.*?\"]", 0);
var posts = tab.FindElementByAttribute("a", "id", "yui_.*?", "regexp", 0);


//Проходим в цикле по каждому посту
foreach (var post in posts.Elements)
{

    //Ищем заголовок поста
    var h2 = post.FindChildByXPath(".//h3", 0);
    int h2min = 30;        //Задаём минимальную длину заголовка для прочтения
    int ver = 33;        //Задаём вероятность прочтения заголовка меньше 'h2min' символов, в процентах
    int h2dlina = post.InnerText.Length;    //Определяем длину заголовка в символах
    int prsnt = rnd.Next(100);
    if ((h2dlina < h2min && prsnt >= ver) || h2dlina >= h2min)
    {
        //Заголовки
        tab.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
    }
    //Делаем случайную паузу от 0,1 до 1 секунды
    Thread.Sleep(rnd.Next(1, 10) * 100);

    //Ищем текст поста
    var p = post.FindChildByXPath(".//p", 0);

    //Для доп рандомизации (или просто опытов), можно также после "прочтения" каждого поста менять настройки движения мышки (метод доступен с версии 5.10.4.1)
    //По умолчанию каждый параметр равен 5. Для их изменения также можно применять рандом:
    //tab.FullEmulationMouseSetOptions(rnd.Next(3,20), 5, rnd.Next(5,10));
    tab.FullEmulationMouseSetOptions(rnd.Next(3, 10), 5, rnd.Next(3, 10));

    //Проводим мышкой по тексту
    tab.FullEmulationMouseMoveAboveHtmlElement(p, rnd.Next(30, 50));
    //Делаем случайную паузу от 0,5 до 3 секунд
    Thread.Sleep(rnd.Next(4, 30) * 100);
}
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Подскажите как правильно получить список элементов для чтения заголовков, а именно https://zennolab.com/discussion/threads/snippety-ehmuljacii-myshi-fullemulationmouse.35369/post-271425
Везде данный код работает хорошо, но вот на yahoo не получается поводить мышкой по тайтлам и дескрипшенам

C#:
Tab tab = instance.ActiveTab;

var rnd = new Random();


//Находим коллекцию элементов-постов
//var posts = tab.FindElementByXPath("//*[@id=\"yui_.*?\"]", 0);
var posts = tab.FindElementByAttribute("a", "id", "yui_.*?", "regexp", 0);


//Проходим в цикле по каждому посту
foreach (var post in posts.Elements)
{

    //Ищем заголовок поста
    var h2 = post.FindChildByXPath(".//h3", 0);
    int h2min = 30;        //Задаём минимальную длину заголовка для прочтения
    int ver = 33;        //Задаём вероятность прочтения заголовка меньше 'h2min' символов, в процентах
    int h2dlina = post.InnerText.Length;    //Определяем длину заголовка в символах
    int prsnt = rnd.Next(100);
    if ((h2dlina < h2min && prsnt >= ver) || h2dlina >= h2min)
    {
        //Заголовки
        tab.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
    }
    //Делаем случайную паузу от 0,1 до 1 секунды
    Thread.Sleep(rnd.Next(1, 10) * 100);

    //Ищем текст поста
    var p = post.FindChildByXPath(".//p", 0);

    //Для доп рандомизации (или просто опытов), можно также после "прочтения" каждого поста менять настройки движения мышки (метод доступен с версии 5.10.4.1)
    //По умолчанию каждый параметр равен 5. Для их изменения также можно применять рандом:
    //tab.FullEmulationMouseSetOptions(rnd.Next(3,20), 5, rnd.Next(5,10));
    tab.FullEmulationMouseSetOptions(rnd.Next(3, 10), 5, rnd.Next(3, 10));

    //Проводим мышкой по тексту
    tab.FullEmulationMouseMoveAboveHtmlElement(p, rnd.Next(30, 50));
    //Делаем случайную паузу от 0,5 до 3 секунд
    Thread.Sleep(rnd.Next(4, 30) * 100);
}
просто надо поиск элемента улучшить. Посидеть, подумать, составить хороший xpath , который будет работать и после 10-й перезагрузки страницы.
Все упирается в поиск элемента. это база.
 

art22

Client
Joined
Jun 24, 2016
Messages
495
Reaction score
75
Points
28
Может в следующей статье напишешь полноценный шаблон где можно имитировать действия человека на любом сайте в течении 5-10 минут? по сути система сайтом у всех одинаковые, Чтобы можно было углубиться в категории под категории пролистать все, левые движения мышкой и тп...
 

prodox

Client
Joined
Aug 28, 2018
Messages
280
Reaction score
55
Points
28
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; эта функция возвращает координаты где мышка остановилась в последний раз, даже если проскролить, она не принимает текущие координаты, а двигается с той части страницы, где была в последний раз. Мышка прошла, прокрутилась страница, Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; и дальше движении мыши, но координаты принимаются сверху. Пауза не как не помогает, он берет те координаты. Походу костыль это единственный выход.
С этой хернёй боролся годик назад. Когда хотел Humaniator подружить с FullEmalation. FullEmulation работает с абсолютными координатами, а Humaniator с относительными
Я тоже пытался узнавать координаты мыши. но нужны не координаты мыши, а сдвиг окна. Добавляя текущий сдвиг к координате Y, то фактически будто работаете с относительной координатой в рамках текущей видимой части
Главное после каждого скролла получать сдвиг экрана

добавляйте к координате Y сдвиг экрана при каждом движении


int shift = Convert.ToInt32(instance.ActiveTab.FindElementByAttribute("body", "fulltagname", "body", "regexp", 0).GetAttribute("topInTab"));
shift = - shift;

Random rnd = new Random();
int x = rnd.Next(150, 500);
int y = rnd.Next(160, 601);
instance.ActiveTab.FullEmulationMouseMove(x, y + shift); // везде добавляйте shift и после скролла снова вычисляйте сдвиг

Неплохо бы в метод FullEmulationMove сделать атрибут координата относительно текущего экрана или сверху

И очень не хватает поиск элемента в видимой части экрана.

ScrollinToview вообще моментально перелетает.
И выставляет элемент по срезу экрана сверху, а там плавающая шапка, у яндекса например, с гигантским Z-index и элемент ложится под шапку

Сделайте нормально!!!!


FullEmulationScroll не скроллит на точное число пикселей, оказывается зависит от установки скорости скролла в Windows. Также всякие доп драйвера управляющие мышью в windows не дают скроллить при движении мыши. Мышь упирается в конец экрана и никуда не скроллит

Только движение мышки по координатам нормально скроллит

ЕЩЕ РАЗ ВЫРАЖУ ВОЗМУЩЕНИЕ. КОГДА БАЗОВЫЕ ФУНКЦИИ ДОДЕЛАЕТЕ О КОТОРЫХ УЖЕ НЕСКОЛЬКО ЛЕТ ПРОСИМ.???
ДЕРЬМО ВСЕ НОВЫЕ ФУНКЦИИ ЕСЛИ ИСКАТЬ ЭЛЕМЕНТЫ ЧЕРЕЗ ЗАДНИЦУ НАДО И НИКАКОГО FullEmulation НЕТ ПО ФАКТУ

ПРОСТОЕ - КОГДА СДЕЛАЕТЕ СЧЕТЧИК СОВПАДЕНИЙ В ПОИСКЕ ПО XPATH???? 5 МИНУТ РАБОТЫ ВСТАВИТЬ А ЛЮДИ ТЕСТЕРЫ XpATH ЧЕРЕЗ КОСТЫЛИ ТЕСТИРУЮТ
 
Last edited:

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
годы летят, а prodox все так же возмущается :bk:
вместо того что бы молча уйти на софт конкурента, где все отлично работает без костылей.... как там говорят... мыши если кактус, кололись, плакали, но продолжают его жрать *HAHA*
 

prodox

Client
Joined
Aug 28, 2018
Messages
280
Reaction score
55
Points
28
Довольно интересно как это работает. написание метода идентично, а в зависимости от параметров работает по разному. Если передаешь Элемент. то это прокрутка к элементу. Если числа, то на дельту
 

Attachments

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,725
Points
113
Довольно интересно как это работает. написание метода идентично, а в зависимости от параметров работает по разному. Если передаешь Элемент. то это прокрутка к элементу. Если числа, то на дельту
 

olek2765

Client
Joined
Dec 28, 2018
Messages
10
Reaction score
0
Points
1
C#:
//находим элемент по xpath
var he = instance.ActiveTab.FindElementByAttribute("span", "innertext", "Document", "regexp", 0);
//подводим мышь к элементу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
//кликаем по нему
instance.ActiveTab.FullEmulationMouseClick("left","click");
подскажите, клик работает не всегда
и при изминени размера страницы ошибка, вообще не находит элемент
подскажите как исправить
 

Dmitriy Ka

Client
Joined
May 3, 2016
Messages
805
Reaction score
551
Points
93
C#:
//находим элемент по xpath
var he = instance.ActiveTab.FindElementByAttribute("span", "innertext", "Document", "regexp", 0);
//подводим мышь к элементу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
//кликаем по нему
instance.ActiveTab.FullEmulationMouseClick("left","click");
подскажите, клик работает не всегда
и при изминени размера страницы ошибка, вообще не находит элемент
подскажите как исправить
Лучше сделать так
C#:
//находим элемент по xpath
var tab = instance.ActiveTab;
var he = tab.FindElementByXPath("xPath", 0);//xPath
//подводим мышь к элементу
tab.FullEmulationMouseMoveToHtmlElement(he);
//кликаем по нему
tab.FullEmulationMouseClick("left", "click");
После того как вы получили Tab, нельзя менять размер страницы, потому что элементы изменят свои координаты!
 
  • Thank you
Reactions: olek2765

mrstorm

Client
Joined
Apr 16, 2015
Messages
209
Reaction score
14
Points
18
Друзья, всем привет.
Подскажите пожалуйста, можно ли как то ускорить прокрутку в следующем коде:
C#:
int i = 0; //Точка отсчета
int Y = 100; //Координата по оси Y

//Иницируем начало цикла со скроллингом
while(true)
{
    //Прокрутка
    instance.ActiveTab.FullEmulationMouseWheel(0,Y);

    //Положение мыши по оси Y
    int posY = instance.ActiveTab.FullEmulationMouseCurrentPosition.Y;

   //Условие, если положение мыши по оси Y больше точки отсчета, то скроллим дальше
    if(posY > i)
    {
        i = posY;
        Y += 100;
    }
    else //иначе выходит из цикла
    {
        break;
    }
}
Уж слишком долго он листает вниз. Как то ускорить можно, подскажите параметром настройки, думаю он есть, но пока не могу разобраться в коде.
Спасибо!
 

Alex733

Client
Joined
Nov 27, 2017
Messages
340
Reaction score
244
Points
43
Y +=200;
 

mrstorm

Client
Joined
Apr 16, 2015
Messages
209
Reaction score
14
Points
18
Спасибо, но это лишь приводит к тому, что прокручивается на большее кол-во строк. Но сама скорость прокрутки - очень медленная.
 

Dmitriy Ka

Client
Joined
May 3, 2016
Messages
805
Reaction score
551
Points
93
Спасибо, но это лишь приводит к тому, что прокручивается на большее кол-во строк. Но сама скорость прокрутки - очень медленная.
Посмотрите данные методы
.FullEmulationMouseSetScrollBorder()
.FullEmulationMouseSetOptions()
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)