Обход DataDome: руководство на Python

Если вы столкнулись с капчей DataDome и ищете способ ее обойти, это руководство для вас.

Сервис по автоматическому обходу капчи через API 2Captcha позволяет получить решение капчи datadome.

Статья описывает процесс взаимодействия с API.

Информация будет полезна разработчикам проектов на Python для автоматизации задач на сайтах, защищённых капчей DataDome.

Как работает капча DataDome?

DataDome — это компания, занимающаяся обеспечением безопасности и специализирующаяся на защите сайтов, мобильных приложений и API от ботов. DataDome использует искусственный интеллект (AI) и алгоритмы машинного обучения для анализа трафика и выявления ботов.

DataDome использует очень сложную защиту, однако с правильным инструментарием вы можете обойти её и извлечь необходимые данные.

Капча DataDome может выглядеть следующим образом:
How to solve and bypass DataDome captcha with the fastest recognize service

Подготовка перед обходом защиты Datadome

Прежде чем обходить DataDome, вам нужно настроить рабочую среду и инструменты, а именно:

  • Python - для решения будем использовать этот язык программирования
  • API Ключ из вашего личного кабинета 2Captcha.
  • Прокси - для скрытия вашего реального IP-адреса и избежания блокировки. Вы можете использовать для этого прокси сервис 2Captcha.

Пошаговая инструкция для обхода капчи DataDome

1. Импорт необходимых библиотек и зависимостей

Вам понадобятся следующие библиотеки: requests для выполнения HTTP-запросов и json для работы с данными в формате JSON.

import json
import time
import requests

Также вам нужно зарегистрироваться на сайте 2Captcha, чтобы получить ваш API-ключ, и подготовить параметры прокси.

2. Определение параметров и куки

После подготовки окружения нужно определить параметры запроса: URL сайта, настройки прокси, API ключ RuCaptcha и другие.
Мы будем использовать куки для обхода защиты DataDome. Куки хранятся в отдельном файле cookies_datadome.json, который создаётся и обновляется автоматически во время работы скрипта.

proxy = "login:password@ip_address:port"  # параметры прокси
my_key = "your_rucaptcha_api_key"
url = "https://www.example.com/"
user_agent = "your_user_agent_here"

# Чтение куки из файла
with open("cookies_datadome.json", 'r') as json_file:
    cookie_value = json.load(json_file)
cookies = {'datadome': cookie_value}

# Формирование заголовков запроса
headers = {
    'accept': '*/*',
    'accept-language': 'en-US',
    'content-type': 'text/plain;charset=UTF-8',
    'origin': url,
    'referer': url,
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': user_agent,
}

Примечание! Содержание заголовков зависит от сайта, на котором вы обходите капчу. Вам нужно будет определить их с помощью Developer Tools.

3. Отправка запроса на сайт

После того как необходимые параметры и заголовки определены, необходимо отправить GET-запрос на сайт, где необходимо пройти капчу.

res = requests.get(
    url,
    proxies={'http': 'http://' + proxy}, 
    cookies={'datadome': cookie_value},
    headers=headers
)

4. Обработка случая блокировки

Если в ответ возвращается код 403 (Forbidden), это означает, что DataDome блокирует доступ. В этом случае нужно будет отправить запрос к API RuCaptcha для обхода капчи. Для этого нужно получить необходимые параметры для запроса:

if res.status_code == 403:
   # Получение информации о блокировке DataDome
    dd = res.text.split('dd=')[1]
    dd = dd.split('</script')[0]
    dd = json.loads(dd.replace("'", '"'))

    # Получение CID из куки
    cid = res.headers.get('Set-Cookie').split('datadome=')[1]
    cid = cid.split(';')[0]

5. Формирование запроса

После того как получена информация о блокировке от DataDome и CID из куки, необходимо сформировать запрос к API.

captcha_url = (
    f"https://geo.captcha-delivery.com/captcha/?"
    f"initialCid={dd['cid']}&hash={dd['hsh']}&"
    f"cid={cid}&t={dd['t']}&referer=https%3A%2F%2Fwww.example.com%2Fapi%2Fgraphql&"
    f"s={dd['s']}&e={dd['e']}"
)

6. Отправляем запрос к API 2Captcha

На этом шаге отправляется POST запрос к API 2Captcha.

data = {
    "key": my_key,
    "method": "datadome",
    "captcha_url": cap_url,
    "pageurl": url,
    "json": 1,
    "userAgent": user_agent,
    "proxy": proxy,
    "proxytype": "http",
}
response = requests.post("https://rucaptcha.com/in.php?", data=data)

7. Ожидание ответа

После отправки запроса нужно дождаться решения капчи. Для этого используется цикл, который проверяет статус решения капчи и ждёт, пока капча не будет решена.

response = requests.post("https://rucaptcha.com/in.php?", data=data)
s = response.json()["request"]  # Получение ID запроса

while True:
    solu = requests.get(f"https://rucaptcha.com/res.php?key={my_key}&action=get&json=1&id={s}").json()
    if solu["request"] == "CAPCHA_NOT_READY":
        time.sleep(5)
    elif "ERROR" in solu["request"]:
        print(solu["request"])
        exit(0)
    else:
        break

8. Обновляем куки и записываем в файл

cookie_value = solu["request"].split(";")[0].split("=")[1]
with open("cookies_datadome.json", 'w') as json_file:
    json.dump(cookie_value, json_file)

9. Готово! Вы успешно прошли капчу DataDome и можете продолжать работу с сайтом

Перезапустите скрипт с новыми прокси, и ошибки 403 не будет, в результате вы получите доступ к данным на сайте.

В заключении

В этой статье мы описали процесс обхода защиты DataDome с помощью сервиса API 2Captcha и показали, как записывать куки для дальнейшего использования для решения капчи DataDome. Таким образом можно эффективно и надёжно получить доступ к необходимым данным на сайтах, защищённых DataDome.

Обходите любую капчу с помощью решения капчи на python.

Полезные материалы

Вы также можете скачать полный код здесь или посмотреть его на Gist.

Подробное описание по обходу капчи опубликовано на странице API page.

Дополнительная информация по работе с сервисом для заказчиков доступна на странице FAQ.

Примеры кода для работы с сервисом на официальной странице в GitHub.