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

  • Спасибо
Реакции: SenSS
хм, смотрю изменение опций скорости на колесико не влияет.

и смотрю для колесика есть еще и вторая функция
instance.ActiveTab.MouseWheel(100, 200, 0, 1000, false);

Код:
Развернуть Свернуть Копировать
Random Random = new Random();
int r = Random.Next(200, 500);
System.Threading.Thread.Sleep(3000);
instance.ActiveTab.FullEmulationMouseSetOptions(50,20,200);
instance.ActiveTab.FullEmulationMouseWheel(0,r);
System.Threading.Thread.Sleep(1000);

ты как нить решил эту проблему?
 
Всем привет, замучался разбираться с этой эмуляцией мыши. Разумеется без вашей помощи зайду в тупик. По этой причине прошу ответить на несколько вопросов
1) Где можно ознакомиться с функциями с примерами и подробным описанием. Особенно интересует список функций который вылезает автоматически
на данный момент интересует функция
var rnd = new Random();
var post = posts.GetByNumber( rnd.Next(0,posts.Count) ; ЗДЕСЬ ИНТЕРЕСУЕТ АРГУМЕНТ, ЧТО ОН ДЕЛАЕТ
var h2 = post.FindChildByXPath(".//h3",0); ЧТО в скобочках делается

2) Подробно разбирал пример 1-ой программы, снипита или скрипта, запутался в этой терминологии. Подробно разобрал пример и решил его продублировать на mail.ru, там видь то же имеются статьи и самое главное это нужно изменить тэги, атрибуты и значение в переменной posts. Сложность в том, что программа выполняется без ошибок, а эмуляции мыши не видно. Внизу описал мое видение программы, но чувствую, где то ошибка

Благодаря этой функции определяем элементы по которым должна пройтись мышь
var posts = instance.ActiveTab.FindElementsByAttribute("div", "class", "news-item__inner", "regext");

Затем определяем конкретный элемент
var post = posts.GetByNumber(3);

Делее просто копирую из 1-ой программы

//Ведём мышку к этому посту РАЗБЕРИСЬ С ЭТИМИ ЦИФРАМИ 4
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(post);
//Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h3",0);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
 
Tab tab1 = instance.ActiveTab;
tab1.Navigate("http://mail.ru/");
if (tab1.IsBusy) tab1.WaitDownloading();
var posts = instance.ActiveTab.FindElementsByAttribute("div", "class", "news-item__inner", "regext");// 1-ый вариант поиска
//var posts = instance.ActiveTab.FindElementsByAttribute("a", "name", "n", "regext");// 2-ой вариант поиска
//Получаем рандомный пост на странице
var rnd = new Random();
//// Находим нужные посты т.е все
var post = posts.GetByNumber(3);// rnd.Next(0,posts.Count) если в Next(5) то опусакается не до конца. Я думаю что num вместо цифры,но нужно проверить
//Ведём мышку к этому посту РАЗБЕРИСЬ С ЭТИМИ ЦИФРАМИ 4
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(post);
//Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h3",0);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
 
  • Спасибо
Реакции: xDESTROYx
Где можно ознакомиться с функциями с примерами и подробным описанием.
Например, в документации по управлению из кода: https://help.zennolab.com/en/v5/zennoposter/5.17.0.0/webframe.html#topic1.html
Жмём снизу на вкладку "Search", ищем нужное название, переходим по ссылке:

2018-05-26_21-22-35.png

Особенно интересует список функций который вылезает автоматически
на данный момент интересует функция
var rnd = new Random();
var post = posts.GetByNumber( rnd.Next(0,posts.Count) ; ЗДЕСЬ ИНТЕРЕСУЕТ АРГУМЕНТ, ЧТО ОН ДЕЛАЕТ
GetByNumber - получить пост по номеру.
rnd.Next(0, posts.Count) - взять случайное число в диапазоне от нуля до posts.Count. posts.Count равно количеству постов (элементов в коллекции "post").
var h2 = post.FindChildByXPath(".//h3",0); ЧТО в скобочках делается
post.FindChildByXPath - поиск элемента, который является потомком (вложенным) элемента "post".
".//h3" - путь XPath к элементу-потомку. По XPath на форуме есть хорошая статья.
0 - номер элемента, если по XPath их нашлось несколько. Нумерация с нуля, поэтому 0 означает первый элемент.
2) Подробно разбирал пример 1-ой программы, снипита или скрипта, запутался в этой терминологии. Подробно разобрал пример и решил его продублировать на mail.ru, там видь то же имеются статьи и самое главное это нужно изменить тэги, атрибуты и значение в переменной posts. Сложность в том, что программа выполняется без ошибок, а эмуляции мыши не видно. Внизу описал мое видение программы, но чувствую, где то ошибка

Благодаря этой функции определяем элементы по которым должна пройтись мышь
var posts = instance.ActiveTab.FindElementsByAttribute("div", "class", "news-item__inner", "regext");
Верно, ошибка - банальная опечатка, "regext" вместо "regexp".
//Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h3",0);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
В Вашем случае лучше заменить на:
C#:
Развернуть Свернуть Копировать
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(post, 30);
Так как потомка с тегом "h3" у заголовков со страницы mail нет.
 
Например, в документации по управлению из кода: https://help.zennolab.com/en/v5/zennoposter/5.17.0.0/webframe.html#topic1.html
Жмём снизу на вкладку "Search", ищем нужное название, переходим по ссылке:
Спасибо большое за столь подробный ответ, подскажите при помощи данной функции по эмуляции мыши можно безопаснее ( без бана) работать в Однокласниках, ВКонтакте и т.д
 
при помощи данной функции по эмуляции мыши можно безопаснее ( без бана) работать в Однокласниках, ВКонтакте и т.д
Конкретно про эти сети лично мне сказать особо нечего, так как сравнительно мало с ними работал (хотя, судя по форумам, там только так гоняют даже самые примитивные боты). Однако, на ряде сайтов и сервисов это реально помогает. Как правило, это либо крупные сервисы типа гугла, яндекса, аналитических систем, которые отслеживают движения мыши и подобные вещи, либо маленькие ресурсы, чьи админы могут периодически смотреть тот же вебвизор.
На мой взгляд, мыши FullEmulationMouse и профилей Zenno из 5.17.2+ вполне хватает для полноценной эмуляции действий и браузера реального человека в 99% случаев.
Другое дело, что тенденция сейчас немного в другую сторону смещается, более высокий вес имеет история и связанные с ней вещи.
 
Конкретно про эти сети лично мне сказать особо нечего, так как сравнительно мало с ними работал (хотя, судя по форумам, там только так гоняют даже самые примитивные боты). Однако, на ряде сайтов и сервисов это реально помогает. Как правило, это либо крупные сервисы типа гугла, яндекса, аналитических систем, которые отслеживают движения мыши и подобные вещи, либо маленькие ресурсы, чьи админы могут периодически смотреть тот же вебвизор.
На мой взгляд, мыши FullEmulationMouse и профилей Zenno из 5.17.2+ вполне хватает для полноценной эмуляции действий и браузера реального человека в 99% случаев.
Другое дело, что тенденция сейчас немного в другую сторону смещается, более высокий вес имеет история и связанные с ней вещи.

Подскажите как можно наводить мышь на нужный элемент и производить клики ( одинарный или двойной клик левая, правая кнопка).
 
Подскажите как можно наводить мышь на нужный элемент и производить клики ( одинарный или двойной клик левая, правая кнопка).
И в теме, и ваших постах есть примеры.
Пример наведения:
C#:
Развернуть Свернуть Копировать
var tab = instance.ActiveTab;
//Ищем элемент
var div = tab.FindElementByAttribute("a", "innertext", "USD", "text", 0);
//Наводим на него мышку
tab.FullEmulationMouseMoveToHtmlElement(div);
Одинарный клик левой:
C#:
Развернуть Свернуть Копировать
tab.FullEmulationMouseClick("left", "click");
Двойной клик левой:
C#:
Развернуть Свернуть Копировать
tab.FullEmulationMouseClick("left", "click");
tab.FullEmulationMouseClick("left", "click");
Одинарный клик правой:
C#:
Развернуть Свернуть Копировать
tab.FullEmulationMouseClick("right", "click");
 
  • Спасибо
Реакции: phoenixs
И в теме, и ваших постах есть примеры.
Пример наведения:

Иногда не срабатывают данные варианты. То есть указываешь навести мышь и кликнуть на 1-н объект, но иногда кликаются соседние элементы. Как это можно исправить

К примеру я в Однокласниках нужно с начала зайти в Оповещение. Кстати в Оповещении нужно закрыть всплывающее окно т.е нажать на крестик, мышь наводиться но нажимает на поле, которое рядом находится т.е промазывает, хотя в Конструкторе действий все хорошо срабатывает. После того как зашел в Оповещение, нужно навести мышь на Однокласники и кликнуть, и здесь опять мышь иногда промазывает т.е кликает по полю которое рядом находится. Как данные ошибки можно избежать
 
Как раз то что нужно
 
  • Спасибо
Реакции: LaGir
Подскажите как увеличить точность данной эмуляции, потому что бывает, что задаешь 1-н элемент( поле логин), а мышка может навестись на соседний элемент и соответственно шаблон не сработает
 
  • Спасибо
Реакции: orka13
Подскажите как увеличить точность данной эмуляции, потому что бывает, что задаешь 1-н элемент( поле логин), а мышка может навестись на соседний элемент и соответственно шаблон не сработает
Можно вычислять координаты середины нужного элемента, вести мышь к этим координатам, затем кликать.
Лично я кривые клики встречал только в некоторых выпадающих списках, там надо дополнительно шаманить/костылить.

Можно также пользоваться обычным кликом (el.Click()) после наведения, клик будет точно верным. Чисто по моим наблюдениям и опыту, сайтам всё равно, каким способом делается клик. И вряд ли это изменится, так как тенденция отслеживания ботов идёт в другую сторону (см. третью рекапчу).
 
  • Спасибо
Реакции: orka13
сорри, можете подсказать как тянуть мышь не до xpath, а до тэга html, к примеру:

HTML:
Развернуть Свернуть Копировать
<span class="star-item " data-pos="5">

наведение и клик желателен

Код:
Развернуть Свернуть Копировать
//Находим элемент кнопки
var elButton = instance.ActiveTab.FindElementsByAttribute ("a", "href", "albums", "regexp");
//Определяем, на каком расстоянии от верха страницы находится кнопка
int topInBrowser = int.Parse(elButton.GetAttribute("topInBrowser"));
//Делаем прокрутку на это расстояние
instance.ActiveTab.FullEmulationMouseWheel(0, topInBrowser);
//Ведём курсор мышки к кнопке
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(elButton);
//Кликаем
instance.ActiveTab.FullEmulationMouseClick("left", "click");

как подставить сюда клик именно на
HTML:
Развернуть Свернуть Копировать
data-post="5"
 
сорри, можете подсказать как тянуть мышь не до xpath, а до тэга html, к примеру:
Заменить первую строчку, остальное есть:
C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-post", "5", "text", 0);

Добавлю, что поиск XPath и поиск по атрибутам - 2 способа найти элемент (тэг html с набором атрибутов), поэтому выражение "тянуть не до xpath, а до тэга" звучит как "вбить надо не молоток, а гвоздь".
Соответственно, тот элемент ничего не мешает искать по XPath:
C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByXPath("//span[@data-post='5']", 0);
 
  • Спасибо
Реакции: datway1337 и Koqpe
Заменить первую строчку, остальное есть:
C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-post", "5", "text", 0);

а как правильно вставить значение из переменной?

C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-pos", "5", "text", 0);

Вместо "5" будет цифра из входных настроек, я только не знаю как нормально вставить это значение внутрь. через {-Variable.ocenkaotziva-} работает, но ругается, что нельзя юзать макросы в коде C#
 
а как правильно вставить значение из переменной?

C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-pos", "5", "text", 0);

Вместо "5" будет цифра из входных настроек, я только не знаю как нормально вставить это значение внутрь. через {-Variable.ocenkaotziva-} работает, но ругается, что нельзя юзать макросы в коде C#
удаляешь "5" (вместе с кавычками), и на том месте клик правой кнопкой мыши. Та внизу выбери нужную переменную
 
  • Спасибо
Реакции: datway1337
удаляешь "5" (вместе с кавычками), и на том месте клик правой кнопкой мыши. Та внизу выбери нужную переменную

а сюда как? сорри за тупость, я не шарю))) так же вместо '5'
C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByXPath("//span[@data-pos='5']", 0);
 
а сюда как? сорри за тупость, я не шарю))) так же вместо '5'
C#:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByXPath("//span[@data-pos='5']", 0);
нет
Код:
Развернуть Свернуть Копировать
var elButton = instance.ActiveTab.FindElementByXPath("//span[@data-pos='"+project.Variables["имя_переменной"].Value+"']", 0);
 
  • Спасибо
Реакции: datway1337
Как насчет нового класса скроллинга?)
 
Подскажите что не так
instance.ActiveTab.FullEmulationMouseWheel(0,Convert.ToInt32(project.Variables["kolmushi"].Value));

пока сделал в виде
//Делаем прокрутку на 500 пикселей ВНИЗ (по y)
instance.ActiveTab.FullEmulationMouseWheel(0,{-Random.Int-|-1000-|-4500-});
 
Подскажите что не так
instance.ActiveTab.FullEmulationMouseWheel(0,Convert.ToInt32(project.Variables["kolmushi"].Value));
Если в переменной "kolmushi" число, без лишних символов и пробелов, то должно работать.
пока сделал в виде
//Делаем прокрутку на 500 пикселей ВНИЗ (по y)
instance.ActiveTab.FullEmulationMouseWheel(0,{-Random.Int-|-1000-|-4500-});
А вот это удивительно что вообще запускается и работает) Макросы проекта не для экшенов C#-кода, лучше их не использовать. Аналог этой строчки без макроса:
C#:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseWheel(0, Global.Classes.rnd.Next(1000, 4500));
 
  • Спасибо
Реакции: Vass
Можно вычислять координаты середины нужного элемента, вести мышь к этим координатам, затем кликать.
Лично я кривые клики встречал только в некоторых выпадающих списках, там надо дополнительно шаманить/костылить.

Можно также пользоваться обычным кликом (el.Click()) после наведения, клик будет точно верным. Чисто по моим наблюдениям и опыту, сайтам всё равно, каким способом делается клик. И вряд ли это изменится, так как тенденция отслеживания ботов идёт в другую сторону (см. третью рекапчу).
Пробую как раз внедрить фишки этой статьи в простенький шаблон для безобидного гуляния по сайтам, и сталкиваюсь с такими минусами «el.Click()»:
«el.Click()» почти всегда кликнет по нужному элементу, в то время как «instance.ActiveTab.FullEmulationMouseClick("left", "click");» любит делать «холостой клик» в пустоте. Но если быть дотошным, то первый намного палевнее. Так как он кликнет по элементу, даже если тот спрятан под другими элементами на странице (раскрывающиеся меню и т.д.).

Особенно палевно когда можно кликнуть на «ссылку-ловушку»:
Это когда сайты для отлова ботов оставляют на странице ссылки, спрятанные CSS-стилями или вынесены координатами за пределы страницы браузера так, чтобы реальный пользователь их не видел и не мог кликнуть. А все IP-адреса, с которых был совершён клик или GET-запрос по этой ссылке (понятно, что не живыми людьми) автоматом помечаются как "Боты".
 
el - после проверки через IsVoid не может быть палевным.
Может. Эта проверка только показывает есть ли елемент в коде страницы. Но на самой странице визуально он может не отображаться, даже если проверка дает положительный результат.
Для подтверждения моих слов залейте на хостинг себе тестовую страницу со скрытой ссылкой:
HTML:
Развернуть Свернуть Копировать
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Test page</title>
</head>
<body>
<h1>Test page H1</h1>
<a id="1" href="https://www.google.com/">test link normal</a>
<a id="2" style="display: none" href="https://zennolab.com/discussion/threads/snippety-ehmuljacii-myshi-fullemulationmouse.35369/page-2">test link invisible</a>
</body>
</html>
А потом перейдите на нее в проджектмейкере и выполните эти два разные кода:
C#:
Развернуть Свернуть Копировать
HtmlElement el = instance.ActiveTab.FindElementByXPath("//a[@id='2']", 0);
if (el == null)
{
    return "нет подходящих элементов в коде";
}
if (el.IsVoid)
{
    return "нет подходящих елементов в коде";
}

//поскольку визуально элемента нет на странице, зенка поведет курсор в нулевые координаты (левый верхний угол страницы) и там кликнет.
//Если в том месте не будет других ссылок, то клик получится безобидным (холостым), и шаблон никуда не перейдет.
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(el);
instance.ActiveTab.FullEmulationMouseClick("left", "click");

C#:
Развернуть Свернуть Копировать
HtmlElement el = instance.ActiveTab.FindElementByXPath("//a[@id='2']", 0);
if (el == null)
{
    return "нет подходящих елементов в коде";
}
if (el.IsVoid)
{
    return "нет подходящих элементов в коде";
}

//а здесь кликнет в любом случае по ссылке и совершит переход на форум zennolab.com...:
el.Click();

Я пробовал еще подключать проверку на высоту элемента, но в моей ситуации такое тоже не дает гарантированного результата.

UPD: подправил последний код, а то он дублировал первый.

UPD2: вот тот вариант с проверкой на высоту, обычно помогает отсеять невидимые элементы:
C#:
Развернуть Свернуть Копировать
var el = instance.ActiveTab.FindElementByXPath("//a[@id='2']", 0);
if (el == null)
{
    return "нет подходящих елементов в коде";
}
if (el.IsVoid)
{
    return "нет подходящих елементов в коде";
}

string height_el = el.GetAttribute("height");
int he_height = Int32.Parse(height_el);

//кликаем только если элемент имеет высоту больше 0:
if (he_height>0)
{
    el.Click();
}
 
Последнее редактирование:
  • Спасибо
Реакции: orka13

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