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

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Подскажите, а переменные x и y, значения которых записываются из переменных проекта - это координаты куда в итоге должен быть подведен курсор?
нет, наоборот: это координаты откуда начинить. Если поставить там "0, 0", то начнет с верхнего левого угла. Можно чуть дальше начинать, чтобы у края зря не двигаться. Экспериментируйте.
 
  • Спасибо
Реакции: Fantomass

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Подскажите, а переменные x и y, значения которых записываются из переменных проекта - это координаты куда в итоге должен быть подведен курсор?
Задумался... А если надо наоборот начать с рандомного места а закончить в указанных координатах, то надо просто массив с координатами в цикле с конца начинать обрабатывать, и первыми координатами ставить как раз те точки с переменных без рандомизации, чтобы на них закончило движение:
C#:
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
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);
}
 

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Задумался... А если надо наоборот начать с рандомного места а закончить в указанных координатах, то надо просто массив с координатами в цикле с конца начинать обрабатывать, и первыми координатами ставить как раз те точки с переменных без рандомизации, чтобы на них закончило движение:
C#:
int x = Convert.ToInt32(project.Variables["ToX"].Value);
int y = Convert.ToInt32(project.Variables["ToY"].Value);
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);
}
Классно! orka13, а можно, этот же код сделать так, что бы мышь останавливалась на определённом элементе и кликала по нему?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Классно! orka13, а можно, этот же код сделать так, что бы мышь останавливалась на определённом элементе и кликала по нему?
Гуглим: получить координаты элемента 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");
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Подскажите как сделать, что бы FullEmulationMouseMove принимал текущие координаты при скроле. Делаю так:
Код:
instance.ActiveTab.FullEmulationMouseWheel(0, 500);
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
instance.ActiveTab.FullEmulationMouseMove(Point1.X+50, Point1.Y+50);
После скрола мышка оказывается на верху и страница поднимается изза этого вверх. Пробовал разные вариации, кто нибудь разобрался с этим?
Дайте хоть пример как делать, что бы она сверху не оставалась, а двигалась со скролом
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Подскажите как сделать, что бы FullEmulationMouseMove принимал текущие координаты при скроле. Делаю так:
Код:
instance.ActiveTab.FullEmulationMouseWheel(0, 500);
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
instance.ActiveTab.FullEmulationMouseMove(Point1.X+50, Point1.Y+50);
После скрола мышка оказывается на верху и страница поднимается изза этого вверх. Пробовал разные вариации, кто нибудь разобрался с этим?
Дайте хоть пример как делать, что бы она сверху не оставалась, а двигалась со скролом
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.
У меня лично на Яндекс.Поиск при скроле мышка на вверху остается. Т.е я подвинул мышку, сделал скролл, хочу подвинуть в том месте где остановился скролл, но мышка оказывается на вверху, за пределами видимости и как только начинает движение, страница поднимается вверх
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.
Да, она поднимается не всегда, но бывает. Меня несколько другое интересует. Мне нужно начать движение мыши с того места где остановился скролл, что бы мышь сверху не тащилась вниз. Т.е. поставил мышку на центр страницы, сделал скролл и что бы она начала движение именно с центра страницы, а не сверху, где в первый раз остановилась.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Тогда подозреваю что в Point1 попадают старые координаты курсора еще до скролла. Значит надо либо паузу ставить, чтобы в зенке они обновились, либо костылем пользоваться:
UPD: код в этом посте не решает поставленную задачу. Это объяснено несколькими постами ниже.
C#:
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
Point Point2 =  new Point(Point1.X, Point1.Y+500); // "угадываем" точку, где должен появится наш курсор после скрола (тупо сдвигаем его координаты вниз от активной позиции на "длину скрола")
instance.ActiveTab.FullEmulationMouseWheel(0, 500); // скролим
instance.ActiveTab.MouseMove(Point2.X, Point2.Y); // тупо ставим (не ведем с эмуляцией, а ставим жестко!) курсор в ту точку Point2
instance.ActiveTab.FullEmulationMouseMove(Point2.X+50, Point2.Y+50); // двигаем курсор от Point2 уже плавненько с эмуляцией
 
Последнее редактирование:

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Тогда подозреваю что в Point1 попадают старые координаты курсора еще до скролла. Значит надо либо паузу ставить, чтобы в зенке они обновились, либо костылем пользоваться:
C#:
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
Point Point2 =  new Point(Point1.X, Point1.Y+500); // "угадываем" точку, где должен появится наш курсор после скрола (тупо сдвигаем его координаты вниз от активной позиции на "длину скрола")
instance.ActiveTab.FullEmulationMouseWheel(0, 500); // скролим
instance.ActiveTab.MouseMove(Point2.X, Point2.Y); // тупо ставим (не ведем с эмуляцией, а ставим жестко!) курсор в ту точку Point2
instance.ActiveTab.FullEmulationMouseMove(Point2.X+50, Point2.Y+50); // двигаем курсор от Point2 уже плавненько с эмуляцией
instance.ActiveTab.MouseMove(Point2.X, Point2.Y) об этой функции думал, не повлияет ли она на антифрод? Я стараюсь заточить шаблон под максимально человеческие действия, вебвизор как к ней отнесется?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
все на свой страх и риск. Тогда тупо с паузой пробовать, может перестанет тот глюк проскакивать:
C#:
instance.ActiveTab.FullEmulationMouseWheel(0, 500);
System.Threading.Thread.Sleep(new Random().Next(2000,3000));
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
instance.ActiveTab.FullEmulationMouseMove(Point1.X+50, Point1.Y+50);
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; эта функция возвращает координаты где мышка остановилась в последний раз, даже если проскролить, она не принимает текущие координаты, а двигается с той части страницы, где была в последний раз. Мышка прошла, прокрутилась страница, Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; и дальше движении мыши, но координаты принимаются сверху. Пауза не как не помогает, он берет те координаты. Походу костыль это единственный выход.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Тогда подозреваю что в Point1 попадают старые координаты курсора еще до скролла. Значит надо либо паузу ставить, чтобы в зенке они обновились, либо костылем пользоваться:
C#:
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
Point Point2 =  new Point(Point1.X, Point1.Y+500); // "угадываем" точку, где должен появится наш курсор после скрола (тупо сдвигаем его координаты вниз от активной позиции на "длину скрола")
instance.ActiveTab.FullEmulationMouseWheel(0, 500); // скролим
instance.ActiveTab.MouseMove(Point2.X, Point2.Y); // тупо ставим (не ведем с эмуляцией, а ставим жестко!) курсор в ту точку Point2
instance.ActiveTab.FullEmulationMouseMove(Point2.X+50, Point2.Y+50); // двигаем курсор от Point2 уже плавненько с эмуляцией
Жаль что и костыль не работает, MouseMove ставит в одну точку, FullEmulationMouseMove двигается совершенно с другой. Придется по другому делать шаблон
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Жаль что и костыль не работает, MouseMove ставит в одну точку, FullEmulationMouseMove двигается совершенно с другой. Придется по другому делать шаблон
Моя вина. Протупил я что эти методы независимые координаты используют, то есть один не будет продолжать движения другого, а только свои. ТС давал ссылку на топик где это уже обсуждалось:
https://zennolab.com/discussion/threads/fullemulationmousewheel-stoit-li-ozhidat.36028/#post-268618
Хз тогда чем помочь.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
65
Баллы
28
Моя вина. Протупил я что эти методы независимые координаты используют, то есть один не будет продолжать движения другого, а только свои. ТС давал ссылку на топик где это уже обсуждалось:
https://zennolab.com/discussion/threads/fullemulationmousewheel-stoit-li-ozhidat.36028/#post-268618
Хз тогда чем помочь.
Вообщем на сайте яндекса происходит эта дичь со скролом, посмотрел на другом, там все замечательно работает. Мышка запоминает место где остановился скролл
 

Konstantin517

Новичок
Регистрация
12.09.2019
Сообщения
3
Благодарностей
0
Баллы
1
Гуглим: получить координаты элемента 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");
Вопрос относительно вот этого элемента.
//ищем наш элдемент по XPath:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//p", 0);

Хочу добавить XPath ссылку из поисковой выдачи яндекс.

Попробовал уже 3 выражения создать.
("//a[@href='defectcar.ru']",0)
("//a[contains(@href,'defectcar.ru'", 0);
("xpath=//a[contains(@href,'defectcar.ru'", 0);

И ничего не получается. Уже больше 2 часов пытаюсь.

Вот ссылка поиска https://yandex.ru/search/?text=выкуп авто пермь&lr=50

Вот этот сайт хочу взять defectcar.ru в XPath.
Помогите если можете.
 

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
854
Благодарностей
246
Баллы
43
instance.ActiveTab.FindElementByXPath("//a[contains(.,'DefectCAR')]", 0);
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
  • Спасибо
Реакции: Продвижение

Konstantin517

Новичок
Регистрация
12.09.2019
Сообщения
3
Благодарностей
0
Баллы
1

Продвижение

Новичок
Регистрация
04.08.2019
Сообщения
1
Благодарностей
0
Баллы
1
почти, только не закрыли скобки:
C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//a[contains(@href, 'defectcar.ru')]", 0);
Еще вопрос такой.
Как сделать правильно код вот такой
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(@innerhtml, '" + Мой\текст + "')]", 0);

То есть есть данные Тэг - span . Имя атрибута - innerhtml ( или innertext ). Значение - Мой\текст
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Еще вопрос такой.
Как сделать правильно код вот такой
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(@innerhtml, '" + Мой\текст + "')]", 0);

То есть есть данные Тэг - span . Имя атрибута - innerhtml ( или innertext ). Значение - Мой\текст
xpath contains text
C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), 'Мой\текст')]", 0);
 

Peplos

Client
Регистрация
31.07.2018
Сообщения
28
Благодарностей
5
Баллы
3
xpath contains text
C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), 'Мой\текст')]", 0);
Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через xpath) вижу в логе ошибку "Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 0; Cтолбец: 70]". Подскажите пожалуйста что я делаю не так)
 

Reactor3000

Client
Регистрация
25.09.2019
Сообщения
434
Благодарностей
262
Баллы
63
Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через xpath) вижу в логе ошибку "Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 0; Cтолбец: 70]". Подскажите пожалуйста что я делаю не так)
Скиньте свой код.
Либо сами смотрите на 70 элемент в 1й строке кода, возможно кавычки не те, или еще что то
 
  • Спасибо
Реакции: orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через xpath) вижу в логе ошибку "Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 0; Cтолбец: 70]". Подскажите пожалуйста что я делаю не так)
как написали ниже: это ругается что у нас нестандартные символы в тексте поиска. Я же скопировал тупо с поста пример текста. Если в тексте реально нужен слэш (или другие спец-символы), то его либо экранировать в C# надо, либо передавать текст в C# как переменную из проекта, типа так:
C#:
// сначала создайте в шаблоне переменную Peremennaya_s_Textom, в которой есть текст нашего поиска
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), '" + project.Variables["Peremennaya_s_Textom"].Value + "')]", 0);
// дальше для наглядности проверяем нашло ли наш элемент вообще:
if (Elemetik.IsVoid) {
    return "не нашли элемента по таким признакам";
}
else {
    return Elemetik.InnerText;
}
UPD: подумал, тогда уж лучше весь XPath в переменную Peremennaya_s_XPath загнать, типа:
C#:
FindElementByXPath(project.Variables["Peremennaya_s_XPath"].Value, 0);
 
Последнее редактирование:

Peplos

Client
Регистрация
31.07.2018
Сообщения
28
Благодарностей
5
Баллы
3
как написали ниже: это ругается что у нас нестандартные символы в тексте поиска. Я же скопировал тупо с поста пример текста. Если в тексте реально нужен слэш (или другие спец-символы), то его либо экранировать в C# надо, либо передавать текст в C# как переменную из проекта, типа так:
C#:
// сначала создайте в шаблоне переменную Peremennaya_s_Textom, в которой есть текст нашего поиска
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), '" + project.Variables["Peremennaya_s_Textom"].Value + "')]", 0);
// дальше для наглядности проверяем нашло ли наш элемент вообще:
if (Elemetik.IsVoid) {
    return "не нашли элемента по таким признакам";
}
else {
    return Elemetik.InnerText;
}
UPD: подумал, тогда уж лучше весь XPath в переменную Peremennaya_s_XPath загнать, типа:
C#:
FindElementByXPath(project.Variables["Peremennaya_s_XPath"].Value, 0);

Почему то не находит элемент по заданным параметрам.. Чтото я делаю не так.. Задача - зайти в аккаунт гугла( нажать кнопочку далее) http://prntscr.com/pbb64q - параметры кнопки. Значение ZFr60d CeoRYc я беру в переменную "Peremennaya_s_Textom" и далее код
C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//div[contains(class(), '" + project.Variables["Peremennaya_s_Textom"].Value + "')]", 0);
// дальше для наглядности проверяем нашло ли наш элемент вообще:
if (Elemetik.IsVoid) {
    return "не нашли элемента по таким признакам";
}
else {
    return Elemetik.InnerText;
}
//его координаты подставляем в наши координаты первой точки в массиве
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");
Извините, если вопрос глупый, в с# совсем не силен. Полночи просидел, пытаясь заставить это все работать методом научного тыка/перебора, но так и не смог.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
Почему то не находит элемент по заданным параметрам.. Чтото я делаю не так.. Задача - зайти в аккаунт гугла( нажать кнопочку далее) http://prntscr.com/pbb64q - параметры кнопки. Значение ZFr60d CeoRYc я беру в переменную "Peremennaya_s_Textom" и далее код
C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//div[contains(class(), '" + project.Variables["Peremennaya_s_Textom"].Value + "')]", 0);
// дальше для наглядности проверяем нашло ли наш элемент вообще:
if (Elemetik.IsVoid) {
    return "не нашли элемента по таким признакам";
}
else {
    return Elemetik.InnerText;
}
//его координаты подставляем в наши координаты первой точки в массиве
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");
Извините, если вопрос глупый, в с# совсем не силен. Полночи просидел, пытаясь заставить это все работать методом научного тыка/перебора, но так и не смог.
Вы выбрали слишком сложный сервис гугла для тестирования. На той странице динамические классы, то есть они меняются периодически. В такой ситуации лучше в тексту внутри кнопки привязываться.
Да и приведенный код в любом случае дальше восьмой строки не пойдет. Изучите хоть немного азы C# чтобы пробовать внедрять его в Zennoposter. Тут не подойдет метод "просто склеить два куска кода, а вдруг заработает".
 

Peplos

Client
Регистрация
31.07.2018
Сообщения
28
Благодарностей
5
Баллы
3
Текстовые значения могут быть на разных языках. Значение class ZFr60d CeoRYc является неизменным в моем случае. На кубиках без эмуляции все неплохо работает, но решил попробовать прикрутить эмуляцию - и все встало(
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 164
Благодарностей
2 164
Баллы
113
ну хз. Тогда уберите строку:
C#:
return Elemetik.InnerText;
А то с ней при успехе нахождения код вернет текст элемента и дальше не пойдет.
 

Peplos

Client
Регистрация
31.07.2018
Сообщения
28
Благодарностей
5
Баллы
3
Собственно проблема в том, что этот элемент (который кубиком без проблем находится по вышеуказанным параметрам) я не могу найти этим кодом

C#:
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//div[contains(class(), '" + project.Variables["Peremennaya_s_Textom"].Value + "')]", 0);
Значение ZFr60d CeoRYc я беру в переменную "Peremennaya_s_Textom"
 

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