Движение слайдера

baracuda

Client
Регистрация
19.06.2013
Сообщения
911
Благодарностей
316
Баллы
63
Собственно вопрос. есть капча. аналогия Geetest. классический слайдер сдвиг вправо. Диапазон движения ~150-300px.
Беда в то что не могу понять почему то перелёт, то недолёт. от 15 до 100px. Уже и руками проверял. и в ручную прописывал сколько точно надо сдвинут.
Но всё безуспешно. Редко очень сдвигает примерно на нужное расстояние. Пока остановился на том что страница имеет закодированные хитрые JS которые мне всё ломает.

Может кто то встречался с данной проблемой.

Дополняю один из самых простых вариантов кода которые я пробовал.
C#:
    // Читаем переменные 
    int offset = int.Parse(project.Variables["captcha_screen_offset"].Value);
    int startX = int.Parse(project.Variables["captcha_slider_center_x"].Value);
    int startY = int.Parse(project.Variables["captcha_slider_center_y"].Value);

    // Коррекция (если нужно)
    int CORRECTION = 0; // Меняй: +10 если недоезжает, -10 если переезжает
    int finalOffset = offset + (Math.Sign(offset) * CORRECTION);
    
    int targetX = startX + finalOffset;
 
    // ВСЁ ДВИЖЕНИЕ — 3 КОМАНДЫ:
    instance.ActiveTab.FullEmulationMouseMove(startX, startY);  // 1. Навели
    Thread.Sleep(100);
    
    instance.ActiveTab.FullEmulationMouseClick("left", "down"); // 2. Зажали
    Thread.Sleep(50);
    
    instance.ActiveTab.FullEmulationMouseMove(targetX, startY); // 3. Потянули
    Thread.Sleep(200);
    
    instance.ActiveTab.FullEmulationMouseClick("left", "up");   // 4. Отпустили
    Thread.Sleep(300);
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
175
Благодарностей
101
Баллы
43
Собственно вопрос. есть капча. аналогия Geetest. классический слайдер сдвиг вправо. Диапазон движения ~150-300px.
Беда в то что не могу понять почему то перелёт, то недолёт. от 15 до 100px. Уже и руками проверял. и в ручную прописывал сколько точно надо сдвинут.
Но всё безуспешно. Редко очень сдвигает примерно на нужное расстояние. Пока остановился на том что страница имеет закодированные хитрые JS которые мне всё ломает.

Может кто то встречался с данной проблемой.

Дополняю один из самых простых вариантов кода которые я пробовал.
C#:
    // Читаем переменные
    int offset = int.Parse(project.Variables["captcha_screen_offset"].Value);
    int startX = int.Parse(project.Variables["captcha_slider_center_x"].Value);
    int startY = int.Parse(project.Variables["captcha_slider_center_y"].Value);

    // Коррекция (если нужно)
    int CORRECTION = 0; // Меняй: +10 если недоезжает, -10 если переезжает
    int finalOffset = offset + (Math.Sign(offset) * CORRECTION);
 
    int targetX = startX + finalOffset;

    // ВСЁ ДВИЖЕНИЕ — 3 КОМАНДЫ:
    instance.ActiveTab.FullEmulationMouseMove(startX, startY);  // 1. Навели
    Thread.Sleep(100);
 
    instance.ActiveTab.FullEmulationMouseClick("left", "down"); // 2. Зажали
    Thread.Sleep(50);
 
    instance.ActiveTab.FullEmulationMouseMove(targetX, startY); // 3. Потянули
    Thread.Sleep(200);
 
    instance.ActiveTab.FullEmulationMouseClick("left", "up");   // 4. Отпустили
    Thread.Sleep(300);
Тут может быть несколько разных проблем, начиная с отправки картинки для предикта заканчивая сайтом. У Geetest одна капча слайдер, где нужно передвинуть "пазл" в "отмеченое" место, если я правильно понял.

1) Судя по переменным project.Variables["captcha_slider_center_x"].Value и project.Variables["captcha_slider_center_y"].Value ты пытаешься высчитать центр того места куда нужно сдвинуть и в этом ошибка, всегда будет перелет, так как не добавлена корректировка центра у слайдера. Я не знаю какие данные отправляют сервисы по разгадывания капчи, потому, что разгадывание в свое время капчи гитеста я обучал сам, что бы он мне возвращал координаты в формате yolo (это X/Y левого верхнего угла и X/Y правого нижнего) и я просто из них брал X левой стороны, это и бы оффсет смещения, без вычитывания центра. Т.е допустим с левой стороны крайняя точка где начинается фигура 172px по X, значит нужно сместить сладер на 172px

2) Возможно проблема с разрешением картинки которую нужно распознать.
а) Ты берешь исходник картинки выдергивая ее ссылку для конвертации в base64, по ссылке картинка в своем родном разрешении, но на сайте может быть прописано сжатие/расширение разрешения, ты получишь правильный ответ распознавания, но он не подойдет, так как на сайте другие координаты из-за оффсетов отображения.
б) Картинка сжимается/расширяется перед отправкой или на сервере распознавания, в таком случае тоже получишь не правильные координаты

3) Возможно слайдер имеет всегда разную начальную точку. Т.е у Geetest, сладер имеел всегда одинаковую начальную точку и ее можно было всегда считать за 0, но однажды мне попалась китайская капча аналог Geetest и там сладер имел всегда разные начальные координаты, что бы делать под нее распознавания, нужно было высчитывать на сколько пикселей сдвинут изначально слайдер. Делается просто, береться TopInTab/topInBrowser Слайдера и Трека и получаешься смешение по простой формуле (Слайдер - Трек) и минусуешь это значение от полученых координат для смещения.

4) Получаешь не правильные координаты от сервиса по разгадыванию. Проверить легко, сохрани картинку себе на пк, отправь ее на сервер, получи результаты, открой картинку в паинт и выстави точки которые прислал сервер, что бы исключить/подтвердить этот вариант

5) Более замудреная капча, тоже попадалась такая, когда фигура двигалась не синхронно с ползунком
 
Последнее редактирование:

baracuda

Client
Регистрация
19.06.2013
Сообщения
911
Благодарностей
316
Баллы
63
вот 5тый вариант в точку..

пока остановился на другой теории.
У нас есть ползунок и есть пазл.
Вроде как одно целое. двигаешь ползунок. двигается капча... нажал, сдвинут, отжал
Но на длинных дистанция я заметил.. что скорость движения ползунка неравно движению пазла. отсюда и разбеги. ползунок то мы правильно двигаем.. а вот пазл или отстаёт или быстрее "бежит". а когда мы пытаемся имитировать человека и из одного движения делать много, тут полнейшее дёргание начинается(и это наблюдается).. теперь вроде надо понять как это синхронизировать, перехватить скорость перемещения, или коэф..
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
175
Благодарностей
101
Баллы
43
вот 5тый вариант в точку..

пока остановился на другой теории.
У нас есть ползунок и есть пазл.
Вроде как одно целое. двигаешь ползунок. двигается капча... нажал, сдвинут, отжал
Но на длинных дистанция я заметил.. что скорость движения ползунка неравно движению пазла. отсюда и разбеги. ползунок то мы правильно двигаем.. а вот пазл или отстаёт или быстрее "бежит". а когда мы пытаемся имитировать человека и из одного движения делать много, тут полнейшее дёргание начинается(и это наблюдается).. теперь вроде надо понять как это синхронизировать, перехватить скорость перемещения, или коэф..
найди js капчи, там все настройки и скорми этот js нейронке что бы он объяснил как рассчитывается траектория. Я не так давно пробовал не с капчей, а узнать какие данные собирает сайт и он очень хорошо проанализировал js. Такое пробовал через qwen, он проанализировал js
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
911
Благодарностей
316
Баллы
63
ещё вчера.. но только мимо. там всё зашифровано дальше некуда, что касаемо капчи... а так да, по данным тоже посмотрел что собирает.
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
911
Благодарностей
316
Баллы
63
Готово.. осталось дообучить и бинго... решил вопрос. движением мелким и постоянно мониторингом позиции пазла..
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
175
Благодарностей
101
Баллы
43
Готово.. осталось дообучить и бинго... решил вопрос. движением мелким и постоянно мониторингом позиции пазла..
Я не знаю, что за капча, но можно попробовать отслеживать саму фигуру которая движется, зная где она должна оказаться, отслеживать и корректировать ее координаты. У гитеста точно можно
 

Вложения

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