Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти reCAPTCHA v3 на сайте Farfetch

Грегори Фишер
Грегори Фишер

Технический специалист

Страница создания аккаунта на сайте Farfetch (www.farfetch.com) защищена невидимой капчей reCAPTCHA v3. Главная особенность работы с этой капчей заключается в том, что она оценивает поведение пользователя в фоновом режиме и возвращает токен, который необходимо корректно передать на сервер.

Для успешного решения критически важно использовать правильный тип задачи, подобрать подходящее значение minScore и внедрить полученный токен через механизм callback. Также важно помнить, что для задач reCAPTCHA v3 в нашем сервисе прокси не поддерживаются, поэтому необходимо использовать исключительно тип задачи RecaptchaV3TaskProxyless.

Параметры задачи

Для решения используется тип задачи RecaptchaV3TaskProxyless.

Параметр Тип Обязательный Описание
type String Да Должен быть установлен в RecaptchaV3TaskProxyless
websiteURL String Да Полный URL страницы, где находится капча
websiteKey String Да Статический ключ сайта (начинается с 6L...)
minScore Float Да Минимальный требуемый скор (например, 0.3, 0.7, 0.9). Если токен не принимается сайтом, измените это значение.
apiDomain String Да Домен API. Обычно используется www.recaptcha.net или www.google.com
isEnterprise Boolean Да Должно быть установлено в false для обычной версии reCAPTCHA v3

Как найти параметры

  1. Откройте страницу создания аккаунта Farfetch: https://www.farfetch.com/ и перейдите к форме регистрации.
  2. Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
  3. Включите сохранение логов (Preserve log).
  4. Заполните форму тестовыми данными и нажмите кнопку отправки, чтобы инициировать проверку.
  5. В фильтре вкладки Сеть введите recaptcha.
  6. Найдите запрос к серверам Google. В параметрах этого запроса или в исходном коде страницы (поиск по data-sitekey) вы найдете значение websiteKey.
  7. Скопируйте полный URL из адресной строки браузера в момент отправки запроса. Это будет ваш websiteURL.

Примеры кода

Python + requests

Пример отправки задачи и опроса результата с использованием библиотеки requests.

python Copy
import requests
import time

API_KEY = 'ВАШ_API_КЛЮЧ'
WEBSITE_URL = 'https://www.farfetch.com/'
WEBSITE_KEY = '6LeifPcbAAAAAJaiPe_xgLTfnbdpEMAYJAAnVFJT'

url = 'https://api.2captcha.com/createTask'
headers = {
    'Content-Type': 'application/json',
    'X-API-Key': API_KEY
}
payload = {
    "clientKey": API_KEY,
    "task": {
        "type": "RecaptchaV3TaskProxyless",
        "websiteURL": WEBSITE_URL,
        "websiteKey": WEBSITE_KEY,
        "minScore": 0.3,
        "apiDomain": "www.recaptcha.net",
        "isEnterprise": False
    }
}

response = requests.post(url, headers=headers, json=payload)
result = response.json()

if result.get('errorId') == 0:
    task_id = result.get('taskId')
    print(f"Задача создана, ID: {task_id}")
    
    res_url = 'https://api.2captcha.com/getTaskResult'
    while True:
        time.sleep(5)
        
        res_payload = {
            "clientKey": API_KEY,
            "taskId": task_id
        }
        
        res_response = requests.post(res_url, headers=headers, json=res_payload).json()
        
        if res_response.get('errorId') == 0 and res_response.get('status') == 'ready':
            print("Капча успешно решена!")
            token = res_response['solution']['gRecaptchaResponse']
            print(f"Токен: {token}")
            break
        elif res_response.get('errorId') != 0:
            print(f"Ошибка при получении результата: {res_response.get('errorDescription')}")
            break
else:
    print(f"Ошибка создания задачи: {result.get('errorDescription')}")

Python + Playwright

Пример автоматизации, который извлекает параметры, отправляет задачу и внедряет токен через callback.

python Copy
from playwright.sync_api import sync_playwright
import requests
import time

API_KEY = 'ВАШ_API_КЛЮЧ'
TARGET_URL = 'https://www.farfetch.com/'

def solve_farfetch_recaptcha_v3():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        
        try:
            page.goto(TARGET_URL)
            # Здесь должны быть действия по переходу к форме регистрации и заполнению данных
            # page.click('button[aria-label="Register"]')
            # page.fill('input[name="email"]', 'test@example.com')
            # page.click('button[type="submit"]')
            
            page.wait_for_selector('iframe[src*="recaptcha"]', timeout=10000)
            
            current_url = page.url
            website_key = page.evaluate("document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')")
            
            print(f"URL: {current_url}")
            print(f"Key: {website_key}")
            
            api_url = 'https://api.2captcha.com/createTask'
            headers = {'Content-Type': 'application/json', 'X-API-Key': API_KEY}
            payload = {
                "clientKey": API_KEY,
                "task": {
                    "type": "RecaptchaV3TaskProxyless",
                    "websiteURL": current_url,
                    "websiteKey": website_key,
                    "minScore": 0.3,
                    "apiDomain": "www.recaptcha.net",
                    "isEnterprise": False
                }
            }
            
            task_response = requests.post(api_url, headers=headers, json=payload).json()
            task_id = task_response.get('taskId')
            
            res_url = 'https://api.2captcha.com/getTaskResult'
            token = None
            for _ in range(20):
                time.sleep(5)
                res = requests.post(res_url, headers=headers, json={"clientKey": API_KEY, "taskId": task_id}).json()
                if res.get('status') == 'ready':
                    token = res['solution']['gRecaptchaResponse']
                    break
                if res.get('errorId') != 0:
                    print(f"Ошибка API: {res.get('errorDescription')}")
                    break
                    
            if token:
                print(f"Токен получен: {token[:30]}...")
                
                # Внедрение токена через callback
                # Имя функции callback необходимо уточнить в исходном коде страницы Farfetch
                page.evaluate(f"""
                    if (typeof recaptchaCallback === 'function') {{
                        recaptchaCallback("{token}");
                    }} else {{
                        console.log("Callback function not found, trying alternative injection");
                        window.grecaptcha_response = "{token}";
                    }}
                """)
                print("Токен передан через callback.")
            else:
                print("Не удалось получить токен.")
                
        except Exception as e:
            print(f"Ошибка: {e}")
        finally:
            # browser.close()

if __name__ == '__main__':
    solve_farfetch_recaptcha_v3()

Как использовать полученный токен (Внедрение через callback)

Сайт Farfetch использует специальную JavaScript-функцию (callback) для передачи полученного токена. В отличие от reCAPTCHA v2, где токен часто автоматически попадает в скрытые поля формы, здесь требуется явный вызов этой функции с полученным значением.

Вы можете реализовать это двумя способами:

  1. Использовать стандартный подход с внедрением скрипта, который перехватывает и вызывает нужный callback, как описано в нашей статье: https://2captcha.com/h/recaptcha-v2-callback (механизм внедрения токена в контекст страницы универсален).
  2. Использовать альтернативный способ передачи через callback, который подробно описан в официальной документации нашего API: https://2captcha.com/2captcha-api#callback

Вам необходимо изучить исходный код страницы Farfetch (вкладка Elements), найти точное имя функции в атрибуте data-callback у виджета reCAPTCHA и вызвать именно эту функцию, передав ей полученный токен в качестве аргумента.

Важные примечания

  • Настройка minScore: Если сайт отклоняет полученный токен (ошибка валидации на стороне сервера), первое, что нужно сделать — изменить параметр minScore в запросе к API. Попробуйте последовательно значения 0.1, 0.3, 0.5, 0.7 или 0.9, пока сайт не начнет принимать токены.
  • Отсутствие поддержки прокси: Для задач reCAPTCHA v3 прокси не поддерживаются в нашем сервисе. Всегда используйте тип задачи RecaptchaV3TaskProxyless. Если сайт блокирует ваш IP, настраивайте прокси на уровне самого браузера (Playwright/Selenium), а не в параметрах задачи API.

Частые ошибки и решения

Ошибка / Проблема Причина Решение
Сайт отклоняет токен Значение minScore не соответствует требованиям сайта. Измените параметр minScore в запросе к API. Попробуйте значения 0.1, 0.3, 0.5, 0.7 или 0.9.
Ошибка, связанная с прокси Попытка использовать прокси для reCAPTCHA v3. Для reCAPTCHA v3 прокси не поддерживаются. Всегда используйте тип задачи RecaptchaV3TaskProxyless.
ERROR_INVALID_SITE_KEY Неверный websiteKey или несоответствие домена в websiteURL. Убедитесь, что ключ начинается с 6L, а websiteURL точно совпадает с адресом в браузере.
Токен не принимается формой Неверный способ внедрения токена или неверное имя callback-функции. Изучите исходный код страницы, найдите точное имя функции в атрибуте data-callback и вызовите её, передав токен.

Полезные ссылки