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

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
746
Баллы
113
эти клики по шапке сайта , происходят не от того что используется кубик или снипет. это особенность верстки этого сайта. шапка закреплена и начинает перекрывать некоторые элементы.
тут просто так не получиться. тут либо надо находить элемент этой шапки и удалять из верстки, либо проверять куда крыса кликает и сравнивать с тем элементом на который хотим кликнуть. и если есть перекрытие то что то сделать, например проскролить выше страницу и идти на второй заход клика. тут нужны циклы , счетчики повторов, проверки элементов. наверно 1-й вариант проще все таки :-)
Как удалить из верстки?
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 950
Благодарностей
774
Баллы
113
Как удалить из верстки?
не надо ничего удялать.
сколько я понимаю, ты хочешь написать свой кликер выдачи яндекса.
Нихрена с таким подходом не выйдет.
этих кликеров в интернете уже полно и на сильно более профессиональном уровне. И у них реальные проблемы с эффективностью.

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

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

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


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


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

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
200
Баллы
43
Ребята столкнулся с траблой , сервер винда 2016 , не работают сниппеты мыши , зенка версия 5,41
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
Есть решение плавного вертикального скрола сверху вниз с возможностью настраивать скорость для создания видео?
 

molotok

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

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
351
Благодарностей
52
Баллы
28
tab.FullEmulationMouseMoveToHtmlElement(elLogIn);
а при клике по элементу, куда именно будет клик?
у элемента есть же размеры (координаты)то клик будет в рандомные координаты или как??
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 950
Благодарностей
774
Баллы
113
а при клике по элементу, куда именно будет клик?
у элемента есть же размеры (координаты)то клик будет в рандомные координаты или как??
1. Выше - это функция перемещения, а не клика
2. Клик будет в то место, где стоит курсор
3. Обычно перемещается ближе к верхнему левому углу (хотя и говорят что по всему элементу должно)
4. Никто не мешает самому потом "додвинуть" мышку куда надо и после этого кликнуть.
 
  • Спасибо
Реакции: ukrainec2014

Семен12

Client
Регистрация
22.07.2019
Сообщения
51
Благодарностей
12
Баллы
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
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
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
 
  • Спасибо
Реакции: SHILY и Семен12

Семен12

Client
Регистрация
22.07.2019
Сообщения
51
Благодарностей
12
Баллы
8
а какие еще есть условия ввода текста? ну всмысле значения,как middle и none
Вручную как-то это можно редактировать? паузы там проставлять,либо стереть\дописать символ с задержкой
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
а какие еще есть условия ввода текста? ну всмысле значения,как middle и none
Вручную как-то это можно редактировать? паузы там проставлять,либо стереть\дописать символ с задержкой
"None", "Middle", "Full" или " Super Emulation"

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

Вот в этой ветке глянь
 
  • Спасибо
Реакции: Семен12

daymos

Client
Регистрация
11.11.2009
Сообщения
807
Благодарностей
241
Баллы
43
Добрый день. Есть задача осуществлять серию кликов по одному елементу. Скорость кликов в цикле очень медленная. Вроде 1-2 клика в секунду. Минимальный тип эмуляции: Middle. Ondoubleclick не работает. Эмуляция задержек на минимуме. Подскажите что делать? Надо прям отстучать ЛКП по элементу.
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 950
Благодарностей
774
Баллы
113
Добрый день. Есть задача осуществлять серию кликов по одному елементу. Скорость кликов в цикле очень медленная. Вроде 1-2 клика в секунду. Минимальный тип эмуляции: Middle. Ondoubleclick не работает. Эмуляция задержек на минимуме. Подскажите что делать? Надо прям отстучать ЛКП по элементу.
Можно же просто эвенты слать. Там скорость сильно выше можно сделать.
Полная эмуляция принципиальная?
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
68
Баллы
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");}
 
  • Спасибо
Реакции: daymos и SHILY

zlodey

Client
Регистрация
24.04.2011
Сообщения
135
Благодарностей
9
Баллы
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
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
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
Регистрация
24.06.2016
Сообщения
487
Благодарностей
74
Баллы
28
Может в следующей статье напишешь полноценный шаблон где можно имитировать действия человека на любом сайте в течении 5-10 минут? по сути система сайтом у всех одинаковые, Чтобы можно было углубиться в категории под категории пролистать все, левые движения мышкой и тп...
 

prodox

Client
Регистрация
28.08.2018
Сообщения
280
Благодарностей
55
Баллы
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 ЧЕРЕЗ КОСТЫЛИ ТЕСТИРУЮТ
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
годы летят, а prodox все так же возмущается :bk:
вместо того что бы молча уйти на софт конкурента, где все отлично работает без костылей.... как там говорят... мыши если кактус, кололись, плакали, но продолжают его жрать *HAHA*
 

prodox

Client
Регистрация
28.08.2018
Сообщения
280
Благодарностей
55
Баллы
28
Довольно интересно как это работает. написание метода идентично, а в зависимости от параметров работает по разному. Если передаешь Элемент. то это прокрутка к элементу. Если числа, то на дельту
 

Вложения

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Довольно интересно как это работает. написание метода идентично, а в зависимости от параметров работает по разному. Если передаешь Элемент. то это прокрутка к элементу. Если числа, то на дельту
 

olek2765

Client
Регистрация
28.12.2018
Сообщения
10
Благодарностей
0
Баллы
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
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
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, нельзя менять размер страницы, потому что элементы изменят свои координаты!
 
  • Спасибо
Реакции: olek2765

mrstorm

Client
Регистрация
16.04.2015
Сообщения
205
Благодарностей
14
Баллы
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
Регистрация
27.11.2017
Сообщения
331
Благодарностей
243
Баллы
43
Y +=200;
 

mrstorm

Client
Регистрация
16.04.2015
Сообщения
205
Благодарностей
14
Баллы
18

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Спасибо, но это лишь приводит к тому, что прокручивается на большее кол-во строк. Но сама скорость прокрутки - очень медленная.
Посмотрите данные методы
.FullEmulationMouseSetScrollBorder()
.FullEmulationMouseSetOptions()
 

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