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

  • Автор темы Автор темы lutic
  • Дата начала Дата начала
Но я считаю, что конкурс с громким заголовком ZennoLab Master должен нести в себе более сложные технически статьи.
Видимо не так много желающих писать сложные технические статьи, поэтому всякое разное и публикуется в рамках конкурса.
 
Спасибо автору за интересный подход.
Я тоже столкнулся недавно с этой капчей и написал простой 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");
 
Последнее редактирование:
Добрый день

Решаем капчу с помощью с#, нажатием чекбокса на 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
 
решение необычное. Но необычайно долгое. Для этого можно использовать OpenCv которое отработает гораздо быстрее. Но есть один маленький нюанс, который стреляет в первую очередь по нервной системе, это замечательный старый netframework 4.6 который не поддерживается... костыль это делать отдельный exe файл или на другом языке делать костыль.

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

129113

хотя сам проект был создан с версией 4.6.2 framework
 
Да, пробовал версию урезать, не помогаетПосмотреть вложение 129129
Создаешь проект vs из зенки
В нем подрубаешь опенсв
Компилируешь проект
Идешь в папку, копируешь DLL опенсв и его нативки, которые находятся в подпапке DLL
Идешь в экстернал зенки, вставляешь скопированное, с сохранением структуры.
В шаблоне подключаешь только одну DLL опенсв, нативки не трогаешь.

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

Если все сделал, попробуй тестовый код. Возможно этого хватит. Ну а если будет ругаться на систем. Драйвинг, тогда напишешь, продолжим разбор.
Бился порядка часов 3, ни в какую не хотело работать. В конечном итоге скомпилировал первые версии библиотеки и сразу все завелось -_-.
 
  • Спасибо
Реакции: spbalexpiter
Сомнительно, если людям нужен поиск по картинке, они так и вбивают запрос: "поиск элемента по картинке", а не
"System.Resources.ResourceManager"
вы не правы)) я эту тему как раз и нашел по ResourceManager
 

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