Клик по элементу через 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 страницы полностью прогрузился?
 
Пробуй другие способы, например поиск элемента через XPath, способов клика тоже несколько штук есть.
 
Либо на странице иногда несколько таких элементов (код сохраните в ошибочных ситуациях и проверьте потом). Либо при движении курсор уходит за пределы нужной зоны, тогда лучше так:
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
По-разному бывает, нужно искать элементы, которые не меняются. Это могут быть 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
Подскажите что означает второй параметр в FullEmulationMouseMoveAboveHtmlElement(he, 30);
Как ответил саппорт в нем указывается размер шрифта и действительно при клике на текстовую ссылку, при указании нужно размера шрифта, все ок, клик ни разу не промахивается

но если кликать на ссылку с картинкой, то промахи остаются и непонятно что в таком случаи прописывать во втором параметре
 
Подскажите что означает второй параметр в FullEmulationMouseMoveAboveHtmlElement(he, 30);
Как ответил саппорт в нем указывается размер шрифта и действительно при клике на текстовую ссылку, при указании нужно размера шрифта, все ок, клик ни разу не промахивается

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

но если кликать на ссылку с картинкой, то промахи остаются и непонятно что в таком случаи прописывать во втором параметре
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".
 
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".
Вот тут интересный вопрос - когда таких элементов несколько, 3-4, например, то с перым и вторым код нормально отрабатывает, а на 3-4 может вообще курсор не появится и ничего не нажаться, или курсор может в угол экрана просто уйти. С чем это может быть связано?
 
Вот тут интересный вопрос - когда таких элементов несколько, 3-4, например, то с перым и вторым код нормально отрабатывает, а на 3-4 может вообще курсор не появится и ничего не нажаться, или курсор может в угол экрана просто уйти. С чем это может быть связано?
Уже писал:
Либо на странице иногда несколько таких элементов (код сохраните в ошибочных ситуациях и проверьте потом)...
У скрытых элементов обычно координаты "0,0" (левый верхний угол браузера. Поэтому туда и ведет курсор. Усложняйте xpath тогда, или в цикле проверяйте высоту\координаты элементов чтобы поймать нужный.
 
Так там в моем примере потом для страховки подводится курсор другим методом:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
и только после него надо клик делать. а не после "FullEmulationMouseMoveAboveHtmlElement".

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

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