Looking for international version of our service? Go to 2captcha.com

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

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

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

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

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

Введение

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

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

В этом руководстве мы разберем, как получить необходимые параметры, решить капчу через API RuCaptcha и корректно внедрить токен в 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 RuCaptcha предоставляет два эндпоинта для отправки отчетов:

Отчет о неверном решении (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-ключ Проверьте, что вы используете правильный ключ от RuCaptcha
ERROR_ZERO_BALANCE Недостаточно средств на балансе Пополните счет в личном кабинете RuCaptcha
Callback не вызывается, кнопка неактивна Структура ___grecaptcha_cfg отличается от стандартной Изучите объект ___grecaptcha_cfg.clients вручную через консоль браузера и адаптируйте поиск функции

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