При кликанье по элементу перехода на вкладку нет

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
На видео ( ссылка на облако https://cloud.mail.ru/public/egXB/VKbhvac5q ) подробнее показал как наводится мышка на элемент и делает клик, но переход иногда есть, а иногда нет. Наверное фаза луны влияет. Использую 2 вида эмуляции мышки
1)
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");

2) По рандомным координатам
int baseLeft = Convert.ToInt32(htmMain.GetAttribute("leftInTab"));
int baseTop = Convert.ToInt32(htmMain.GetAttribute("topInTab"));
int width = Convert.ToInt32(htmMain.GetAttribute("width"));
int height = Convert.ToInt32(htmMain.GetAttribute("height"));



// Генерируем случайное смещение внутри элемента
Random rnd = new Random();
// Добавляем небольшое смещение, чтобы не всегда кликать в самый угол
int offsetX = rnd.Next(5, width - 5);
int offsetY = rnd.Next(5, height - 5);

int clickX = baseLeft + offsetX;
int clickY = baseTop + offsetY;

// Выполняем клик по рассчитанным координатам
// Используйте MouseClick, если нужна полная эмуляция мыши
instance.ActiveTab.MouseClick(clickX, clickY, "left", "click");
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43
На видео ( ссылка на облако https://cloud.mail.ru/public/egXB/VKbhvac5q ) подробнее показал как наводится мышка на элемент и делает клик, но переход иногда есть, а иногда нет. Наверное фаза луны влияет. Использую 2 вида эмуляции мышки
1)
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");

2) По рандомным координатам
int baseLeft = Convert.ToInt32(htmMain.GetAttribute("leftInTab"));
int baseTop = Convert.ToInt32(htmMain.GetAttribute("topInTab"));
int width = Convert.ToInt32(htmMain.GetAttribute("width"));
int height = Convert.ToInt32(htmMain.GetAttribute("height"));



// Генерируем случайное смещение внутри элемента
Random rnd = new Random();
// Добавляем небольшое смещение, чтобы не всегда кликать в самый угол
int offsetX = rnd.Next(5, width - 5);
int offsetY = rnd.Next(5, height - 5);

int clickX = baseLeft + offsetX;
int clickY = baseTop + offsetY;

// Выполняем клик по рассчитанным координатам
// Используйте MouseClick, если нужна полная эмуляция мыши
instance.ActiveTab.MouseClick(clickX, clickY, "left", "click");
Здравствуйте,

По видео видно, что у вас клик происходит не по элементу. Скорей всего вы написали неверный xPath, поэтому клик не попадает по нужному элементу.

Я бы вам рекомендовал использовать этот метод, но с другим xPath


C#:
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
Здравствуйте,

По видео видно, что у вас клик происходит не по элементу. Скорей всего вы написали неверный xPath, поэтому клик не попадает по нужному элементу.

Я бы вам рекомендовал использовать этот метод, но с другим xPath


C#:
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");
1) Элемент индифицировал верно
140414


2) Я специально использовал разные варианты клика, что бы на верника
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
172
Благодарностей
99
Баллы
28
1) Элемент индифицировал верно
Посмотреть вложение 140414


2) Я специально использовал разные варианты клика, что бы на верника
1) Ну по видео как выше писали, анимация как бы наводит мимо кнопки
2) Видно что фокус слетел с окна браузер, в этом случае могут не проходить клики (Такое бывает только в ПМ), давно такого не замечал, может уже пофиксили, но давненько было такое.
3) Пару раз встречались сайты, которые не реагировали на FullEmulationMouseClick("left", "click"), видимо изза минимальной задержки между Down и Up евентом. Попробуй такое
C#:
Random rand = new Random();

instance.ActiveTab.FullEmulationMouseClick("left", "down");
Thread.Sleep(rand.Next(70, 120));
instance.ActiveTab.FullEmulationMouseClick("left", "up");
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
1) Ну по видео как выше писали, анимация как бы наводит мимо кнопки
2) Видно что фокус слетел с окна браузер, в этом случае могут не проходить клики (Такое бывает только в ПМ), давно такого не замечал, может уже пофиксили, но давненько было такое.
3) Пару раз встречались сайты, которые не реагировали на FullEmulationMouseClick("left", "click"), видимо изза минимальной задержки между Down и Up евентом. Попробуй такое
C#:
Random rand = new Random();

instance.ActiveTab.FullEmulationMouseClick("left", "down");
Thread.Sleep(rand.Next(70, 120));
instance.ActiveTab.FullEmulationMouseClick("left", "up");
Попробовал не помогло
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43
Вообще не понял зачем прописывать путь которого нет на странице
Извиняюсь, не заметил. Скрипты сайта изменили XPath, поэтому он стал неверным.

Вот нормальный:
C#:
//span[contains(@class, 'item active')]
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
Сейчас всплыл другой сайт, при этом в ProjectMaker гоняю проекты все хорошо клики отрабатывают (данный проект выбирает вариант ответа при помощи клика). Но как только проект запускаю в ZennoPoster то ни каких кликов нет, то есть НЕ выбираются нужный вариант ответа. Такое ощущение, что кликов в ZennoPoster просто нет
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43
Сейчас всплыл другой сайт, при этом в ProjectMaker гоняю проекты все хорошо клики отрабатывают (данный проект выбирает вариант ответа при помощи клика). Но как только проект запускаю в ZennoPoster то ни каких кликов нет, то есть НЕ выбираются нужный вариант ответа. Такое ощущение, что кликов в ZennoPoster просто нет
Попробуйте добавить в ваш код логику проверки наличия нужного элемента, если элемент не найден, то выведите в лог все данные //body (xPath) и посмотрите, что на самом деле видит ZP.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
172
Благодарностей
99
Баллы
28
Сейчас всплыл другой сайт, при этом в ProjectMaker гоняю проекты все хорошо клики отрабатывают (данный проект выбирает вариант ответа при помощи клика). Но как только проект запускаю в ZennoPoster то ни каких кликов нет, то есть НЕ выбираются нужный вариант ответа. Такое ощущение, что кликов в ZennoPoster просто нет
Попробуй instance.EmulationLevel = "SuperEmulation"; если не включена
 
  • Спасибо
Реакции: Dmitriy_Zenno

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
Попробуйте добавить в ваш код логику проверки наличия нужного элемента, если элемент не найден, то выведите в лог все данные //body (xPath) и посмотрите, что на самом деле видит ZP.
Основная сложность в том, что у вас в функциях не корректно отрабатывают данные. Например

Tab Tab1=instance.ActiveTab;
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");

Промотка не отрабатывает, пришлось использовать этот код, что бы промотка отработала
htmMain.ScrollIntoView(); // Прокрутит страницу прямо к элементу

Я уверен, что с кликами такая же фигня, только это доказать не могу, а вот для промотке есть сайт на котором промотка не отрабатывает
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43
Основная сложность в том, что у вас в функциях не корректно отрабатывают данные. Например

Tab Tab1=instance.ActiveTab;
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");

Промотка не отрабатывает, пришлось использовать этот код, что бы промотка отработала
htmMain.ScrollIntoView(); // Прокрутит страницу прямо к элементу

Я уверен, что с кликами такая же фигня, только это доказать не могу, а вот для промотке есть сайт на котором промотка не отрабатывает
Метод Tab1.FullEmulationMouseMoveToHtmlElement(htmMain); - не предназначен для скролла, он наводит мышку на элемент.
Для скролла используйте метод tab.FullEmulationMouseWheel(100,100);
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 170
Благодарностей
37
Баллы
48
Метод Tab1.FullEmulationMouseMoveToHtmlElement(htmMain); - не предназначен для скролла, он наводит мышку на элемент.
Для скролла используйте метод tab.FullEmulationMouseWheel(100,100);
Но у у меня в некоторых проектах данная функция Tab1.FullEmulationMouseMoveToHtmlElement(htmMain); перематывала страницу вниз
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
578
Благодарностей
246
Баллы
43
Но у у меня в некоторых проектах данная функция Tab1.FullEmulationMouseMoveToHtmlElement(htmMain); перематывала страницу вниз
Если элемент отсутствует на экране, но присутствует в DOM, то мышка на него наводится и получается эффект скролла, но не через колесо, а за счёт самого наведения. Проблема в том, что если элемент находится вне видимой области экрана, он может быть скрыт через JavaScript. В таком случае мышь «не видит» его и не может на него навестись.
 

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