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

marazmatik

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

xDESTROYx

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

marazmatik

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

Skrine

Client
Регистрация
05.02.2020
Сообщения
87
Благодарностей
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
Сообщения
87
Благодарностей
18
Баллы
8
Странный костыль но другого пока не придумал, если есть у кого еще решения прошу плиз поделится)
 

Skrine

Client
Регистрация
05.02.2020
Сообщения
87
Благодарностей
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 721
Баллы
113
мне показалось странным ждать первую кнопку аж 4 минуты, а вторую кнопку проверять сразу же , вообще без какой либо паузы после клика.
Вторая кнопка появляется быстрее чем работает код C# ?
 

Skrine

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

Skrine

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

Skrine

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
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
Сообщения
87
Благодарностей
18
Баллы
8

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