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

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

Как решить reCAPTCHA v2 на Quora

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

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

Введение

Quora — одна из крупнейших платформ для обмена знаниями, которая активно использует reCAPTCHA v2 для защиты форм регистрации, входа в аккаунт и иногда даже при чтении ответов после превышения лимита запросов.

Поскольку Quora построена как современное SPA (Single Page Application) на базе React, стандартный подход с простой вставкой токена в скрытое input поле здесь не сработает. Токен необходимо передавать строго через callback-функцию, которую ожидает фреймворк сайта.

В этом руководстве мы разберем, как получить необходимые параметры, решить капчу через API 2Captcha и корректно внедрить токен в Quora с помощью Python.

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

Для обхода reCAPTCHA v2 на Quora используется тип задачи RecaptchaV2TaskProxyless (если вы не используете свои прокси) или RecaptchaV2Task.

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://www.quora.com/",
        "websiteKey": "6Lcbz34UAAAAAL8AdJSo8BkXQ-pUMfr7OfbTZCY8"
    }   
}

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

websiteURL

Это полный адрес страницы, на которой появляется капча. Для Quora это может быть главная страница (https://www.quora.com/) или конкретная страница входа (https://www.quora.com/login).

websiteKey (SiteKey)

Это публичный ключ reCAPTCHA. На Quora он статичен, но если вы настраиваете автоматизацию для другого сайта, вот как его найти:

  1. Откройте страницу с капчей и нажмите F12 (DevTools).
  2. Перейдите на вкладку Elements.
  3. Нажмите Ctrl+F (или Cmd+F) и введите data-sitekey.
  4. Скопируйте значение атрибута. Для Quora это 6Lcbz34UAAAAAL8AdJSo8BkXQ-pUMfr7OfbTZCY8.

Альтернативный способ: Перейдите на вкладку Network, отфильтруйте по Fetch/XHR и найдите запрос к google.com/recaptcha/anchor. В параметрах запроса (Query String Parameters) будет указан параметр k — это и есть ваш websiteKey.

Критически важный шаг: Передача токена через Callback

Это самый важный раздел для понимания работы с Quora и другими современными SPA-приложениями.

Почему стандартный подход не работает

В классических HTML-формах reCAPTCHA v2 работает так: после решения капчи Google вызывает callback-функцию, которая записывает токен в скрытое поле g-recaptcha-response, и при отправке формы этот токен попадает на сервер.

Но Quora использует React, и форма не отправляется стандартным способом через submit. Вместо этого React-компонент перехватывает ввод пользователя и отправляет данные через JavaScript (fetch или XMLHttpRequest). Если вы просто вставите токен в скрытое поле, React его не увидит, потому что состояние компонента не обновится.

Как работает callback в reCAPTCHA v2

Когда вы инициализируете reCAPTCHA на странице, вы указываете callback-функцию. После решения капчи Google вызывает эту функцию и передает в нее токен. React-приложение обновляет свое состояние, и кнопка отправки формы становится активной.

Если вы не вызовете callback, токен будет записан только в скрытое поле, но React об этом не узнает. Кнопка останется неактивной, и форма не отправится.

Подробная инструкция по вызову callback

В современных приложениях callback-функция хранится в глобальном объекте ___grecaptcha_cfg. Вам нужно рекурсивно обойти этот объект и найти функцию с именем callback, затем вызвать её с полученным токеном.

Подробная инструкция с примерами кода для поиска и вызова callback https://rucaptcha.com/h/recaptcha-v2-callback

Примеры кода

Python + requests (Получение токена через API)

Если вам нужно просто получить токен на бэкенде (например, для передачи его на фронтенд), используйте этот код.

python Copy
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from twocaptcha import TwoCaptcha

api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')
solver = TwoCaptcha(api_key)

try:
    result = solver.recaptcha(
        sitekey='6Lcbz34UAAAAAL8AdJSo8BkXQ-pUMfr7OfbTZCY8',
        url='https://www.quora.com/'
    )
    print(f"Токен успешно получен: {result['code']}")
    # Здесь вы можете передать result['code'] на фронтенд или использовать в API запросе
    
except Exception as e:
    print(f"Произошла ошибка: {e}")

Python + Playwright (Автоматизация браузера)

Для полноценного обхода на Quora мы будем использовать Playwright. Этот код открывает браузер и решает капчу. После получения токена его нужно внедрить через callback (см. инструкцию по ссылке выше).

python Copy
import asyncio
from playwright.async_api import async_playwright
from twocaptcha import TwoCaptcha

API_KEY = 'YOUR_API_KEY'
SITE_KEY = '6Lcbz34UAAAAAL8AdJSo8BkXQ-pUMfr7OfbTZCY8'
PAGE_URL = 'https://www.quora.com/login'

async def solve_captcha():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()
        
        await page.goto(PAGE_URL)
        # Ждем появления iframe с капчей
        await page.wait_for_selector('iframe[src*="recaptcha"]', timeout=10000)
        
        # Решаем капчу через API
        solver = TwoCaptcha(API_KEY)
        result = solver.recaptcha(sitekey=SITE_KEY, url=PAGE_URL)
        token = result['code']
        print(f"Капча решена! Токен: {token}")
        
        # Здесь нужно внедрить токен через callback
        # Подробная инструкция: https://2captcha.com/h/recaptcha-v2-callback
        
        await asyncio.sleep(5) # Пауза для проверки результата
        await browser.close()

asyncio.run(solve_captcha())

Отчеты о правильности решения

Если сайт отклонил полученный токен, обязательно сообщите об этом. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку. Отправить отчет можно через личный кабинет или напрямую через API.

Отправка отчетов через HTTP-запросы

API 2Captcha предоставляет два эндпоинта для отправки отчетов:

Отчет о неверном решении (reportIncorrect)

Используется, если сайт отклонил токен или снова вернул страницу с капчей. Средства за задачу будут возвращены на ваш баланс.

JSON-запрос:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Отправка через Python (requests):

python Copy
import requests

API_KEY = "YOUR_API_KEY"
TASK_ID = "123456789"

response = requests.post(
    "https://api.rucaptcha.com/reportIncorrect",
    json={
        "clientKey": API_KEY,
        "taskId": TASK_ID
    }
)

print(response.json())
# Ожидаемый ответ: {"request": "OK_REPORT_SUBMITTED", "status": "reported"}

Отчет о правильном решении (reportCorrect)

Используется, если сайт принял токен без ошибок. Это помогает сервису поддерживать высокое качество распознавания.

JSON-запрос:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Отправка через Python (requests):

python Copy
import requests

API_KEY = "YOUR_API_KEY"
TASK_ID = "123456789"

response = requests.post(
    "https://api.rucaptcha.com/reportCorrect",
    json={
        "clientKey": API_KEY,
        "taskId": TASK_ID
    }
)

print(response.json())
# Ожидаемый ответ: {"request": "OK_REPORT_SUBMITTED", "status": "reported"}

Подробный гайд по отправке отчетов с примерами для разных языков: https://2captcha.com/h/how-to-submit-reports

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

Ошибка / Проблема Причина Решение
Токен получен, но Quora просит пройти капчу снова Токен не был передан через callback, либо время жизни токена истекло Убедитесь, что вы используете JS-скрипт для вызова callback (см. раздел выше). Токены reCAPTCHA v2 живут 1-2 минуты, используйте их сразу
ERROR_WRONG_USER_KEY Неверный API-ключ Проверьте, что вы используете правильный ключ от 2Captcha
ERROR_ZERO_BALANCE Недостаточно средств на балансе Пополните счет в личном кабинете 2Captcha
Callback не вызывается, кнопка неактивна Структура ___grecaptcha_cfg отличается от стандартной Изучите объект ___grecaptcha_cfg.clients вручную через консоль браузера и адаптируйте поиск функции

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