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

kul0n

Client
Регистрация
10.03.2016
Сообщения
119
Реакции
80
Баллы
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 к нужному элементу.

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

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

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

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

Вложения

  • 1750628697904.png
    1750628697904.png
    249,6 KB · Просмотры: 125
  • megaETHfaucet.zp
    megaETHfaucet.zp
    14,1 KB · Просмотры: 230
Последнее редактирование:
Покачто полезная информация, но код кнопки часто меняется
о каком коде речь? капча же под тенью. Пользуюсь этим решением около 6 мес. все прекрасно рабоатает, если правильно составить xpath
 
Покачто полезная информация, но код кнопки часто меняется

о каком коде речь? капча же под тенью. Пользуюсь этим решением около 6 мес. все прекрасно рабоатает, если правильно составить xpath
подтверждаю - пользуюсь таким подходом из статичной функции которою сделал много месяцев назад. все работатет - тут для плашки CF код +- одинаковый и на странице вполне себе ищется, а код под плашкой нам не нужен - в этом и смысл
 
Первая проблема с которой мы можем столкнутся, это постоянное обновление капчи после клика. В большинстве случаев эту проблему можно решить обновлением версии Зеннопостер и перегенерацией профилей. Иногда достаточно подмены юзерагента, включения изоляции и тд. На форуме эти вопросы подымались, поэтому на них останавливатся не будем.
Можно ссылку на методы решения бесконечной капчи?
 
  • Спасибо
Реакции: kul0n
Можно ссылку на методы решения бесконечной капчи?
поискал по форуму, что то уже и сам не могу найти те топики. У меня как правило проблема решалась обновлением зенки. Если зенка старая и сайт не секретный -киньте линк попробую на новой версии
 
С
поискал по форуму, что то уже и сам не могу найти те топики. У меня как правило проблема решалась обновлением зенки. Если зенка старая и сайт не секретный -киньте линк попробую на новой версии
Спасибо, но у меня последняя версия
Не помогло обновление, в этом и дело(((
 
С

Спасибо, но у меня последняя версия
Не помогло обновление, в этом и дело(((
а что за сайт если не секрет? я просто ниразу такого не встречал чтобы была постоянная перезагрузка, по крайней мере на своих профилях
 
Последнее редактирование:
Очень хорошое решение Спасибо)
 
  • Спасибо
Реакции: kul0n
а что за сайт если не секрет? я просто ниразу такого не встречал чтобы была постоянная перезагрузка, по крайней мере на своих профилях

на twitter такое есть
136155
 
Как под этот сервис 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");
 
если зенка не древняя, то как вариант проблема может быть в проксях

зенка последняя. прокси разные перепробовал. эта проблема появляется не сразу. бот дня 4 работал без проблем
 
зенка последняя. прокси разные перепробовал. эта проблема появляется не сразу. бот дня 4 работал без проблем
видимо твитеру что то не понравилось в действиях акков и он усложнил прохождение капчи.если акки морозятся, пробуйте делать меньше действий в сутки.
 
Последнее редактирование:
видимо твитеру что то не понравилось в действиях акков и он усложнил прохождение капчи.если акки морозятся, пробуйте делать меньше действий в сутки.

да, наверное надо лучше прогревать и уменьшить активность. спасибо, попробую
 
  • Спасибо
Реакции: kul0n
Подскажите как исправить эту ошибку? Делал всё по инструкции.



137503
137504
 
Подскажите как исправить эту ошибку? Делал всё по инструкции.



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

Как обычно. Сам спросил - сам ответил. Переменную не создал, которая в коде. Кликает. Только ошибку выдаёт. Даже если руками в project maker.

137505
 
Последнее редактирование:
Как обычно. Сам спросил - сам ответил. Переменную не создал, которая в коде. Кликает. Только ошибку выдаёт. Даже если руками в project maker.

Посмотреть вложение 137505
На движке Chromium ProjectMaker 7.8.12.0 эту капчу даже кликать не надо, она сама зеленой становится через пару секунд после прогрузки. Если у вас не так, то пробуйте сменить прокси.
 
На движке Chromium ProjectMaker 7.8.12.0 эту капчу даже кликать не надо, она сама зеленой становится через пару секунд после прогрузки. Если у вас не так, то пробуйте сменить прокси.
прокси дешман, поэтому приходится кликать, в итоге так дешевле ;)
 
На движке Chromium ProjectMaker 7.8.12.0 эту капчу даже кликать не надо, она сама зеленой становится через пару секунд после прогрузки. Если у вас не так, то пробуйте сменить прокси.
Ааа ну у меня 7.7.6 стоит до сих пор и захожу без прокси. Куплю адпейт тогда. Благодарю.
 

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