полная эмуляция мыши кликает не туда куда нужно

marazmatik

Client
Регистрация
24.01.2013
Сообщения
90
Благодарностей
9
Баллы
8
Каптча находится во врейме, я кликают на нужные элементы, но клики идут вообще в других местах, если отключать полную эмуляцию клики попадают туда куда нужно, кто нибудь сталкивался? Делал через c# тоже самое кликает в другие места.
 

xDESTROYx

Client
Регистрация
21.09.2019
Сообщения
224
Благодарностей
37
Баллы
28
тема старая а баг не исправили
 

marazmatik

Client
Регистрация
24.01.2013
Сообщения
90
Благодарностей
9
Баллы
8
может есть какие нибудь костыли? я уже чего только не перепробовал и чисто мобильное расширение делал что бы все на 1 экране было все равно тыкает не туда
 

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8
Такая же частая проблемма... 20 раз клацает куда надо, 1 туда куда вовсе не надо...единственное что придумал это проверку на то что должно было произойти после клика


Tab tab = instance.ActiveTab;
Random rnd = new Random();

//обозначаем когда начали деяние
var minuts_start = Convert.ToInt32(DateTime.Now.ToString("mm"));
var hours_start = Convert.ToInt32(DateTime.Now.ToString("hh"));

// таймаут выполнения блока
var NoMoney_load = false;
while (NoMoney_load == false){
var minuts_now = Convert.ToInt32(DateTime.Now.ToString("mm"));
var hours_now = Convert.ToInt32(DateTime.Now.ToString("hh"));
//если он за 4 минуты не видит кнопку то завершается (бывает прокси хреновые и кнопки реально долго нет)
if (hours_start!=hours_now||minuts_start+4<minuts_now) {
project.SendInfoToLog("Закончилось время ожидания", true);
project.Variables["error"].Value="error";
return "Харош";}

//ищем кнопку
HtmlElement oke = instance.ActiveTab.GetDocumentByAddress("0;_8;_1").FindElementByAttribute("button", "innerhtml", "Оформить подписку", "text", 0);
if (!oke.IsVoid) {
instance.ActiveTab.FullEmulationMouseSetOptions(5,5,rnd.Next(15,20));
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(oke);
Thread.Sleep(rnd.Next(300,500));
instance.ActiveTab.FullEmulationMouseClick("left", "click");}

//Эта кнопка должна появится после нажатия первой
//если эта кнопка не появилась, то он начинает while заного
HtmlElement NoMoney = instance.ActiveTab.GetDocumentByAddress("0;_8").FindElementByAttribute("span", "innertext", "Закрыть", "regexp", 0);
if (!NoMoney.IsVoid) {
NoMoney_load = true;
Thread.Sleep(rnd.Next(3000,6000));
instance.ActiveTab.FullEmulationMouseSetOptions(5,5,rnd.Next(15,20));
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(NoMoney);
Thread.Sleep(rnd.Next(300,500));
//завершаем вайл
continue;
}

}
//ну тут просто махаем мышкой
project.SendInfoToLog("Махаем мышкой");
for (var i=0;i<rnd.Next(1,3);i++) {
Thread.Sleep(rnd.Next(500,2000));
instance.ActiveTab.FullEmulationMouseSetOptions(5,5,rnd.Next(15,25));
instance.ActiveTab.FullEmulationMouseMove(rnd.Next(100,800),rnd.Next(100,400));
}
 

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8
Странный костыль но другого пока не придумал, если есть у кого еще решения прошу плиз поделится)
 

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8
вот еще если должен смениться урл после клаца мыши на примере стартовой яндекса




project.SendInfoToLog("Ищу кнопку", true);
Random rnd = new Random();

var minuts_start = Convert.ToInt32(DateTime.Now.ToString("mm"));
var hours_start = Convert.ToInt32(DateTime.Now.ToString("hh"));

Tab tab = instance.ActiveTab;
string url = tab.URL;
string url1 = tab.URL;
project.SendInfoToLog("Начальная страница "+url , true);



while (url == url1)
{
url1 = tab.URL;
if (url=="about:blank"||url1=="about:blank"){return"вобще ничего не загружается";}

var minuts_now = Convert.ToInt32(DateTime.Now.ToString("mm"));
var hours_now = Convert.ToInt32(DateTime.Now.ToString("hh"));
if (hours_start!=hours_now||minuts_start+2<minuts_now) {
project.SendInfoToLog("Харош", true);
return "Харош";}
// Конструктор действий, тип Set
HtmlElement her = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("div", "class", "home-logo__default", "regexp", 0);
if (!her.IsVoid) {
project.SendInfoToLog("Ищу кнопку найти", true);
HtmlElement find = instance.ActiveTab.GetDocumentByAddress("0").FindElementByTag("form", 0).FindChildByAttribute("button", "innertext", "Найти", "text", 0);
instance.ActiveTab.FullEmulationMouseSetOptions(5,5,rnd.Next(6,15));
instance.ActiveTab.FullEmulationMouseMove(rnd.Next(150,900),rnd.Next(150,700));
instance.ActiveTab.FullEmulationMouseMove(rnd.Next(150,400),rnd.Next(150,200));
project.SendInfoToLog("Сплю 5-10сек", true);
Thread.Sleep(rnd.Next(5000,10000));
project.SendInfoToLog("клацаю", true);
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(find);
instance.ActiveTab.FullEmulationMouseClick("left", "click");
project.SendInfoToLog("нажал на кнопку найти", true);

}}
project.SendInfoToLog("зафиксирован переход на "+ url1, true);
project.SendInfoToLog("едем дальше", true);
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 736
Баллы
113
мне показалось странным ждать первую кнопку аж 4 минуты, а вторую кнопку проверять сразу же , вообще без какой либо паузы после клика.
Вторая кнопка появляется быстрее чем работает код C# ?
 

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8
мне показалось странным ждать первую кнопку аж 4 минуты, а вторую кнопку проверять сразу же , вообще без какой либо паузы после клика.
Вторая кнопка появляется быстрее чем работает код C# ?
Туды можно затолкать еще ожидание по желанию)
 
Последнее редактирование:

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8
он ищет сразу обе кнопки, если не находит вторую по истечению времени только тогда срабатывает таймаут... когда он нашел первую он может её не нажать,(почему то из 10 раз 1 раз мимо клацает) и когда скрипт начинается заного, он видя её пытается нажать еще раз (понимает что она досих пор есть и он её не кликнул)
 
Последнее редактирование:

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 736
Баллы
113
а вообще он ищет сразу обе кнопки, если не находит вторую по истечению времени только тогда срабатывает таймаут... когда он нашел первую он может её не нажать,(почему то из 10 раз 1 раз мимо клацает) и когда скрипт начинается заного, он видя её пытается нажать еще раз (понимает что она досих пор есть и он её не кликнул)
еще раз повторю. все действия происходят на веб странице. соответственно, даже без прокси, реакция сайта и получения изменившегося состояния сайта занимает какое то время.
а код c# выполняется намного быстрее чем приходит ответ от сайта. поэтому после клика по первой кнопке, следующий поиск не найдет результата и по циклу уйдет на повтор поиска первой кнопки. найдет ее и повторно ее жмякнет. эдакий нервный пользователь который 100500 раз нажимает на кнопку на медленном сайте :-)
конечно возможно в твоем случае вторая кнопка появляется средствами js страницы и просто иногда js недостаточно быстро ее рисует, поэтому у тебя 1 раз из 10 как бы пролетает что не нажал.
но на универсальное решение явно не тянет.
Универсальное это сделать снипет или функцию в общем коде, которая в течении какого-то времени ожидает появления нужного элемента или нескольких одновременно и возвращает результат своей работы в виде кода. ну там типа -1 не нашел ничего, 1 нашел первый элемент, 2 нашел 2-й элемент. ну и тд и тп.
и на основании этого кода принимается какое то решение в логике.

ну вот например, кликнул бот по кнопке, а результат может быть неоднозначным. я делаю так.
ожидаю появления одного из 2-х контрольных элементов, а потом принимаю решение что же делать дальше.

65732

ну и еще. лично я считаю нехорошим вариантом лепить код работы с инстансом в цикле и без контроля выполнения команд. особенно это касается кода для работы с фулэмулятион. вот тут описывал почему я так считаю. https://zennolab.com/discussion/threads/lovim-zavisshie-instansy.72949/
 
  • Спасибо
Реакции: alexsandroid и Skrine

Skrine

Client
Регистрация
05.02.2020
Сообщения
88
Благодарностей
18
Баллы
8

vasenko

Client
Регистрация
23.09.2024
Сообщения
67
Благодарностей
14
Баллы
8
Пожалуй подниму, столкнулся с аналогичной проблемой
 

AntonBust

Новичок
Регистрация
27.03.2025
Сообщения
29
Благодарностей
7
Баллы
3
Пожалуй подниму, столкнулся с аналогичной проблемой
О я тут не один в 2025
Тоже столкнулся с проблемой что мышка не туда кликает, а на 20-30 пикселей смещается
Причем я отключил полную эмуляцию
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 439
Благодарностей
10 000
Баллы
113
Пожалуй подниму, столкнулся с аналогичной проблемой
О я тут не один в 2025
Тоже столкнулся с проблемой что мышка не туда кликает, а на 20-30 пикселей смещается
Причем я отключил полную эмуляцию
У программистов есть активная таска по этой теме.
Нужно будет подождать решения по ней и снова проверить.
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
2 034
Благодарностей
1 834
Баллы
113
У программистов есть активна таска по этой теме.
Нужно будет подождать решения по ней и снова проверить.
Как долго придётся ждать? Пожалуйста сориентируйте по времени если это возможно.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 439
Благодарностей
10 000
Баллы
113
Как долго придётся ждать? Пожалуйста сориентируйте по времени если это возможно.
У меня нет сроков, даже ориентировочных, но надеюсь, что не оч. долго осталось ждать.
 
  • Спасибо
Реакции: samsonnn

zarufakis

Client
Регистрация
22.03.2019
Сообщения
2 017
Благодарностей
1 440
Баллы
113

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 425
Благодарностей
743
Баллы
113
* главное ставить разрешение меньше экрана физического (или rdp, по которому подключаешься), я ставил 800х600
 
  • Спасибо
Реакции: VladV777

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