Клик по элементу через c#

skvortsoffvladisav

Новичок
Регистрация
12.06.2019
Сообщения
8
Благодарностей
0
Баллы
1
Нужно через c# снипет, кликнуть по ссылке с текстом "Москва"
Но почему-то клик проходит через раз, то кликает, то не кликает, подскажите в чем может быть проблема
Код:
Random rand = new Random();
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("a", "innertext", "Москва", "text", 0);
   if (he.IsVoid) return -1;
   
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
instance.ActiveTab.FullEmulationMouseMoveAboveHtmlElement(he, 30);
System.Threading.Thread.Sleep(rand.Next(500, 1000));
instance.ActiveTab.FullEmulationMouseClick("left", "click");
Ссылка есть на странице всегда и не находится во фрейме
Может нужно сделать задержку или каким-то образом ожидать что DOM страницы полностью прогрузился?
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
342
Благодарностей
272
Баллы
63
Пробуй другие способы, например поиск элемента через XPath, способов клика тоже несколько штук есть.
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Del. Неправильно понял задачу.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Либо на странице иногда несколько таких элементов (код сохраните в ошибочных ситуациях и проверьте потом). Либо при движении курсор уходит за пределы нужной зоны, тогда лучше так:
C#:
Random rand = new Random();
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("a", "innertext", "Москва", "text", 0);
   if (he.IsVoid) return -1;
   
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
instance.ActiveTab.FullEmulationMouseMoveAboveHtmlElement(he, 30);
System.Threading.Thread.Sleep(rand.Next(500, 1000));
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
System.Threading.Thread.Sleep(rand.Next(500, 1000));
instance.ActiveTab.FullEmulationMouseClick("left", "click");
 
  • Спасибо
Реакции: speaker

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
По-разному бывает, нужно искать элементы, которые не меняются. Это могут быть div, class, label какой-нибудь и подставлять в код FindElementByAttribute
Можно еще так попробовать:
Код:
// Поиск элемента по XPath
//Путь XPath до элемента
string xpath = "//img[@class='logo']";
//Номер совпадения
int num = 0;

//Поиск элемента
var el = instance.ActiveTab.FindElementByXPath(xpath, num);
//Движение к элементу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(el);
 
  • Спасибо
Реакции: rol

skvortsoffvladisav

Новичок
Регистрация
12.06.2019
Сообщения
8
Благодарностей
0
Баллы
1
Подскажите что означает второй параметр в FullEmulationMouseMoveAboveHtmlElement(he, 30);
Как ответил саппорт в нем указывается размер шрифта и действительно при клике на текстовую ссылку, при указании нужно размера шрифта, все ок, клик ни разу не промахивается

но если кликать на ссылку с картинкой, то промахи остаются и непонятно что в таком случаи прописывать во втором параметре
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Подскажите что означает второй параметр в FullEmulationMouseMoveAboveHtmlElement(he, 30);
Как ответил саппорт в нем указывается размер шрифта и действительно при клике на текстовую ссылку, при указании нужно размера шрифта, все ок, клик ни разу не промахивается

но если кликать на ссылку с картинкой, то промахи остаются и непонятно что в таком случаи прописывать во втором параметре
я не прописываю размер шрифта. Если по картинке промахивается, можно поискать параметры бокса, в которых находится данная картинка. Установите Xpath Helper Wizard, оч помогает в поиске нужных параметров
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Подскажите что означает второй параметр в FullEmulationMouseMoveAboveHtmlElement(he, 30);
Как ответил саппорт в нем указывается размер шрифта и действительно при клике на текстовую ссылку, при указании нужно размера шрифта, все ок, клик ни разу не промахивается

но если кликать на ссылку с картинкой, то промахи остаются и непонятно что в таком случаи прописывать во втором параметре
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".
Вот тут интересный вопрос - когда таких элементов несколько, 3-4, например, то с перым и вторым код нормально отрабатывает, а на 3-4 может вообще курсор не появится и ничего не нажаться, или курсор может в угол экрана просто уйти. С чем это может быть связано?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Вот тут интересный вопрос - когда таких элементов несколько, 3-4, например, то с перым и вторым код нормально отрабатывает, а на 3-4 может вообще курсор не появится и ничего не нажаться, или курсор может в угол экрана просто уйти. С чем это может быть связано?
Уже писал:
Либо на странице иногда несколько таких элементов (код сохраните в ошибочных ситуациях и проверьте потом)...
У скрытых элементов обычно координаты "0,0" (левый верхний угол браузера. Поэтому туда и ведет курсор. Усложняйте xpath тогда, или в цикле проверяйте высоту\координаты элементов чтобы поймать нужный.
 

skvortsoffvladisav

Новичок
Регистрация
12.06.2019
Сообщения
8
Благодарностей
0
Баллы
1
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".
Да с вашим кодом нет промахов по ссылке с картинкой, но кликает всегда в одну точку на картинке, что не есть гуд, весь смысл эмуляции пропадает
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
ну если картинка большая и есть желание рандомизировать, то тогда надо городить костыль:
1) поиском границ этой картинки через ее координаты
2) выборе рандомной точки в пределах этих координат (а еще лучше не ближе чем 10% к краю, чтобы не промазать).
3) подвод мышки к этой точке и клик по ней.
Может что-то готовое уже есть для такой идеи. Но здесь главное не промазать.
 

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