Обход капчи Cloudflare: выбирай из двух противоположных методов

Автоматизированное тестирование, являющееся важнейшим аспектом непрерывной интеграции, часто сталкивается с проблемами при использовании таких мер безопасности, как капча. Необходимость в непрерывных и повторяющихся тестовых запусках может привести к срабатыванию механизмов безопасности, таких как Cloudflare CAPTCHA, что приводит к сбоям тестирования. Хотя во время выполнения теста можно отключить капчу, существуют сценарии, при которых это может оказаться неосуществимым. В этом тексте мы расскажем о Cloudflare CAPTCHA, сосредоточив внимание на автономной капче Standalone Cloudflare Turnstile Captcha и Cloudflare Turnstile Challenge Page. Мы рассмотрим тонкости этих капчей и обсудим два эффективных способа их автоматического обхода.

Введение в Cloudflare

Существует 2 типа капчи Cloudflare turnstile captcha:

  • Автономная Standalone Cloudflare Turnstile Captcha: Виджет-капча размещается на странице веб-сайта и защищает форму от автоматической отправки. Пример.
  • Cloudflare Turnstile Challenge Page: Капча на веб-сайтах, проксируемых через Cloudflare. Пример.

Техники обхода

3.1. Бесплатный (только на Python):

  • Необнаруживаемый драйвер Chrome: Использование необнаруживаемого браузера Chrome позволяет сценариям автоматизации взаимодействовать с веб-сайтами, не вызывая проверки безопасности Cloudflare. Однако эта библиотека по-прежнему обнаруживается новейшим алгоритмом Cloudflare.
  • Пример файла на Python здесь.
import undetected_chromedriver as uc

driver = uc.Chrome(headless=True,use_subprocess=False)
driver.get(‘https://rucaptcha.com/42’)
driver.save_screenshot(‘captcha.png’)

  • DrissionPage: DrissionPage – это библиотека Python, которая автоматизирует взаимодействие с браузером и может использоваться для навигации по веб-сайтам, защищённым Cloudflare, без обнаружения. Изучить документацию DrissionPage можно по ссылке
from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get(‘https://rucaptcha.com/42’)

3.2. Платный обход при использовании 2Captcha:

Как это работает? Отправьте капчу по API в 2Captcha, чтобы получить токен cf-turnstile-response. Их работники обойдут эту капчу вручную и отправят обратно токен cf-turnstile-response. Затем используйте этот токен, чтобы обойти Cloudflare, установив значение для ввода cf-turnstile-response.

3.2.1. Автономная Standalone Turnstile капча

Шаг 1: Отправьте запрос на обход turnstile на 2Captcha с помощью:

{
«key»: «YOUR_API_KEY», // Перейдите на https://2captcha.com/enterpage , скопируйте свой API-ключ и вставьте его сюда
«method»: «turnstile»,
«sitekey»: «0x4AAAAAAAC3DHQFLr1GavRN», // Для каждого веб-сайта используется уникальный ключ сайта
«pageurl»: «https://2captcha.com/demo/cloudflare-turnstile», // URL Вашего веб-сайта, используя CF turnstile
«json»: 1
}

Где Вы можете получить значение ключа сайта? В тэге CF iframe Вы можете взять значение из атрибута src. Смотрите более подробную информацию ниже:

Обход капчи Cloudflare: выбирай из двух противоположных методов

Примерный ответ:

{

«status»: 1,

«request»: «2122988149» // идентификатор запроса для получения обходного токена

}

Шаг 2: Подождите 10 секунд

  • Запрос на шаге 1 запускает задание для обхода Cloudflare вручную. Таким образом, выполнение этой работы занимает 7-10 секунд. Вам нужно подождать.

Шаг 3: Отправьте запрос GET для получения токена cf-turnstile-response

{

«status»: 1,

«request»: «0.WoGeDojxQzHCCk023JRjfxv23olYh37jFdvPrcqmNeQ7PbSYIEuiBTK2SR_GdjfMitYEC23Gm7Vt93U1CPcI6aIFEhG-ffe1i9e6tIfIlYCFtb7OMxTB4tKCyTdpiaA.SP5YT77nuMNdOhZlvoBWAQ.da6448d22df7dd92f56a9fcf6d7138e5ee712bcf7d00c281f419b3bc091cbe64»

}

Шаг 4: Установите значение для ввода cf-turnstile-response на вкладке консоли инструмента разработки.

document.querySelector(‘[name=»cf-turnstile-response»]’).value = ‘TOKEN’;

Шаг 5: Капча пройдена. Продолжайте свою работу.

Вы можете ознакомиться с последними рекомендациями по вводу автономной капчи standalone turnstile здесь. Если Вы ищете примеры кода 2Captcha на C#, PHP, Ruby, Java, Python или Javascript, пожалуйста, перейдите в их git-репозитории.

3.2.2. Cloudflare Challenge page

Обход с помощью puppeteer JS

  • Во-первых, отправьте тот же POST-запрос, что и при автономной standalone turnstile капче, чтобы запустить задание обхода 2Captcha. Однако здесь есть ещё 3 обязательных поля, которые необходимо заполнить, включая data, pagedata и action.
Endpoint: https://2captcha.com/in.php

Method: POST

{

«key»: «YOUR_API_KEY»,

«method»: «turnstile»,

«sitekey»: «0x0AAAAAAADnPIDROzbs0Aaj»,

«data»: «7fab0000b0e0ff00»,

«pagedata»: «3gAFo2…0ME1UVT0=»,

«pageurl»: «https://2captcha.com/»,

«action»: «managed»,

«json»: 1

}

  • Как мы можем получить значения для этих полей? Вы должны перехватить вызов window.turnstile.render, введя следующий JavaScript перед загрузкой виджета Turnstile.
// Этот файл называется inject.js

console.clear = () => console.log(‘Console was cleared’)

const i = setInterval(() => {

if (window.turnstile) {

clearInterval(i)

window.turnstile.render = (a, b) => {

let params = {

sitekey: b.sitekey,

pageurl: window.location.href,

data: b.cData,

pagedata: b.chlPageData,

action: b.action,

userAgent: navigator.userAgent,

json: 1

}

// мы перехватим сообщение в puppeeter

console.log(‘intercepted-params:’ + JSON.stringify(params))

window.cfCallback = b.callback

return

}

}

}, 50)

  • В Puppeteer используйте метод Page.evaluateOnNewDocument(inject_script), чтобы вводить скрипт всякий раз, когда загружается новый документ. Сохраните приведённый выше JS-скрипт в файле с именем inject.js, сценарий для обхода будет:
import { launch } from ‘puppeteer’

import { Solver } from ‘@2captcha/captcha-solver’

import { readFileSync } from ‘fs’

const solver = new Solver(`API_KEY`) // Set your API key here

const example = async () => {

const browser = await launch({

headless: false,

devtools: true

})

const [page] = await browser.pages()

// Загрузить контент inject.js

const preloadFile = readFileSync(‘./inject.js’, ‘utf8’);

await page.evaluateOnNewDocument(preloadFile);

// Здесь мы перехватываем сообщения консоли, чтобы поймать сообщение, записанное inject.js script

page.on(‘console’, async (msg) => {

const txt = msg.text()

if (txt.includes(‘intercepted-params:’)) {

const params = JSON.parse(txt.replace(‘intercepted-params:’, »))

console.log(params)

try {

console.log(`Solving the captcha…`)

const res = await solver.cloudflareTurnstile(params)

console.log(`Solved the captcha ${res.id}`)

console.log(res)

await page.evaluate((token) => {

cfCallback(token)

}, res.data)

} catch (e) {

console.log(e.err)

return process.exit()

}

} else {

return;

}

})

// Когда страница перенаправляется, в консоли браузера появляется запись «intercepted-params: …»

page.goto(‘https://rucaptcha.com/42’)

}

example() // Запустите приведённый выше пример функции

Обход с Selenium C#

  • C# – это всего лишь пример реализации. 2Captcha может быть реализована на любом другом языке.
  • В Selenium проделайте то же самое с Puppeteer. Вызовите команду Page.addScriptToEvaluateOnNewDocument из Chrome Dev Tools вместо page.evaluateOnNewDocument();, чтобы внедрить скрипт.
string injectedScripts = File.ReadAllText(«inject.js», Encoding.UTF8);

((ChromeDriver)AtataContext.Current.Driver)

.ExecuteCdpCommand(«Page.addScriptToEvaluateOnNewDocument»,

new System.Collections.Generic.Dictionary<string, object> { { «source», injectedScripts } }

);

  • Загрузите сообщение, содержащее текст “intercepted-params”. И не забудьте настроить параметры ведения журнала на всех уровнях, чтобы получать журнал с помощью: chromeOptions.SetLoggingPreference(LogType.Browser, OpenQA.Selenium.LogLevel.All);
// Запротоколировать сообщение с помощью команды inject.js для параметров 2captcha
LogEntry message = AtataContext.Current.Driver.Manage().Logs.GetLog(LogType.Browser).FirstOrDefault(m => m.Message.Contains(«intercepted-params:»));
  • Обработайте параметры в запросе Turnstile Captcha для data, PageData и action. Наконец, переадресуйте верификацию Cloudflare с помощью токена для обхода с js-скриптом $”cfCallback(‘{token}’);”
if (message != null)

{

string paramString = Regex.Replace(message.Message, @».*intercepted-params:», «»)

.Replace(«}\»», «}»)

.Replace(«\\», «»);

TwoCaptchaParams param = JsonConvert.DeserializeObject<TwoCaptchaParams>(@$»{paramString}»);

// Решите CAPTCHA, используя 2captcha-csharp

CustomTwoCaptcha solver = new CustomTwoCaptcha(_apiKey);

TurnstileChallengePage captcha = new TurnstileChallengePage();

captcha.SetSiteKey(param.SiteKey);

captcha.SetUrl(param.PageUrl);

captcha.SetData(param.Data);

captcha.SetPageData(param.PageData);

captcha.SetAction(param.Action);

captcha.SetUserAgent(param.UserAgent);

var captchaId = solver.SendRequest(captcha).GetAwaiter().GetResult();

Thread.Sleep(10);

string token = solver.GetResult(captchaId).GetAwaiter().GetResult();

// Введите решённый токен CAPTCHA

AtataContext.Current.Driver.AsScriptExecutor().ExecuteScript($»cfCallback(‘{token}’);»);

}

else

{

Console.WriteLine(«Console message not found.»);

}

  • Наконец, запустите его, и Вы успешно обойдёте CloudFlare. Поздравляем!

Заключение

Автоматический обход Cloudflare капчи требует тонкого понимания различных типов проблем, связанных с мерами безопасности. В этом случае 2captcha становится надёжным и жизнеспособным решением.

Важно отметить, что методы автоматического обхода должны использоваться ответственно и с соблюдением этических норм. Надеемся, что эта тема окажется для Вас полезной!

Ссылки

Руководство по 2Captcha: https://2captcha.com/blog/bypass-cloudflare-turnstile-captcha

 

Источник

Читайте также