Решение капчи Cloudflare или клик по элементу под shadow-root (closed)

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
Привет зеноводам!

В этой статье хочу расказать о способе решения капчи Cloudflare. Способ почти универсален ;-)
Думаю уже давно ни для кого не секрет, что данный тип капчи проходится обычным кликом по определенному полю капчи. После чего мы получаем зеленую галку и капча пройдена. Но на деле не все так просто.
Первая проблема с которой мы можем столкнутся, это постоянное обновление капчи после клика. В большинстве случаев эту проблему можно решить обновлением версии Зеннопостер и перегенерацией профилей. Иногда достаточно подмены юзерагента, включения изоляции и тд. На форуме эти вопросы подымались, поэтому на них останавливатся не будем.
Рассморим вторую проблему - клик по полю капчи.
Основная проблема тут - это тень shadow-root, да еще и закрытая (closed). А это значит, что добратся до нужного элемента никакими способами Зеннопостер у нас не получится. Да, можно сделать банально через клик по картинке, но это способ не всегда работает. Поэтому попробуем сделать более универсальное решение.

Для примера взят рандомный кран https://testnet.megaeth.com/ Переходим по ссылке, дальше вкладка faucet, ждем загрузки капчи, дальше ПКМ на капче и пункт "посмотреть код"

134232


Видим надпись shadow-root (closed), следовательно все что находится ниже нам не доступно. Но если внимательно изучить код, то можно заметить, что выше есть елементы (теги div) в которые обернуто окно капчи, но сами они находятся не под тенью! Этим мы и воспользуемся.

134234


Ищем выше shadow-root (closed) елемент в который обернута капча и если у него нет удобных атрибутов - перемещаемся выше в поисках нужного элемента со статичными атрибутами, после чего с помощью xpath уже создаем путь к элементу в который обернута капча.

134235


В данном случае это тег div id="cf-turnstile" но так как у него атрибуты не уникальные, то я составил путь от тега "р" который находится выше и имеет уникальный текст "Maximum 0.005 testnet..." Вставляем наш xpath путь в строку поиска и видим, что подсветился нужный нам элемент, а это значит, что xpath составлен верно.
Теперь, когда у нас есть путь к элементу, нужно получить координаты его левого верхнего угла, сделать смещение в сторону нужной области и кликнуть. Ниже приведен код который это реализует.

click CloudFlare:
if (int.Parse(project.Variables["cnt"].Value) < 7)
{
    project.SendInfoToLog("Значение cnt меньше 7, величиваем");
    project.Variables["cnt"].Value = (int.Parse(project.Variables["cnt"].Value) + 1).ToString();

}
else
{
    project.Variables["cnt"].Value = "0"; // Устанавливаем значение переменной в 0
    throw new Exception("НЕ разгадали капчу");
}


Random rnd = new Random();

// Указываем XPath для элемента
string xpath = "//p[contains(text(), 'Maximum')]/ancestor::div/following-sibling::div//div";

// Находим элемент
HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("Элемент не найден по указанному XPath!");

// Получаем координаты элемента
string strX = he.GetAttribute("leftInbrowser");
string strY = he.GetAttribute("topInbrowser");

// Преобразуем координаты из строк в целые числа
if (!int.TryParse(strX, out int x) || !int.TryParse(strY, out int y))
{
    throw new Exception("Не удалось преобразовать координаты в числа.");
}

// Добавляем смещение по осям X и Y
int offsetX = 30;
int offsetY = 30;
int targetX = x + offsetX;
int targetY = y + offsetY;

// Перемещаем курсор к указанным координатам с полной эмуляцией
instance.ActiveTab.FullEmulationMouseMove(targetX,  targetY);

// Выполняем клик левой кнопкой мыши
instance.ActiveTab.FullEmulationMouseClick("left", "click");
Но перед тем как делать клик, логично проверить не пройдена ли капча автоматом, если нет - кликнуть и снова проверить есть ли галка.

Чтобы узнать статус капчи найдем на странице поле куда пишется токен после успешного решения и проверим наличие токена.

134236


Если токен есть - капча пройдена, если поле пустое - делаем клик и проверяем наличие токена. Кстати в коде добавлен счетчик попыток прохождения капчи, дабы избежать бесконечного цыкла при неудачах.
Для адаптации кода под другие сайты нужно всего лишь составить правильный xpath к нужному элементу.

Для лучшего понимания видео дополнение:

На этом все, надеюсь информация будет полезной.

Шаблон с примером логики прикрепляю.

Всем удачных прохождений капчи)
 

Вложения

Последнее редактирование:

Vancho

Client
Регистрация
20.10.2024
Сообщения
1
Благодарностей
3
Баллы
3
Спасибо за полезную информацию!
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 083
Благодарностей
593
Баллы
113

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
Покачто полезная информация, но код кнопки часто меняется
о каком коде речь? капча же под тенью. Пользуюсь этим решением около 6 мес. все прекрасно рабоатает, если правильно составить xpath
 

web3grep

Client
Регистрация
27.11.2023
Сообщения
69
Благодарностей
135
Баллы
33
Покачто полезная информация, но код кнопки часто меняется
о каком коде речь? капча же под тенью. Пользуюсь этим решением около 6 мес. все прекрасно рабоатает, если правильно составить xpath
подтверждаю - пользуюсь таким подходом из статичной функции которою сделал много месяцев назад. все работатет - тут для плашки CF код +- одинаковый и на странице вполне себе ищется, а код под плашкой нам не нужен - в этом и смысл
 

Khaan27

Client
Регистрация
06.10.2014
Сообщения
154
Благодарностей
25
Баллы
28
Первая проблема с которой мы можем столкнутся, это постоянное обновление капчи после клика. В большинстве случаев эту проблему можно решить обновлением версии Зеннопостер и перегенерацией профилей. Иногда достаточно подмены юзерагента, включения изоляции и тд. На форуме эти вопросы подымались, поэтому на них останавливатся не будем.
Можно ссылку на методы решения бесконечной капчи?
 
  • Спасибо
Реакции: kul0n

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
Можно ссылку на методы решения бесконечной капчи?
поискал по форуму, что то уже и сам не могу найти те топики. У меня как правило проблема решалась обновлением зенки. Если зенка старая и сайт не секретный -киньте линк попробую на новой версии
 

Khaan27

Client
Регистрация
06.10.2014
Сообщения
154
Благодарностей
25
Баллы
28
С
поискал по форуму, что то уже и сам не могу найти те топики. У меня как правило проблема решалась обновлением зенки. Если зенка старая и сайт не секретный -киньте линк попробую на новой версии
Спасибо, но у меня последняя версия
Не помогло обновление, в этом и дело(((
 

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
С

Спасибо, но у меня последняя версия
Не помогло обновление, в этом и дело(((
а что за сайт если не секрет? я просто ниразу такого не встречал чтобы была постоянная перезагрузка, по крайней мере на своих профилях
 

Agent

Client
Регистрация
25.12.2018
Сообщения
201
Благодарностей
56
Баллы
28
Последнее редактирование:

dimeor

Client
Регистрация
23.02.2018
Сообщения
54
Благодарностей
9
Баллы
8
Очень хорошое решение Спасибо)
 
  • Спасибо
Реакции: kul0n

lidoff

Client
Регистрация
15.04.2024
Сообщения
105
Благодарностей
10
Баллы
18
а что за сайт если не секрет? я просто ниразу такого не встречал чтобы была постоянная перезагрузка, по крайней мере на своих профилях
на twitter такое есть
136155
 

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
Как под этот сервис https://copyleaks.com/ru/ai-content-detector можно реализовать?
Капча возникает первый раз на 15 проверок с 1 ip.
C#:
if (int.Parse(project.Variables["cnt"].Value) < 7)
{
    project.SendInfoToLog("Значение cnt меньше 7, величиваем");
    project.Variables["cnt"].Value = (int.Parse(project.Variables["cnt"].Value) + 1).ToString();

}
else
{
    project.Variables["cnt"].Value = "0"; // Устанавливаем значение переменной в 0
    throw new Exception("НЕ разгадали капчу");
}


Random rnd = new Random();

// Указываем XPath для элемента
string xpath = "//cls-turnstile[contains(@class, 'turnstile-capcha')]";

// Находим элемент
HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("Элемент не найден по указанному XPath!");

// Получаем координаты элемента
string strX = he.GetAttribute("leftInbrowser");
string strY = he.GetAttribute("topInbrowser");

// Преобразуем координаты из строк в целые числа
if (!int.TryParse(strX, out int x) || !int.TryParse(strY, out int y))
{
    throw new Exception("Не удалось преобразовать координаты в числа.");
}

// Добавляем смещение по осям X и Y
int offsetX = 30;
int offsetY = 30;
int targetX = x + offsetX;
int targetY = y + offsetY;

// Перемещаем курсор к указанным координатам с полной эмуляцией
instance.ActiveTab.FullEmulationMouseMove(targetX,  targetY);

// Выполняем клик левой кнопкой мыши
instance.ActiveTab.FullEmulationMouseClick("left", "click");
 

lidoff

Client
Регистрация
15.04.2024
Сообщения
105
Благодарностей
10
Баллы
18
если зенка не древняя, то как вариант проблема может быть в проксях
зенка последняя. прокси разные перепробовал. эта проблема появляется не сразу. бот дня 4 работал без проблем
 

kul0n

Client
Регистрация
10.03.2016
Сообщения
111
Благодарностей
70
Баллы
28
зенка последняя. прокси разные перепробовал. эта проблема появляется не сразу. бот дня 4 работал без проблем
видимо твитеру что то не понравилось в действиях акков и он усложнил прохождение капчи.если акки морозятся, пробуйте делать меньше действий в сутки.
 
Последнее редактирование:

lidoff

Client
Регистрация
15.04.2024
Сообщения
105
Благодарностей
10
Баллы
18
видимо твитеру что то не понравилось в действиях акков и он усложнил прохождение капчи.если акки морозятся, пробуйте делать меньше действий в сутки.
да, наверное надо лучше прогревать и уменьшить активность. спасибо, попробую
 
  • Спасибо
Реакции: kul0n

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