Решение капчи за счет нажатия чекбокса на Zennoposter в Cloudflare Turnstile

Fantomass

Client
Регистрация
13.04.2016
Сообщения
87
Благодарностей
38
Баллы
18
Но я считаю, что конкурс с громким заголовком ZennoLab Master должен нести в себе более сложные технически статьи.
Видимо не так много желающих писать сложные технические статьи, поэтому всякое разное и публикуется в рамках конкурса.
 

ZennoCat

Client
Регистрация
06.01.2020
Сообщения
46
Благодарностей
14
Баллы
8
Спасибо автору за интересный подход.
Я тоже столкнулся недавно с этой капчей и написал простой xpath который ведет к контейнеру в котором хранится данная капча и далее кликает по координатам (координаты всегда одинаковые так как размер контейнера в котором хранится капча не изменяется), но этот xpath необходимо изменять в зависимости от сайта на котором используется, а подход автора более универсальный.

Последний раз я делал клик по чекбоксу этой капчи таким образом:
Tab tab = instance.ActiveTab;

var captcha = tab.FindElementByXPath("//form/div/div/div", 0);

var coords = captcha.DisplacementInTabWindow;

tab.MouseClick(coords.X + 30, coords.Y + 30, "left", "click");
 
Последнее редактирование:

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
Добрый день

Решаем капчу с помощью с#, нажатием чекбокса на Cloudflare Turnstile

Альтернативный способ найти элемент на странице за счет поиска элемента по картинки преобразованной в base64. У зеннопостера при преобразовании Посмотреть вложение 128849 дается только демо код, который мы должны понять как работает, спасибо за это. Тут приведен пример работы поиска элемента чекбокса на капче Cloudflare Turnstile на странице за счет готового base64 кода.


Посмотреть вложение 128863



Почему так, Посмотреть вложение 128850 потому что у зеннопостера закрыт доступ к получению элементов shadow-root (closed) , ждем в зеннопостере 8, а пока работаем как можем

C#:
void setE(string word){  throw new Exception(word); }

int tyBrtype=0;
string tp = instance.BrowserType.ToString().ToLower();
if (tp.Equals("chromium")){ tyBrtype=1; }

if(tyBrtype!=1){ setE("Только для Сhromium"); }

Tab tab = instance.ActiveTab;

var imgHash = "iVBORw0KGgoAAAANSUhEUgAAADAAAAA9CAYAAADrnOpZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAETSURBVGhD7doxDoIwGIbhXye4AjsbI5wDRjgEE1fgBhyAlRHOwcrGxCkY1TbVBDUO+psvTb5nKWUgfWk0qfF0uRGP2YBt29zUP4+AKIrcLb+c3egtBqAxAI0BaAxAYwAaA9AYgMYANAagqZ2J932XaZpkWRZ7rSXLMsnzXMIwdHeO1HZgGAaZ51l18YZ55jiObvZKbQeaprFjXdcSx7G9/tW6rtJ1nX37bdu6u0fqnwGtxRv3Z33aVX4LoTEAjQFoDEBjABoD0BiAxgA0Bjwzx0At92cFQWDHd9TOxH3f218k/iFNU6mqys2O1HagLEtJkuTj2/qGWXxRFG72iv+VQGMAGgPQGIDGADQGoDEAzfMAkStWLWCMR24thgAAAABJRU5ErkJggg==";
      
  
            Document mainDocument = tab.MainDocument;
            if (mainDocument.IsVoid){ return -1; }
            //ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
            string rectangleString = tab.FindImage(imgHash, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 90);
            if (!String.IsNullOrWhiteSpace(rectangleString)){
                string[]split = rectangleString.Split(',');
                Rectangle rectangle = new System.Drawing.Rectangle(System.Convert.ToInt32(split[0].Trim()), System.Convert.ToInt32(split[1].Trim()), System.Convert.ToInt32(split[2].Trim()), System.Convert.ToInt32(split[3].Trim()));
                if (!rectangle.IsEmpty){
                    rectangle = new System.Drawing.Rectangle(rectangle.X + 30, rectangle.Y + 34, 6, 6);
              
                    tab.RiseEvent("click", rectangle, "Left");
              

                }
          
            }

Спасибо за внимание


Дополнительно: как получить base64 - делаем снимок экрана, далее заходим в paint , там выделяем объект что нужно искать , сохраняем, заходим на https://www.base64-image.de/ , загружаем картинку получаем base64 код
решение необычное. Но необычайно долгое. Для этого можно использовать OpenCv которое отработает гораздо быстрее. Но есть один маленький нюанс, который стреляет в первую очередь по нервной системе, это замечательный старый netframework 4.6 который не поддерживается... костыль это делать отдельный exe файл или на другом языке делать костыль.

129106
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
327
Благодарностей
83
Баллы
28
решение необычное. Но необычайно долгое. Для этого можно использовать OpenCv которое отработает гораздо быстрее. Но есть один маленький нюанс, который стреляет в первую очередь по нервной системе, это замечательный старый netframework 4.6 который не поддерживается... костыль это делать отдельный exe файл или на другом языке делать костыль.

Посмотреть вложение 129106
OpenCv прекрасно работает внутри зеннопостера. С совместимостью есть небольшая сложность, но решаема без использования сторонней программы... Хотя , многим будет удобнее конечно.. Если для себя...
Ну а то что зенковский способ поиска по картинке тормоз... Так об этом писали несколько лет назад.
Однако, если модифицировать представленный код, так что бы он искал не по всему скрину страницы, а в пределах родительского фрейма капчи, и потом немного прдрасчитать координаты, то думаю будет быстрее шуршать и меньше жрать процессор.
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
OpenCv прекрасно работает внутри зеннопостера. С совместимостью есть небольшая сложность, но решаема без использования сторонней программы... Хотя , многим будет удобнее конечно.. Если для себя...
Ну а то что зенковский способ поиска по картинке тормоз... Так об этом писали несколько лет назад.
Однако, если модифицировать представленный код, так что бы он искал не по всему скрину страницы, а в пределах родительского фрейма капчи, и потом немного прдрасчитать координаты, то думаю будет быстрее шуршать и меньше жрать процессор.
Не подскажешь как решается проблема с совместимостью я пытался использовать тот же OpenCvSharp но получаю

129113

хотя сам проект был создан с версией 4.6.2 framework
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
327
Благодарностей
83
Баллы
28

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
327
Благодарностей
83
Баллы
28
Да, пробовал версию урезать, не помогаетПосмотреть вложение 129129
Создаешь проект vs из зенки
В нем подрубаешь опенсв
Компилируешь проект
Идешь в папку, копируешь DLL опенсв и его нативки, которые находятся в подпапке DLL
Идешь в экстернал зенки, вставляешь скопированное, с сохранением структуры.
В шаблоне подключаешь только одну DLL опенсв, нативки не трогаешь.

Если все сделал, попробуй тестовый код. Возможно этого хватит. Ну а если будет ругаться на систем. Драйвинг, тогда напишешь, продолжим разбор.
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
Создаешь проект vs из зенки
В нем подрубаешь опенсв
Компилируешь проект
Идешь в папку, копируешь DLL опенсв и его нативки, которые находятся в подпапке DLL
Идешь в экстернал зенки, вставляешь скопированное, с сохранением структуры.
В шаблоне подключаешь только одну DLL опенсв, нативки не трогаешь.

Если все сделал, попробуй тестовый код. Возможно этого хватит. Ну а если будет ругаться на систем. Драйвинг, тогда напишешь, продолжим разбор.
Бился порядка часов 3, ни в какую не хотело работать. В конечном итоге скомпилировал первые версии библиотеки и сразу все завелось -_-.
 

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