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

  • Автор темы Автор темы sashasharko
  • Дата начала Дата начала

sashasharko

Новичок
Регистрация
11.10.2016
Сообщения
3
Реакции
0
Баллы
1
В zennoposter эмуляция мыши работает некорректно. При проставлении координат, на разных дисплеях в разных местах кликает. Как бороться с этим?
 
кроме это других способов нет?
 
ну так учитывайте разрешение экрана.
а при чём тут разрешение экрана, оно же по координатам окна инстанса кликает везде должно быть одинаково. на разных дисплеях раньше пробовал, вроде всё чётко было, другие баги были, про этот не знаю
 
На разных разрешениях экранов может быть разная вёрстка на сайте. Он может растягиваться, перестраиваться и т.д.
Исходя из этого, кликать нужно не по постоянным координатам, а перед кликам получать исходную точку, от которой точно будет правильно считать, прибавлять к значению свой сдвиг, после чего уже кликать.
 
  • Оценить
Реакции: arhip1985
правильнее наверное сначала получить координаты требуемого элемента - топ лефт высоту и ширину, вычислять середину и после этого кликать. я так делал, сдвигов нет
 
Подтверждаю слова автора топика.
вот код:
Код:
Развернуть Свернуть Копировать
// Находим элемент по атрибуту
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 - вымышленные...
П.П.С. Закомментированные варианты все пробовал, эффект тот же...
 
Последнее редактирование:
Друзья, помогите, пожалуйста! Шаблон встал - никак не хочет кликать туда, куда надо!!! Весь форум перерыл, не понимаю, где ошибка :-(
 
Друзья, помогите, пожалуйста! Шаблон встал - никак не хочет кликать туда, куда надо!!! Весь форум перерыл, не понимаю, где ошибка :(
leftinbrowser topinbrowser
смотрите на размер элемента, и прибавляете в правую колонку необходимое значение. Пример работы ниже.
 

Вложения

leftinbrowser topinbrowser
смотрите на размер элемента, и прибавляете в правую колонку необходимое значение. Пример работы ниже.
Спасибо за пример - сейчас домой приеду и посмотрю.
А в моем коде (он чуть выше) не скажете, что не так?
 
они закомментированы. Я пробовал вместо 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");
 
Похоже понял, в чем проблема...
MouseMove определяет координаты от левого верхнего угла страницы.
А MouseClick определяет координаты от левого верхнего угла отображаемой части страницы.
Таким образом, если окошечко не во всю ширину и левый верхний угол страницы пролистан, клик происходит в другое место - получается смещение на величину пролистывания страницы...
Коряво получилось объяснить, скриншотом еще поясню (клик делается по конечным координатам MouseMove)...
координаты.jpg

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

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

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

Варианты все пробовал! И leftinbrowser и leftintab и displacement! Не в этом проблема!
Наводится мыш туда, куда нужно. А вот кликает потом уже в другое место, хотя координаты те же.
Тебе конкретно эмуляция движения нужна или эмуляция клика? Полноценно такое не реализованно в зенке, есть какие то снипеты, я их не тестил.
 
Тебе конкретно эмуляция движения нужна или эмуляция клика? Полноценно такое не реализованно в зенке, есть какие то снипеты, я их не тестил.
Вот я и пытаюсь написать такой сниппет.
Нужна эмуляция всего:
- двигать мышкой и не кликать - это не вариант;
- кликать мышкой не двигая её - тоже не вариант;
Поэтому бот должен двигать мышкой в направлении нужного элемента, кликать по нему и так далее - чтобы хоть отдаленно напоминать человека.
Пробую пока через MouseMove, хотя, на форуме не лестные отзывы об этом методе.
Но вот проблема встала, что координаты MouseMove и MouseClick отличаются друг от друга (чем - описывал выше).
 

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