в zennoposter эмуляция мыши работает некорректно

sashasharko

Новичок
Регистрация
11.10.2016
Сообщения
3
Благодарностей
0
Баллы
1
В zennoposter эмуляция мыши работает некорректно. При проставлении координат, на разных дисплеях в разных местах кликает. Как бороться с этим?
 

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

ну так учитывайте разрешение экрана.
 

sashasharko

Новичок
Регистрация
11.10.2016
Сообщения
3
Благодарностей
0
Баллы
1
кроме это других способов нет?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
ну так учитывайте разрешение экрана.
а при чём тут разрешение экрана, оно же по координатам окна инстанса кликает везде должно быть одинаково. на разных дисплеях раньше пробовал, вроде всё чётко было, другие баги были, про этот не знаю
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
На разных разрешениях экранов может быть разная вёрстка на сайте. Он может растягиваться, перестраиваться и т.д.
Исходя из этого, кликать нужно не по постоянным координатам, а перед кликам получать исходную точку, от которой точно будет правильно считать, прибавлять к значению свой сдвиг, после чего уже кликать.
 
  • Спасибо
Реакции: arhip1985

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
правильнее наверное сначала получить координаты требуемого элемента - топ лефт высоту и ширину, вычислять середину и после этого кликать. я так делал, сдвигов нет
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
Подтверждаю слова автора топика.
вот код:
Код:
// Находим элемент по атрибуту
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("img", "src", "http://site.ru/img.jpg", "regexp", 0);
if (he.IsVoid) return -1;

// Получаем координаты левого верхнего угла
int lp = Convert.ToInt16(he.GetAttribute("leftinbrowser"));
//int lp = Convert.ToInt16(he.GetAttribute("leftintab"));
//int lp = he.DisplacementInTabWindow.X;

int tp = Convert.ToInt16(he.GetAttribute("topinbrowser"));
//int tp = Convert.ToInt16(he.GetAttribute("topintab"));
//int tp = he.DisplacementInTabWindow.Y;

// Получаем габариты - ширину и высоту
int width = Convert.ToInt16(he.GetAttribute("width"));
int height = Convert.ToInt16(he.GetAttribute("height"));

// Берем произвольную точку внутри элемента
Random rnd = new Random();
lp = rnd.Next(lp,lp+width);
tp = rnd.Next(tp,tp+height);

// Наводим мыш от верха окна до полученной точки
instance.ActiveTab.MouseMove(rnd.Next(0,300), 0, lp, tp);

// Кликаем на этой точке
instance.ActiveTab.MouseClick(lp, tp, "Left", "click");
Результат такой:
Крестик появляется в начальных координатах, затем пропадает и возникает уже на нужном элементе. Казалось бы всё нормально... Ан нет...

Клик происходит существенно правее той точки, на которой должен был состояться. Причем, в разных местах. Изредка попадает на нужный элемент, но изредка - это плохо. Нужно всегда.

Гуру, подскажите, где косяк...

П.С. Элемент находит правильно, естественно site.ru и img.jpg - вымышленные...
П.П.С. Закомментированные варианты все пробовал, эффект тот же...
 
Последнее редактирование:

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
Друзья, помогите, пожалуйста! Шаблон встал - никак не хочет кликать туда, куда надо!!! Весь форум перерыл, не понимаю, где ошибка :(
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Друзья, помогите, пожалуйста! Шаблон встал - никак не хочет кликать туда, куда надо!!! Весь форум перерыл, не понимаю, где ошибка :(
leftinbrowser topinbrowser
смотрите на размер элемента, и прибавляете в правую колонку необходимое значение. Пример работы ниже.
 

Вложения

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
leftinbrowser topinbrowser
смотрите на размер элемента, и прибавляете в правую колонку необходимое значение. Пример работы ниже.
Спасибо за пример - сейчас домой приеду и посмотрю.
А в моем коде (он чуть выше) не скажете, что не так?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
они закомментированы. Я пробовал вместо leftinbrowser topinbrowser пользоваться leftintab topintab. Эффект тот же. В чистом виде (если смущают закомментированные строки) этот код выглядит вот так:
Код:
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("img", "src", "http://site.ru/img.jpg", "regexp", 0);
if (he.IsVoid) return -1;
int lp = Convert.ToInt16(he.GetAttribute("leftinbrowser"));
int tp = Convert.ToInt16(he.GetAttribute("topinbrowser"));
int width = Convert.ToInt16(he.GetAttribute("width"));
int height = Convert.ToInt16(he.GetAttribute("height"));
Random rnd = new Random();
lp = rnd.Next(lp,lp+width);
tp = rnd.Next(tp,tp+height);
instance.ActiveTab.MouseMove(rnd.Next(0,300), 0, lp, tp);
instance.ActiveTab.MouseClick(lp, tp, "Left", "click");
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
Похоже понял, в чем проблема...
MouseMove определяет координаты от левого верхнего угла страницы.
А MouseClick определяет координаты от левого верхнего угла отображаемой части страницы.
Таким образом, если окошечко не во всю ширину и левый верхний угол страницы пролистан, клик происходит в другое место - получается смещение на величину пролистывания страницы...
Коряво получилось объяснить, скриншотом еще поясню (клик делается по конечным координатам MouseMove)...
координаты.jpg

В связи с этим возникает вопрос - как определить текущие координаты курсора мыши?
Желательно оба варианта - от левого верхнего угла страницы и от левого верхнего угла отображаемой страницы.
Или как вариант, размер скролла (смещения)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
В связи с этим возникает вопрос - как определить текущие координаты курсора мыши?
(смещения)
leftinbrowser topinbrowser берешь и все нормально.
ты скажи вобще че ты хочешь сделать?
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
leftinbrowser topinbrowser берешь и все нормально.
ты скажи вобще че ты хочешь сделать?
Хочу, чтобы мышь приехала от верхней грани экрана к нужному элементу и кликнула на него.
Затем, приехала от того положения, в котором находилась к другому нужному элементу и кликнула на него.
Т.е. нужно более-менее адекватная эмуляция движения и кликов мышью.

Варианты все пробовал! И leftinbrowser и leftintab и displacement! Не в этом проблема!
Наводится мыш туда, куда нужно. А вот кликает потом уже в другое место, хотя координаты те же.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Хочу, чтобы мышь приехала от верхней грани экрана к нужному элементу и кликнула на него.
Затем, приехала от того положения, в котором находилась к другому нужному элементу и кликнула на него.
Т.е. нужно более-менее адекватная эмуляция движения и кликов мышью.

Варианты все пробовал! И leftinbrowser и leftintab и displacement! Не в этом проблема!
Наводится мыш туда, куда нужно. А вот кликает потом уже в другое место, хотя координаты те же.
Тебе конкретно эмуляция движения нужна или эмуляция клика? Полноценно такое не реализованно в зенке, есть какие то снипеты, я их не тестил.
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
298
Благодарностей
82
Баллы
28
Тебе конкретно эмуляция движения нужна или эмуляция клика? Полноценно такое не реализованно в зенке, есть какие то снипеты, я их не тестил.
Вот я и пытаюсь написать такой сниппет.
Нужна эмуляция всего:
- двигать мышкой и не кликать - это не вариант;
- кликать мышкой не двигая её - тоже не вариант;
Поэтому бот должен двигать мышкой в направлении нужного элемента, кликать по нему и так далее - чтобы хоть отдаленно напоминать человека.
Пробую пока через MouseMove, хотя, на форуме не лестные отзывы об этом методе.
Но вот проблема встала, что координаты MouseMove и MouseClick отличаются друг от друга (чем - описывал выше).
 

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