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

Каким образом можно настроить исключение, чтобы не кликало на рекламу. Просто иногда когда по хпатч присходит клик скрипт отрабатывает и может кликнуть рекламу. а этого нам не надо
В своем нагульщике по обычным сайтам использую такое, чтобы на гугл-рекламу не кликать.
C#:
Развернуть Свернуть Копировать
HtmlElementCollection Coll = tab1.FindElementsByXPath("//*[@href][not(contains(@href, 'google')) and not(contains(@href, 'ad'))]");
Но под другие популярные рекламные блоки (Яндекса и т.д.) надо больше условий добавить:
C#:
Развернуть Свернуть Копировать
HtmlElementCollection Coll = tab1.FindElementsByXPath("//*[@href][not(contains(@href, 'google')) and not(contains(@href, 'ad')) and not(contains(@href, 'yandex'))]");
и т.д.
 
Последнее редактирование:
  • Спасибо
Реакции: Astraport
В своем нагульщике по обычным сайтам использую такое, чтобы на гугл-рекламу не кликать.
C#:
Развернуть Свернуть Копировать
HtmlElementCollection Coll = tab1.FindElementsByXPath("//*[@href][not(contains(@href, 'google')) and not(contains(@href, 'ad'))]");
Но под другие популярные рекламные блоки (Яндекса и т.д.) надо больше условий добавить:
C#:
Развернуть Свернуть Копировать
HtmlElementCollection Coll = tab1.FindElementsByXPath("//*[@href][not(contains(@href, 'google')) and not(contains(@href, 'ad')) and not(contains(@href, 'yandex'))]");
и т.д.

Куда это можно тут прописать чтобы заработало не могу понять

C#:
Развернуть Свернуть Копировать
//Если при чтении не переходили на другую страницу
    if (isLinkClicked == false)
    {
        //Находим все элементы, содержащие ссылки
        var colLinks = tab.FindElementsByXPath("//a");
        //Вычленяем только видимые на странице ссылки
        colResult = tab.FindElementsByXPath("//sngvuyrbuy");
        if (colLinks.Count>0)
        {
            foreach (var el in colLinks.Elements)
            {
                int topInBrowser = int.Parse(el.GetAttribute("topInBrowser"));
                int leftInBrowser = int.Parse(el.GetAttribute("leftInBrowser"));
                if (el.Height>0 && el.Width>0 && topInBrowser>=0 && leftInBrowser>=0)
                {
                    colResult.Add(el);
                }
            }
        }
        colLinks = colResult;
        //Проверка наличия ссылок
        if (colLinks.Count<1)
        {
            project.SendWarningToLog("Видимых ссылок на странице не найдено! "+tab.URL, true);
            project.SendInfoToLog("Завершили гуляние по страницам. Количество прочитанных страниц: "+(p+1), true);
            return "ok";
        }
        
        //Ведём мышку к случайному элементу со ссылкой
        var elLink = colLinks.Elements[rnd.Next(colLinks.Elements.Length)];
        tab.FullEmulationMouseMoveToHtmlElement(elLink);
        Thread.Sleep(rnd.Next(4,8)*1000);
        tab.FullEmulationMouseClick("left", "click");
        if (tab.IsBusy)    tab.WaitDownloading();
        Thread.Sleep(rnd.Next(time_min, time_max)*1000);
    }
 
вместо:
C#:
Развернуть Свернуть Копировать
"//a"
Вставить:
C#:
Развернуть Свернуть Копировать
"//a[@href][not(contains(@href, 'google')) and not(contains(@href, 'ad')) and not(contains(@href, 'yandex'))]"
 
  • Спасибо
Реакции: Fedor5588
Подскажите как исправить следующий глюк, перед тем как кликунть на нужный элемент, страница проматываеться до самого низа и это занимает пару минут
 
Подскажите как исправить следующий глюк, перед тем как кликунть на нужный элемент, страница проматываеться до самого низа и это занимает пару минут
зачем один и тот же вопрос в разных темах дублировать ?
вам же уже ответили, уменьшаете уровень эмуляции в проекте или в конкретном кубике. при высоком уровне эмуляции крыса всегда будет кликать только по видимому элементу, а если элемент внизу то будет автоматический скрол.
и еще вот я написал, если вдруг пропустили *HAHA*
 
а еще я расчехлил свой хрустальный шар для вангования и мне было видение (а куда деваться если информации ноль).
а не эту ли проблему вы нам щас описываете так подробно и красочно аж в двух темах ?
 
Гуглим: получить координаты элемента site:zennolab.com
И потом подставляем координаты элемента к нашим точкам:
C#:
Развернуть Свернуть Копировать
//ищем наш элдемент по XPath:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//p", 0);
//его координаты подставляем в наши координаты первой точки в массиве
int x = Elemetik.DisplacementInTabWindow.X;
int y = Elemetik.DisplacementInTabWindow.Y;
Random rnd = new Random();
// указываем количество точек
int Kolichestvo_Tochek = 33;
// обьявляем массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[Kolichestvo_Tochek];
// в цикле заполняем наш масив
for (int i = 0; i<Kolichestvo_Tochek; i++)
{
    // если координаты выходят за пределы страницы (минусовые), то водим не доходя до края (меняем на "чуть плюсовые").
    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); // выводим в лог координаты
    // указываем рандомные пределы для сдвига курсора в пикселях для следующего круга цикла:
    x += rnd.Next(-64,64);
    y += rnd.Next(-64,64);
}
// в цикле двигаем курсором между точками, но обрабатываем массив координат уже с конца:
for (int i = Kolichestvo_Tochek-1; i>=0; 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);
}
//на всякий пожарный подводим к елементу курсор более рандомно, а то оно только к его крайней левой точке по координатам подводит:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(Elemetik);
// и кликаем в этом месте:
instance.ActiveTab.FullEmulationMouseClick("left", "click");


Добрый день. Есть вот такой код (код ниже, код взят из вашего примера). Он введет мышку до определенного текста на странице. Мне нужно как то в этом коде сделать паузы рандомные (в пределах например от 1 от 2 секунд) между каждым движением мыши ( при переходе между точками ). Чтобы например получалось чтобы мышка доходила до нужного текста за 40-50 секунд например. Нашел у вас вот такую строчку в другом посте
//Делаем случайную паузу от 0,5 до 3 секунд
Thread.Sleep(rnd.Next(4,30) * 100);
Но не знаю как ее вставить в код.
И еще такой вопрос ,почему то когда мышка ведется к тексту часто бывает что она проходит намного ниже нужного текста , потом возвращается наверх , а потом только спускается к нужному тексту и там останавливается, а хотелось бы чтобы она только до текста спускалась.




//ищем наш элдемент по XPath:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), 'Текст')]", 0);
//его координаты подставляем в наши координаты первой точки в массиве
int x = Elemetik.DisplacementInTabWindow.X;
int y = Elemetik.DisplacementInTabWindow.Y;
Random rnd = new Random();
// указываем количество точек
int Kolichestvo_Tochek = 20;
// обьявляем массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[Kolichestvo_Tochek];
// в цикле заполняем наш масив
for (int i = 0; i<Kolichestvo_Tochek; i++)
{
// если координаты выходят за пределы страницы (минусовые), то водим не доходя до края (меняем на "чуть плюсовые").
if (x < 0) {
x = rnd.Next(0,5);
}
if (y < 0) {
y = rnd.Next(0,5);
}
points = new Point(x, y);
project.SendInfoToLog(x.ToString() + " , " + y.ToString(), false); // выводим в лог координаты
// указываем рандомные пределы для сдвига курсора в пикселях для следующего круга цикла:
x += rnd.Next(-150,150);
y += rnd.Next(-500,500);
}
// в цикле двигаем курсором между точками, но обрабатываем массив координат уже с конца:
for (int i = Kolichestvo_Tochek-1; i>=0; 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);
}
//на всякий пожарный подводим к елементу курсор более рандомно, а то оно только к его крайней левой точке по координатам подводит:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(Elemetik);
// и кликаем в этом месте:
 
Добрый день. Есть вот такой код (код ниже, код взят из вашего примера). Он введет мышку до определенного текста на странице. Мне нужно как то в этом коде сделать паузы рандомные (в пределах например от 1 от 2 секунд) между каждым движением мыши ( при переходе между точками ). Чтобы например получалось чтобы мышка доходила до нужного текста за 40-50 секунд например. Нашел у вас вот такую строчку в другом посте
//Делаем случайную паузу от 0,5 до 3 секунд
Thread.Sleep(rnd.Next(4,30) * 100);
Но не знаю как ее вставить в код.
И еще такой вопрос ,почему то когда мышка ведется к тексту часто бывает что она проходит намного ниже нужного текста , потом возвращается наверх , а потом только спускается к нужному тексту и там останавливается, а хотелось бы чтобы она только до текста спускалась.
Увеличьте количество точек («Kolichestvo_Tochek»), и/или поиграйтесь с параметром пауз в «instance.ActiveTab.FullEmulationMouseSetOptions» (увеличьте «4,7» до «500,3000»).
А за лишние манипуляции с мышкой: я не особо спец в этой теме, но это вроде такая особенность (косяк) зенки, - при приближении курсора к краю она скролит страницу. Где-то был недавно топик об этом, может исправят, или фиксить как-то в коде (лучше ограничивая наведение курсора к краям).
UPD: нашел тот топик: Некорректное поведение мыши при включенной фул эмулятион в настройках проекта
 
Не ругайте сильно,
1. как скорость движения мышки увеличить в ZP 7, не теряя качества исполнения? Там просто полная эмуляция, но скорость движения не понимаю как увеличить? Она как обкуренная медленно так ходит.
2. И как в последних версиях просто поводить мышкой по экрану с полной эмуляцией
 
Последнее редактирование:
работает до первого сбоя в браузере. а они очень часто происходят.
вот так правильно
C#:
Развернуть Свернуть Копировать
if ((instance.ActiveTab.IsVoid) || (instance.ActiveTab.IsNull)) throw new Exception("Не найдено вкладки");
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", (project.Variables["site"].Value), "regexp", 0);//находим элемент по УРЛу
if (he.IsVoid) throw new Exception("Не найдено и т.д."); // их всегда надо проверять
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
Вот что нужно!
Как вставить Xpath //*[@id="uniq1589787450527697150"] такой из переменной?
 
получилось
if ((instance.ActiveTab.IsVoid) || (instance.ActiveTab.IsNull)) throw new Exception("Не найдено вкладки");
HtmlElement he = instance.ActiveTab.FindElementByAttribute("div", "id", project.Variables["Yandex_uniq"].Value, "text", 0);
//HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", (project.Variables["Site"].Value), "regexp", 0);//находим элемент по УРЛу
if (he.IsVoid) throw new Exception("Не найдено и т.д."); // их всегда надо проверять
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
 
  • Спасибо
Реакции: Valandersi
Это динамическое значение, нужно больше кусок чтобы что-то составить
У меня так получилось
(?<=<h2\ class="organic__title-wrapper).*?(?=data-counter=") - беру дом
C#:
Развернуть Свернуть Копировать
 typo typo_text_l typo_line_m" aria-labelledby="uniq1589807999892279784"><a class="link link_theme_normal organic__url link_cropped_no i-bem" data-bem="{&quot;link&quot;:{}}" rel="noopener" data-log-node="j6fzcw" target="_blank" tabindex="0" href="https://star-like.ru/services/website-development"

Получается
1589827029363.png
Удаляю рся yabs.yandex.ru, директ и яндекс услуги. и клик получается прямо в тайл, осталось мышка чтобы немного быстрее подводила, люди так не ведут медленно
 
Добрый день. Есть вот такой код (код ниже, код взят из вашего примера). Он введет мышку до определенного текста на странице. Мне нужно как то в этом коде сделать паузы рандомные (в пределах например от 1 от 2 секунд) между каждым движением мыши ( при переходе между точками ). Чтобы например получалось чтобы мышка доходила до нужного текста за 40-50 секунд например. Нашел у вас вот такую строчку в другом посте
//Делаем случайную паузу от 0,5 до 3 секунд
Thread.Sleep(rnd.Next(4,30) * 100);
Но не знаю как ее вставить в код.
И еще такой вопрос ,почему то когда мышка ведется к тексту часто бывает что она проходит намного ниже нужного текста , потом возвращается наверх , а потом только спускается к нужному тексту и там останавливается, а хотелось бы чтобы она только до текста спускалась.




//ищем наш элдемент по XPath:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), 'Текст')]", 0);
//его координаты подставляем в наши координаты первой точки в массиве
int x = Elemetik.DisplacementInTabWindow.X;
int y = Elemetik.DisplacementInTabWindow.Y;
Random rnd = new Random();
// указываем количество точек
int Kolichestvo_Tochek = 20;
// обьявляем массив точек, по которым будет двигаться курсор мыши
Point[] points = new Point[Kolichestvo_Tochek];
// в цикле заполняем наш масив
for (int i = 0; i<Kolichestvo_Tochek; i++)
{
// если координаты выходят за пределы страницы (минусовые), то водим не доходя до края (меняем на "чуть плюсовые").
if (x < 0) {
x = rnd.Next(0,5);
}
if (y < 0) {
y = rnd.Next(0,5);
}
points = new Point(x, y);
project.SendInfoToLog(x.ToString() + " , " + y.ToString(), false); // выводим в лог координаты
// указываем рандомные пределы для сдвига курсора в пикселях для следующего круга цикла:
x += rnd.Next(-150,150);
y += rnd.Next(-500,500);
}
// в цикле двигаем курсором между точками, но обрабатываем массив координат уже с конца:
for (int i = Kolichestvo_Tochek-1; i>=0; 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);
}
//на всякий пожарный подводим к елементу курсор более рандомно, а то оно только к его крайней левой точке по координатам подводит:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(Elemetik);
// и кликаем в этом месте:
Тут спорное решение. Потому что
1. Ехать по своим точкам функцией которая и так уже эмулирует "естественное" движение - это избыточность
2. Вызов функции FullEmulationMouseMove - довольно медленное занятие и скорее всего очень медленно мышка будет ездить, спотыкаясь на каждой точке
3. "Тряска" при движении и так уже реализована. Смотрите вебвизор на разных настройках движение мышки.
4. Так же лучше посмотреть вебвизор и проанализировать траектории. Дело вообще не в "тряске" чаще всего
5. Рикошет координат мышки от края экрана - в последней версии зенки там переделан механизм эмуляции. И ручная корректировка координат при движении - чаще всего только больше лишних дерганий и глюков добавляет.


p.s. Я бы такой код не пользовал
 
Как в сниппет вставить?
Такой код
//div[@id='uniq1590143420870312884' and contains(@class, 'organic__url-text')]
1590162189487.png
Клин хороший получился, осталось мышку подвести
C#:
Развернуть Свернуть Копировать
var rnd = new Random();

var tab = instance.ActiveTab;
//Ищем элемент
var div = tab.FindElementByAttribute("div", "id", project.Variables["Yandex_Uniq"].Value, "text", 0);
//Наводим на него мышку
tab.FullEmulationMouseMoveToHtmlElement(div);
 
Не дает редактировать предыдущий пост. Так правильно var div = tab.FindElementByXPath("//div[@id='uniq1590143420870312884' and contains(@class, 'organic__url-text')]", 0);
 
  • Спасибо
Реакции: Roman48
C#:
Развернуть Свернуть Копировать
'" + variable + "'

что-то типо того
 
Хорошее расширение, вообще огонь!
А перегружаемый код как ты будешь тут тестить?
Например код, который под логином, особенно когда ajax подгружается?

Прикол в том, что в зенке и в хроме одновременно вроде на одном и том же этапе будут разные html
 
И сразу ответ, в зено хроме встроен инструмент для разработчиков.
там просто нажимаешь ctl+F и тестируешь свои Xpath как и в расширении.
И не надо мучаться
 
И сразу ответ, в зено хроме встроен инструмент для разработчиков.
там просто нажимаешь ctl+F и тестируешь свои Xpath как и в расширении.
И не надо мучаться
Проблема в том что я хз как пользоваться
1590164034864.png
Подробно не написано, хоть бы статья вышла.
Как вставить переменную?
var rnd = new Random();

var tab = instance.ActiveTab;
//Ищем элемент
var div = tab.FindElementByXPath("//div[@id='project.Variables["Yandex_Uniq"].Value"and contains(@class, 'organic__url-text')]", 0);//Наводим на него мышку
tab.FullEmulationMouseMoveToHtmlElement(div);
 
Мы говорим на разном языке, я даже не понял что это такое, и куда вставить
а зачем лезть в c# не понимая там ничего ? есть же стандартный кубик, забил туда xpath и он кликает. всего навсего надо изучить составление xpath. ну этого добра в инете навалом. да и тут на форуме в конкурсных статьях полно написано и про xpath и про навигацию бота на странице.
 
а зачем лезть в c# не понимая там ничего ? есть же стандартный кубик, забил туда xpath и он кликает. всего навсего надо изучить составление xpath. ну этого добра в инете навалом. да и тут на форуме в конкурсных статьях полно написано и про xpath и про навигацию бота на странице.
Некоторые клики не устраивают, если нужный сайт находиться на первой позиции, мышкой пошарил, а потом она подводиться к сайту который на первой позиции, и может кликнуть на картинки, видео.

1590165332142.png
Думаю может по другому лучше будет
 
Некоторые клики не устраивают, если нужный сайт находиться на первой позиции, мышкой пошарил, а потом она подводиться к сайту который на первой позиции, и может кликнуть на картинки, видео.

Посмотреть вложение 56458
Думаю может по другому лучше будет
Не будет. Нужно сначала изучить xpath. Тогда не будешь составлять пути с таким id='uniq1590143420870312884' Нужно привязываться к чему-то стабильному. Поэтому дело не в кубиках и снипетах.
 
  • Спасибо
Реакции: orka13 и molotok
эти клики по шапке сайта , происходят не от того что используется кубик или снипет. это особенность верстки этого сайта. шапка закреплена и начинает перекрывать некоторые элементы.
тут просто так не получиться. тут либо надо находить элемент этой шапки и удалять из верстки, либо проверять куда крыса кликает и сравнивать с тем элементом на который хотим кликнуть. и если есть перекрытие то что то сделать, например проскролить выше страницу и идти на второй заход клика. тут нужны циклы , счетчики повторов, проверки элементов. наверно 1-й вариант проще все таки :)
 
  • Спасибо
Реакции: Roman48 и LaGir
эти клики по шапке сайта , происходят не от того что используется кубик или снипет. это особенность верстки этого сайта. шапка закреплена и начинает перекрывать некоторые элементы.
тут просто так не получиться. тут либо надо находить элемент этой шапки и удалять из верстки, либо проверять куда крыса кликает и сравнивать с тем элементом на который хотим кликнуть. и если есть перекрытие то что то сделать, например проскролить выше страницу и идти на второй заход клика. тут нужны циклы , счетчики повторов, проверки элементов. наверно 1-й вариант проще все таки :-)
Или убрать, полную эмуляцию мыши (максимальное качество) тогда такого нет.
Если отключаешь нормально, но не хотелось бы. Проскролить выше, вот что надо, но как это сделать
 

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