- Регистрация
- 10.03.2016
- Сообщения
- 98
- Благодарностей
- 54
- Баллы
- 18
Привет зеноводам!
В этой статье хочу расказать о способе решения капчи Cloudflare. Способ почти универсален
Думаю уже давно ни для кого не секрет, что данный тип капчи проходится обычным кликом по определенному полю капчи. После чего мы получаем зеленую галку и капча пройдена. Но на деле не все так просто.
Первая проблема с которой мы можем столкнутся, это постоянное обновление капчи после клика. В большинстве случаев эту проблему можно решить обновлением версии Зеннопостер и перегенерацией профилей. Иногда достаточно подмены юзерагента, включения изоляции и тд. На форуме эти вопросы подымались, поэтому на них останавливатся не будем.
Рассморим вторую проблему - клик по полю капчи.
Основная проблема тут - это тень shadow-root, да еще и закрытая (closed). А это значит, что добратся до нужного элемента никакими способами Зеннопостер у нас не получится. Да, можно сделать банально через клик по картинке, но это способ не всегда работает. Поэтому попробуем сделать более универсальное решение.
Для примера взят рандомный кран https://testnet.megaeth.com/ Переходим по ссылке, дальше вкладка faucet, ждем загрузки капчи, дальше ПКМ на капче и пункт "посмотреть код"
Видим надпись shadow-root (closed), следовательно все что находится ниже нам не доступно. Но если внимательно изучить код, то можно заметить, что выше есть елементы (теги div) в которые обернуто окно капчи, но сами они находятся не под тенью! Этим мы и воспользуемся.
Ищем выше shadow-root (closed) елемент в который обернута капча и если у него нет удобных атрибутов - перемещаемся выше в поисках нужного элемента со статичными атрибутами, после чего с помощью xpath уже создаем путь к элементу в который обернута капча.
В данном случае это тег div id="cf-turnstile" но так как у него атрибуты не уникальные, то я составил путь от тега "р" который находится выше и имеет уникальный текст "Maximum 0.005 testnet..." Вставляем наш xpath путь в строку поиска и видим, что подсветился нужный нам элемент, а это значит, что xpath составлен верно.
Теперь, когда у нас есть путь к элементу, нужно получить координаты его левого верхнего угла, сделать смещение в сторону нужной области и кликнуть. Ниже приведен код который это реализует.
Но перед тем как делать клик, логично проверить не пройдена ли капча автоматом, если нет - кликнуть и снова проверить есть ли галка.
Чтобы узнать статус капчи найдем на странице поле куда пишется токен после успешного решения и проверим наличие токена.
Если токен есть - капча пройдена, если поле пустое - делаем клик и проверяем наличие токена. Кстати в коде добавлен счетчик попыток прохождения капчи, дабы избежать бесконечного цыкла при неудачах.
Для адаптации кода под другие сайты нужно всего лишь составить правильный xpath к нужному элементу.
Для лучшего понимания видео дополнение:
На этом все, надеюсь информация будет полезной.
Шаблон с примером логики прикрепляю.
Всем удачных прохождений капчи)
В этой статье хочу расказать о способе решения капчи Cloudflare. Способ почти универсален

Думаю уже давно ни для кого не секрет, что данный тип капчи проходится обычным кликом по определенному полю капчи. После чего мы получаем зеленую галку и капча пройдена. Но на деле не все так просто.
Первая проблема с которой мы можем столкнутся, это постоянное обновление капчи после клика. В большинстве случаев эту проблему можно решить обновлением версии Зеннопостер и перегенерацией профилей. Иногда достаточно подмены юзерагента, включения изоляции и тд. На форуме эти вопросы подымались, поэтому на них останавливатся не будем.
Рассморим вторую проблему - клик по полю капчи.
Основная проблема тут - это тень shadow-root, да еще и закрытая (closed). А это значит, что добратся до нужного элемента никакими способами Зеннопостер у нас не получится. Да, можно сделать банально через клик по картинке, но это способ не всегда работает. Поэтому попробуем сделать более универсальное решение.
Для примера взят рандомный кран https://testnet.megaeth.com/ Переходим по ссылке, дальше вкладка faucet, ждем загрузки капчи, дальше ПКМ на капче и пункт "посмотреть код"
Видим надпись shadow-root (closed), следовательно все что находится ниже нам не доступно. Но если внимательно изучить код, то можно заметить, что выше есть елементы (теги div) в которые обернуто окно капчи, но сами они находятся не под тенью! Этим мы и воспользуемся.
Ищем выше shadow-root (closed) елемент в который обернута капча и если у него нет удобных атрибутов - перемещаемся выше в поисках нужного элемента со статичными атрибутами, после чего с помощью xpath уже создаем путь к элементу в который обернута капча.
В данном случае это тег 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");
Чтобы узнать статус капчи найдем на странице поле куда пишется токен после успешного решения и проверим наличие токена.
Если токен есть - капча пройдена, если поле пустое - делаем клик и проверяем наличие токена. Кстати в коде добавлен счетчик попыток прохождения капчи, дабы избежать бесконечного цыкла при неудачах.
Для адаптации кода под другие сайты нужно всего лишь составить правильный xpath к нужному элементу.
Для лучшего понимания видео дополнение:
На этом все, надеюсь информация будет полезной.
Шаблон с примером логики прикрепляю.
Всем удачных прохождений капчи)
Вложения
-
249,6 КБ Просмотры: 3
-
14,1 КБ Просмотры: 7
Последнее редактирование: