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

Подскажите, а переменные x и y, значения которых записываются из переменных проекта - это координаты куда в итоге должен быть подведен курсор?
нет, наоборот: это координаты откуда начинить. Если поставить там "0, 0", то начнет с верхнего левого угла. Можно чуть дальше начинать, чтобы у края зря не двигаться. Экспериментируйте.
 
  • Спасибо
Реакции: Fantomass
Подскажите, а переменные 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);
}
 
Задумался... А если надо наоборот начать с рандомного места а закончить в указанных координатах, то надо просто массив с координатами в цикле с конца начинать обрабатывать, и первыми координатами ставить как раз те точки с переменных без рандомизации, чтобы на них закончило движение:
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, а можно, этот же код сделать так, что бы мышь останавливалась на определённом элементе и кликала по нему?
Гуглим: получить координаты элемента 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");
 
Подскажите как сделать, что бы FullEmulationMouseMove принимал текущие координаты при скроле. Делаю так:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseWheel(0, 500);
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition;
instance.ActiveTab.FullEmulationMouseMove(Point1.X+50, Point1.Y+50);

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

После скрола мышка оказывается на верху и страница поднимается изза этого вверх. Пробовал разные вариации, кто нибудь разобрался с этим?
Дайте хоть пример как делать, что бы она сверху не оставалась, а двигалась со скролом
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.
 
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.

У меня лично на Яндекс.Поиск при скроле мышка на вверху остается. Т.е я подвинул мышку, сделал скролл, хочу подвинуть в том месте где остановился скролл, но мышка оказывается на вверху, за пределами видимости и как только начинает движение, страница поднимается вверх
 
Так а что в приведенном примере не устраивает? Может у вас сайт нестандартный? проверил на странице этого форума: никуда после скролла не поднимается страница из-за положения мышки.
Да, она поднимается не всегда, но бывает. Меня несколько другое интересует. Мне нужно начать движение мыши с того места где остановился скролл, что бы мышь сверху не тащилась вниз. Т.е. поставил мышку на центр страницы, сделал скролл и что бы она начала движение именно с центра страницы, а не сверху, где в первый раз остановилась.
 
Тогда подозреваю что в 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 уже плавненько с эмуляцией
 
Последнее редактирование:
Тогда подозреваю что в 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) об этой функции думал, не повлияет ли она на антифрод? Я стараюсь заточить шаблон под максимально человеческие действия, вебвизор как к ней отнесется?
 
все на свой страх и риск. Тогда тупо с паузой пробовать, может перестанет тот глюк проскакивать:
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);
 
Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; эта функция возвращает координаты где мышка остановилась в последний раз, даже если проскролить, она не принимает текущие координаты, а двигается с той части страницы, где была в последний раз. Мышка прошла, прокрутилась страница, Point Point1 = instance.ActiveTab.FullEmulationMouseCurrentPosition; и дальше движении мыши, но координаты принимаются сверху. Пауза не как не помогает, он берет те координаты. Походу костыль это единственный выход.
 
Тогда подозреваю что в 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 двигается совершенно с другой. Придется по другому делать шаблон
 
Жаль что и костыль не работает, MouseMove ставит в одну точку, FullEmulationMouseMove двигается совершенно с другой. Придется по другому делать шаблон
Моя вина. Протупил я что эти методы независимые координаты используют, то есть один не будет продолжать движения другого, а только свои. ТС давал ссылку на топик где это уже обсуждалось:
https://zennolab.com/discussion/threads/fullemulationmousewheel-stoit-li-ozhidat.36028/#post-268618
Хз тогда чем помочь.
 
Моя вина. Протупил я что эти методы независимые координаты используют, то есть один не будет продолжать движения другого, а только свои. ТС давал ссылку на топик где это уже обсуждалось:
https://zennolab.com/discussion/threads/fullemulationmousewheel-stoit-li-ozhidat.36028/#post-268618
Хз тогда чем помочь.
Вообщем на сайте яндекса происходит эта дичь со скролом, посмотрел на другом, там все замечательно работает. Мышка запоминает место где остановился скролл
 
Гуглим: получить координаты элемента 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.
Помогите если можете.
 
instance.ActiveTab.FindElementByXPath("//a[contains(.,'DefectCAR')]", 0);
 
  • Спасибо
Реакции: Продвижение
почти, только не закрыли скобки:
C#:
Развернуть Свернуть Копировать
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//a[contains(@href, 'defectcar.ru')]", 0);
Еще вопрос такой.
Как сделать правильно код вот такой
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(@innerhtml, '" + Мой\текст + "')]", 0);

То есть есть данные Тэг - span . Имя атрибута - innerhtml ( или innertext ). Значение - Мой\текст
 
Еще вопрос такой.
Как сделать правильно код вот такой
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);
 
xpath contains text
C#:
Развернуть Свернуть Копировать
HtmlElement Elemetik = instance.ActiveTab.FindElementByXPath("//span[contains(text(), 'Мой\текст')]", 0);

Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через xpath) вижу в логе ошибку "Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 0; Cтолбец: 70]". Подскажите пожалуйста что я делаю не так)
 
Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через xpath) вижу в логе ошибку "Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 0; Cтолбец: 70]". Подскажите пожалуйста что я делаю не так)
Скиньте свой код.
Либо сами смотрите на 70 элемент в 1й строке кода, возможно кавычки не те, или еще что то
 
  • Спасибо
Реакции: orka13
Тоже столкнулся с подобной задачей, но при использовании вашего (да и любого другого подобного кода по поиску элемента через 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);
 
Последнее редактирование:
как написали ниже: это ругается что у нас нестандартные символы в тексте поиска. Я же скопировал тупо с поста пример текста. Если в тексте реально нужен слэш (или другие спец-символы), то его либо экранировать в 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");

Извините, если вопрос глупый, в с# совсем не силен. Полночи просидел, пытаясь заставить это все работать методом научного тыка/перебора, но так и не смог.
 
Почему то не находит элемент по заданным параметрам.. Чтото я делаю не так.. Задача - зайти в аккаунт гугла( нажать кнопочку далее) 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. Тут не подойдет метод "просто склеить два куска кода, а вдруг заработает".
 
Текстовые значения могут быть на разных языках. Значение class ZFr60d CeoRYc является неизменным в моем случае. На кубиках без эмуляции все неплохо работает, но решил попробовать прикрутить эмуляцию - и все встало(
 
ну хз. Тогда уберите строку:
C#:
Развернуть Свернуть Копировать
return Elemetik.InnerText;
А то с ней при успехе нахождения код вернет текст элемента и дальше не пойдет.
 
Собственно проблема в том, что этот элемент (который кубиком без проблем находится по вышеуказанным параметрам) я не могу найти этим кодом

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

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