Как с эмулировать выделение текста при помощи мыши

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 022
Благодарностей
29
Баллы
48
Подскажите как можно с эмулировать выделение текста при помощи мыши ( нажать правую кнопку мыши и провести по заданному элементу или координатам)
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Набросал такой код. Может кто-то по другому придумает.
Код:
// Находим элемент
HtmlElement he = instance.ActiveTab.FindElementById("SIvCob");//ищем элемент по атрибутам
if (he.IsVoid) return -1;//если нет элемента возвращаем -1

instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")), Convert.ToInt32(he.GetAttribute("top")));//двигаем мышку к началу элемента, который хотим прочитать
instance.ActiveTab.FullEmulationMouseClick("left", "down");//событие (event) зажали левую кнопку мыши
instance.ActiveTab.FullEmulationMouseMoveAboveHtmlElement(he, 30);//проводим мышкой по элементу заданное количество символов (30)
instance.ActiveTab.FullEmulationMouseClick("left", "up");//отпускаем левую кнопку мыши
Еще один вариант, если нужно выделить ссылку или типо того. Сильно не вдумывался, но вот это выделяет.
Код:
// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", "https://www.google.com/setprefs\\?sig=0_1oVP2Lx8_SoHtMORHyCd52FrVc0%3D&hl=uk&source=homepage&sa=X&ved=0ahUKEwjj48iW3qThAhWPpYsKHb3DC38Q2ZgBCAc", "regexp", 0);
if (he.IsVoid) return -1;

instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) - 1, Convert.ToInt32(he.GetAttribute("top")) + 5);
System.Threading.Thread.Sleep(500);
instance.ActiveTab.FullEmulationMouseClick("left", "down");
instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) + Convert.ToInt32(he.GetAttribute("width")) - 5, Convert.ToInt32(he.GetAttribute("top")) + 5);
instance.ActiveTab.FullEmulationMouseClick("left", "up");
google1.png
 
Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
Как сделать тоже самое только через xpath ?
 

Delvig

Client
Регистрация
07.09.2016
Сообщения
132
Благодарностей
130
Баллы
43
  • Спасибо
Реакции: backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
мышка просто пролетает и не выделяет ничего

C#:
// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByXPath("//h1", 0);
if (he.IsVoid) return -1;

instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) - 1, Convert.ToInt32(he.GetAttribute("top")) + 5);
System.Threading.Thread.Sleep(500);
instance.ActiveTab.FullEmulationMouseClick("left", "down");
instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) + Convert.ToInt32(he.GetAttribute("width")) - 5, Convert.ToInt32(he.GetAttribute("top")) + 5);
instance.ActiveTab.FullEmulationMouseClick("left", "up");
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 694
Баллы
113
мышка просто пролетает и не выделяет ничего

C#:
// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByXPath("//h1", 0);
if (he.IsVoid) return -1;

instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) - 1, Convert.ToInt32(he.GetAttribute("top")) + 5);
System.Threading.Thread.Sleep(500);
instance.ActiveTab.FullEmulationMouseClick("left", "down");
instance.ActiveTab.FullEmulationMouseMove(Convert.ToInt32(he.GetAttribute("left")) + Convert.ToInt32(he.GetAttribute("width")) - 5, Convert.ToInt32(he.GetAttribute("top")) + 5);
instance.ActiveTab.FullEmulationMouseClick("left", "up");
на хроме небось ? у хрома баг по этой теме. в багтрекере есть. под файрфокс работает
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113

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