Juniorcpa
Client
- Регистрация
- 27.05.2014
- Сообщения
- 2 031
- Благодарностей
- 1 286
- Баллы
- 113
Вроде нето, как раз начал разбираться с эмуляцией) с новой версией ничего не изменилось по "очеловечиванию" движения мышки?
Вроде нето, как раз начал разбираться с эмуляцией) с новой версией ничего не изменилось по "очеловечиванию" движения мышки?
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);
Например, в документации по управлению из кода: https://help.zennolab.com/en/v5/zennoposter/5.17.0.0/webframe.html#topic1.htmlГде можно ознакомиться с функциями с примерами и подробным описанием.
GetByNumber - получить пост по номеру.Особенно интересует список функций который вылезает автоматически
на данный момент интересует функция
var rnd = new Random();
var post = posts.GetByNumber( rnd.Next(0,posts.Count) ; ЗДЕСЬ ИНТЕРЕСУЕТ АРГУМЕНТ, ЧТО ОН ДЕЛАЕТ
post.FindChildByXPath - поиск элемента, который является потомком (вложенным) элемента "post".var h2 = post.FindChildByXPath(".//h3",0); ЧТО в скобочках делается
Верно, ошибка - банальная опечатка, "regext" вместо "regexp".2) Подробно разбирал пример 1-ой программы, снипита или скрипта, запутался в этой терминологии. Подробно разобрал пример и решил его продублировать на mail.ru, там видь то же имеются статьи и самое главное это нужно изменить тэги, атрибуты и значение в переменной posts. Сложность в том, что программа выполняется без ошибок, а эмуляции мыши не видно. Внизу описал мое видение программы, но чувствую, где то ошибка
Благодаря этой функции определяем элементы по которым должна пройтись мышь
var posts = instance.ActiveTab.FindElementsByAttribute("div", "class", "news-item__inner", "regext");
В Вашем случае лучше заменить на://Ищем заголовок поста
var h2 = post.FindChildByXPath(".//h3",0);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(h2, 30);
//Проводим мышкой по заголовку
tab1.FullEmulationMouseMoveAboveHtmlElement(post, 30);
Спасибо большое за столь подробный ответ, подскажите при помощи данной функции по эмуляции мыши можно безопаснее ( без бана) работать в Однокласниках, ВКонтакте и т.дНапример, в документации по управлению из кода: https://help.zennolab.com/en/v5/zennoposter/5.17.0.0/webframe.html#topic1.html
Жмём снизу на вкладку "Search", ищем нужное название, переходим по ссылке:
Конкретно про эти сети лично мне сказать особо нечего, так как сравнительно мало с ними работал (хотя, судя по форумам, там только так гоняют даже самые примитивные боты). Однако, на ряде сайтов и сервисов это реально помогает. Как правило, это либо крупные сервисы типа гугла, яндекса, аналитических систем, которые отслеживают движения мыши и подобные вещи, либо маленькие ресурсы, чьи админы могут периодически смотреть тот же вебвизор.при помощи данной функции по эмуляции мыши можно безопаснее ( без бана) работать в Однокласниках, ВКонтакте и т.д
Подскажите как можно наводить мышь на нужный элемент и производить клики ( одинарный или двойной клик левая, правая кнопка).Конкретно про эти сети лично мне сказать особо нечего, так как сравнительно мало с ними работал (хотя, судя по форумам, там только так гоняют даже самые примитивные боты). Однако, на ряде сайтов и сервисов это реально помогает. Как правило, это либо крупные сервисы типа гугла, яндекса, аналитических систем, которые отслеживают движения мыши и подобные вещи, либо маленькие ресурсы, чьи админы могут периодически смотреть тот же вебвизор.
На мой взгляд, мыши FullEmulationMouse и профилей Zenno из 5.17.2+ вполне хватает для полноценной эмуляции действий и браузера реального человека в 99% случаев.
Другое дело, что тенденция сейчас немного в другую сторону смещается, более высокий вес имеет история и связанные с ней вещи.
И в теме, и ваших постах есть примеры.Подскажите как можно наводить мышь на нужный элемент и производить клики ( одинарный или двойной клик левая, правая кнопка).
var tab = instance.ActiveTab;
//Ищем элемент
var div = tab.FindElementByAttribute("a", "innertext", "USD", "text", 0);
//Наводим на него мышку
tab.FullEmulationMouseMoveToHtmlElement(div);
tab.FullEmulationMouseClick("left", "click");
tab.FullEmulationMouseClick("left", "click");
tab.FullEmulationMouseClick("left", "click");
tab.FullEmulationMouseClick("right", "click");
Иногда не срабатывают данные варианты. То есть указываешь навести мышь и кликнуть на 1-н объект, но иногда кликаются соседние элементы. Как это можно исправитьИ в теме, и ваших постах есть примеры.
Пример наведения:
Можно вычислять координаты середины нужного элемента, вести мышь к этим координатам, затем кликать.Подскажите как увеличить точность данной эмуляции, потому что бывает, что задаешь 1-н элемент( поле логин), а мышка может навестись на соседний элемент и соответственно шаблон не сработает
Можете пример привестиМожно также пользоваться обычным кликом (el.Click())
Где с этим можно ознакомитсятенденция отслеживания ботов идёт в другую сторону (см. третью рекапчу).
<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");
data-post="5"
Заменить первую строчку, остальное есть:сорри, можете подсказать как тянуть мышь не до xpath, а до тэга html, к примеру:
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-post", "5", "text", 0);
var elButton = instance.ActiveTab.FindElementByXPath("//span[@data-post='5']", 0);
а как правильно вставить значение из переменной?Заменить первую строчку, остальное есть:
C#:var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-post", "5", "text", 0);
var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-pos", "5", "text", 0);
удаляешь "5" (вместе с кавычками), и на том месте клик правой кнопкой мыши. Та внизу выбери нужную переменнуюа как правильно вставить значение из переменной?
Вместо "5" будет цифра из входных настроек, я только не знаю как нормально вставить это значение внутрь. через {-Variable.ocenkaotziva-} работает, но ругается, что нельзя юзать макросы в коде C#C#:var elButton = instance.ActiveTab.FindElementByAttribute("span", "data-pos", "5", "text", 0);
а сюда как? сорри за тупость, я не шарю))) так же вместо '5'удаляешь "5" (вместе с кавычками), и на том месте клик правой кнопкой мыши. Та внизу выбери нужную переменную
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);
Отпишусь про новый метод везде где нужно, как только более-менее разгружусь)Как насчет нового класса скроллинга?)
Если в переменной "kolmushi" число, без лишних символов и пробелов, то должно работать.Подскажите что не так
instance.ActiveTab.FullEmulationMouseWheel(0,Convert.ToInt32(project.Variables["kolmushi"].Value));
А вот это удивительно что вообще запускается и работает) Макросы проекта не для экшенов C#-кода, лучше их не использовать. Аналог этой строчки без макроса:пока сделал в виде
//Делаем прокрутку на 500 пикселей ВНИЗ (по y)
instance.ActiveTab.FullEmulationMouseWheel(0,{-Random.Int-|-1000-|-4500-});
instance.ActiveTab.FullEmulationMouseWheel(0, Global.Classes.rnd.Next(1000, 4500));
А я всё ждуОтпишусь про новый метод везде где нужно, как только более-менее разгружусь)
Пробую как раз внедрить фишки этой статьи в простенький шаблон для безобидного гуляния по сайтам, и сталкиваюсь с такими минусами «el.Click()»:Можно вычислять координаты середины нужного элемента, вести мышь к этим координатам, затем кликать.
Лично я кривые клики встречал только в некоторых выпадающих списках, там надо дополнительно шаманить/костылить.
Можно также пользоваться обычным кликом (el.Click()) после наведения, клик будет точно верным. Чисто по моим наблюдениям и опыту, сайтам всё равно, каким способом делается клик. И вряд ли это изменится, так как тенденция отслеживания ботов идёт в другую сторону (см. третью рекапчу).
el - после проверки через IsVoid не может быть палевным.«el.Click()»
Может. Эта проверка только показывает есть ли елемент в коде страницы. Но на самой странице визуально он может не отображаться, даже если проверка дает положительный результат.el - после проверки через IsVoid не может быть палевным.
<!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>
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");
HtmlElement el = instance.ActiveTab.FindElementByXPath("//a[@id='2']", 0);
if (el == null)
{
return "нет подходящих елементов в коде";
}
if (el.IsVoid)
{
return "нет подходящих элементов в коде";
}
//а здесь кликнет в любом случае по ссылке и совершит переход на форум zennolab.com...:
el.Click();
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();
}