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

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,170
Reaction score
37
Points
48
Подскажите как можно с эмулировать выделение текста при помощи мыши ( нажать правую кнопку мыши и провести по заданному элементу или координатам)
 

gevolushn

Известная личность
Joined
Mar 25, 2019
Messages
518
Reaction score
270
Points
63
Набросал такой код. Может кто-то по другому придумает.
Code:
// Находим элемент
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");//отпускаем левую кнопку мыши
Еще один вариант, если нужно выделить ссылку или типо того. Сильно не вдумывался, но вот это выделяет.
Code:
// Конструктор действий, тип 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
 
Last edited:

backoff

Client
Joined
Apr 20, 2015
Messages
6,333
Reaction score
6,622
Points
113
Как сделать тоже самое только через xpath ?
 

Delvig

Client
Joined
Sep 7, 2016
Messages
134
Reaction score
132
Points
43
Как сделать тоже самое только через xpath ?
использовать HtmlElement he = instance.ActiveTab.FindElementByXPath("//тут хпасс", 0);
 
  • Thank you
Reactions: backoff

backoff

Client
Joined
Apr 20, 2015
Messages
6,333
Reaction score
6,622
Points
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
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,738
Points
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
Joined
Apr 20, 2015
Messages
6,333
Reaction score
6,622
Points
113

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)