Как задать координаты клику по типу RiseEvent?

  • Автор темы Автор темы Mikhail B.
  • Дата начала Дата начала

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 449
Реакции
5 477
Баллы
113
Можно как-то настроить что бы клик стремился влево? Или конкретно задать по пикселям точку клика (в рамках элемента конечно же).
Клик обычный зеновский, включена полная эмуляция мыши. Возможно есть другой метод? Рассмотрел бы и другой.

C#:
Развернуть Свернуть Копировать
// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByAttribute("div", "class", "ляля", "regexp", 0);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);
 
не совсем понял что значит "клик стремился влево". но в остальном вроде бы тебе это надо

C#:
Развернуть Свернуть Копировать
//переход на яндекс и поиск элемента
instance.ActiveTab.Navigate("https://ya.ru/");
instance.ActiveTab.WaitDownloading();

//поиск элемента и определение координат
var yandex = instance.ActiveTab.FindElementByXPath("//a[@aria-label='Яндекс']", 0);
int xMin = yandex.DisplacementInBrowser.X;
int yMin = yandex.DisplacementInBrowser.Y;
int xMax = xMin + yandex.BoundingClientWidth - 3;
int yMax = yMin + yandex.BoundingClientHeight - 3;

//случайная координата
Random r = new Random();
int x = r.Next(xMin, xMax);
int y = r.Next(yMin, yMax);

//двигаем мышку и кликаем
instance.ActiveTab.FullEmulationMouseMove(x, y);
instance.ActiveTab.FullEmulationMouseClick("left", "click");


/*
    другой способ без движения мыши:
    instance.Click(xMin, xMax, yMin, yMax, "Left", "Normal");
*/
 
  • Спасибо
Реакции: Mikhail B.
@volody00

Имелось ввиду что он по дефолту либо в центр кликает либо в левый верхний угол. Хотелось бы корректировать эти моменты. В целом код должен решить задачу. Бдагодарю!
 
Ему нельзя задать координаты, потому что он опирается на объект, который находится на странице на стороне браузера,
а уже при более высоких уровнях эмуляции может использовать координаты этого объекта, так он создан и так он работает.

Можно использовать как образец такой вариант, взяв код и подправив в указаном месте, возможно потребуется убрать лишнее.
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B. и Dmitriy Ka
  • Спасибо
Реакции: Mikhail B.
В примере используется FullEmulationMouseMove, в последних версиях уже давно в него встроен более серьёзный Emulator.MouseMove,
но ни что не мешает использовать его напрямую, правда стоит потестить его работу в Chromium'е, на всякий.
Очень интересная библиотечка, сижу разбираюсь, много интересного вижу для себе.

Возник вопрос, в библиотеке используется метод Instance.Launch(), но в нем написано, что с ним может работать только ZP и PM. Вопрос, если подключить библиотеку к шаблону, то получается инстанс можно будет запускать из библиотеке?
 
то получается инстанс можно будет запускать из библиотеке?
Они передаются в создаваемый объект библиотеки.

Библиотеку я создавал много лет назад для проектов CodeCreator'а, что бы шаблон был чисто из кода со всеми его преимуществами.
Я её уже много лет не тестил, а в те времена был только FF(!) и все настройки только под него.

Даже сохранился тестовый, как образец:
112616
и вроде как был вариант запаковки c dll.
 
Последнее редактирование:
  • Спасибо
Реакции: Dmitriy Ka
в последних версиях уже давно в него встроен более серьёзный Emulator.MouseMove,
но ни что не мешает использовать его напрямую, правда стоит потестить его работу в Chromium'е
@Yuriy Zymlex , ты сам когда последний раз код писал в ZennoPoster? Предложенному тобой методу уже больше 10 лет и предназначен он для FireFox
112618
В cef и Chrome он работает неверно (координаты берутся от левого верхнего угла пк, а не браузера). К тому же, у меня этот метод использует реальную (т.е. физическую) мышку на ПК и как это дело тогда будет работать в многопотоке?
 
  • Спасибо
Реакции: Dmitriy Ka и Yuriy Zymlex
В cef и Chrome он работает неверно (координаты берутся от левого верхнего угла пк, а не браузера). К тому же, у меня этот метод использует реальную (т.е. физическую) мышку на ПК и как это дело тогда будет работать в многопотоке?
Даже так... видимо забылось со временем. Спасибо за инфу и сорри.
 
Очень интересная библиотечка, сижу разбираюсь, много интересного вижу для себе.
да там все не по человечески сделано, без статики :ap:
ну вот зачем вам создавать кучу ненужных объектов в своих проектах ? ;-)
 
  • Спасибо
Реакции: Yuriy Zymlex
Очень интересная библиотечка, сижу разбираюсь, много интересного вижу для себе.
Проверяйте всё и вся. Библиотека создавалась в процессе изучения C# и для самого процесса.
Так же в какой-то мере для изучения JS, так как одной из целью была работа через него, где это возможно (более низкоуровнего способа в ZP - нет).

В процессе изучения F# была какое-то время мысль переписать на него, но хорошо, что не стал заниматься подобной дичью)
да и тогда бы пришлось обновлять библиотеку под CEF...
 
  • Спасибо
Реакции: Dmitriy Ka
не совсем понял что значит "клик стремился влево". но в остальном вроде бы тебе это надо

C#:
Развернуть Свернуть Копировать
//переход на яндекс и поиск элемента
instance.ActiveTab.Navigate("https://ya.ru/");
instance.ActiveTab.WaitDownloading();

//поиск элемента и определение координат
var yandex = instance.ActiveTab.FindElementByXPath("//a[@aria-label='Яндекс']", 0);
int xMin = yandex.DisplacementInBrowser.X;
int yMin = yandex.DisplacementInBrowser.Y;
int xMax = xMin + yandex.BoundingClientWidth - 3;
int yMax = yMin + yandex.BoundingClientHeight - 3;

//случайная координата
Random r = new Random();
int x = r.Next(xMin, xMax);
int y = r.Next(yMin, yMax);

//двигаем мышку и кликаем
instance.ActiveTab.FullEmulationMouseMove(x, y);
instance.ActiveTab.FullEmulationMouseClick("left", "click");


/*
    другой способ без движения мыши:
    instance.Click(xMin, xMax, yMin, yMax, "Left", "Normal");
*/
Работает лучше стандартных методов, что впрочем уже перестало удивлять. Благодарю за код, ничего не менял и не настраивал. Сразу делает то что нужно, попадает в цель!
 
  • Спасибо
Реакции: volody00

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