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

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

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

Как обойти reCAPTCHA на сайте reportcontent.google.com

Джерри Слиман
Джерри Слиман

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

reportcontent.google.com — это формы жалоб Google: через них просят удалить из поиска личные данные, контент по праву на забвение, материалы с нарушением авторских прав и прочее. В конце такой формы стоит reCAPTCHA.

Важная деталь: это не обычная reCAPTCHA v2, а reCAPTCHA v2 Enterprise. С виду это та же галочка «Я не робот», но капча грузится через отдельный enterprise-скрипт Google. Для сервиса это значит одно: тип задачи должен быть RecaptchaV2EnterpriseTask, а не обычный reCAPTCHA v2. Токен возвращается в поле g-recaptcha-response и в функцию обратного вызова.

На главной reportcontent.google.com капчи нет: адрес переадресует на справку Google. А сама форма закрыта проверкой личности: пока вы не войдёте в аккаунт Google или не подтвердите адрес электронной почты, страница формы показывает экран входа и сообщение «Форма не найдена», и капчи в коде страницы нет вообще. После подтверждения почты форма открывается сразу по своему адресу, и капча появится там.

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

Для решения используется тип задачи RecaptchaV2EnterpriseTaskProxyless. Если нужно решать со своего адреса, берётся RecaptchaV2EnterpriseTask с данными прокси.

Параметр Тип Обязательный Описание
type String Да RecaptchaV2EnterpriseTaskProxyless или RecaptchaV2EnterpriseTask
websiteURL String Да Адрес страницы с капчей, например https://reportcontent.google.com/forms/rtbf
websiteKey String Да Sitekey reCAPTCHA. Лежит в атрибуте data-sitekey виджета и в параметре k запросов к reCAPTCHA
enterprisePayload Object Нет Дополнительные параметры вызова grecaptcha.enterprise.render, например значение s. На форме жалобы у виджета задан атрибут data-action="form-submit", но передавать его в задаче не нужно: токен возвращается одинаково и с payload, и без него
isInvisible Boolean Нет true для невидимой версии. На форме жалобы капча с галочкой, поэтому false
userAgent String Нет User-Agent браузера, которым открыта страница
cookies String Нет Cookie в формате key1=val1; key2=val2. Пригодятся для сервисов Google
apiDomain String Нет Домен загрузки капчи: google.com или recaptcha.net. По умолчанию google.com

Для типа RecaptchaV2EnterpriseTask добавляются proxyType, proxyAddress, proxyPort, proxyLogin и proxyPassword.

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

Сначала нужно открыть саму форму. Зайдите на страницу нужной формы жалобы и пройдите проверку личности: войдите в аккаунт Google или укажите адрес электронной почты и подтвердите его. До этого момента форма не показывается, и капчи на странице нет. После подтверждения открывается сама форма — её адрес и передаётся в websiteURL.

Дальше нажмите F12 и на вкладке Elements найдите элемент виджета. Важно: смотреть надо именно через F12, а не через «Просмотр кода страницы» — виджет создаётся скриптом уже после загрузки, в исходнике его нет. В DOM это выглядит так: сначала служебный элемент captcha-widget с настройками, внутри него — обычный контейнер капчи.

html Copy
<captcha-widget data-sitekey="6LeVK0AhAAAAAAM8ccCAZcaNBQbJQ-iZiZQxyG4h"
                data-callback="onRecaptcha"
                data-action="form-submit"
                data-version="v2">
  <div class="g-recaptcha" data-sitekey="6LeVK0AhAAAAAAM8ccCAZcaNBQbJQ-iZiZQxyG4h"
       data-callback="onRecaptcha"></div>
</captcha-widget>

Sitekey лежит в атрибуте data-sitekey — он одинаковый на обоих элементах. Тот же ключ виден на вкладке «Сеть» (Network): отфильтруйте запросы по recaptcha и посмотрите параметр k у запросов к анкеру капчи.

Здесь же проверяется, что версия именно Enterprise. Посмотрите путь запросов капчи: у Enterprise они идут через /recaptcha/enterprise/anchor и /recaptcha/enterprise/bframe, а скрипт загружается как /recaptcha/enterprise.js. Если бы вместо этого грузился /recaptcha/api.js и /recaptcha/api2/anchor, это была бы обычная reCAPTCHA v2.

Одна тонкость. Если открыть исходник страницы и поискать ключи по всему коду, их найдётся три, и легко взять не тот. Кроме ключа галочки там лежат recaptcha_enterprise_elevated_key (усиленная проверка) и recaptcha_enterprise_qr_mobile_key (проверка через QR на телефоне) — это другие сценарии, в задачу их слать не нужно. В разметку страница подставляет всегда только один ключ — тот, который соответствует включённому режиму проверки, и именно он уходит в оба iframe капчи (enterprise/anchor и enterprise/bframe). Поэтому надёжный способ не ошибиться простой: брать значение из атрибута data-sitekey у виджета, а не искать ключи поиском по исходнику.

И ещё: reportcontent.google.com объединяет несколько форм жалоб, и на разных формах ключ галочки может отличаться. Поэтому читайте его со страницы, с которой создаёте задачу, а не переносите из другой формы.

Примеры кода

Python + requests (API v2)

Отправка задачи и опрос результата без дополнительных библиотек. Sitekey и адрес подставьте те, что сняли со своей формы.

python Copy
import time

import requests

API_KEY = "ВАШ_API_КЛЮЧ"
WEBSITE_URL = "https://reportcontent.google.com/forms/rtbf"
WEBSITE_KEY = "6LeVK0AhAAAAAAM8ccCAZcaNBQbJQ-iZiZQxyG4h"

task = {
    "type": "RecaptchaV2EnterpriseTaskProxyless",
    "websiteURL": WEBSITE_URL,
    "websiteKey": WEBSITE_KEY,
    "isInvisible": False,
}

created = requests.post(
    "https://api.rucaptcha.com/createTask",
    json={"clientKey": API_KEY, "task": task},
    timeout=30,
).json()

if created.get("errorId") != 0:
    raise RuntimeError(f"Задача не создана: {created}")

task_id = created["taskId"]
print("Задача создана, id", task_id)

for _ in range(24):
    time.sleep(5)

    result = requests.post(
        "https://api.rucaptcha.com/getTaskResult",
        json={"clientKey": API_KEY, "taskId": task_id},
        timeout=30,
    ).json()

    if result.get("errorId") != 0:
        raise RuntimeError(f"Ошибка: {result}")

    if result.get("status") == "ready":
        token = result["solution"]["token"]
        print("Токен получен:", token[:30], "…")
        break
else:
    raise RuntimeError("Решение не пришло за отведённое время")

Токен reCAPTCHA — длинная строка, обычно начинается с 03 или 0c. Его нужно передать странице, как показано ниже.

Python + Playwright

Пример открывает форму, читает sitekey со страницы, отправляет задачу и передаёт токен обратно: записывает его в поле g-recaptcha-response и вызывает функцию обратного вызова, которую ждёт форма.

Учтите: браузер должен быть с уже пройденной проверкой личности. На чистом профиле Playwright форма не откроется, виджета на странице не будет, и ожидание селектора data-sitekey завершится по таймауту. Используйте профиль с сохранённой сессией Google (launch_persistent_context) либо сначала пройдите подтверждение почты в этом же браузере.

python Copy
import os
import time

import requests
from playwright.sync_api import sync_playwright

API_KEY = os.getenv("APIKEY_RUCAPTCHA", "ВАШ_API_КЛЮЧ")
TARGET_URL = "https://reportcontent.google.com/forms/rtbf"


def solve(task):
    created = requests.post(
        "https://api.rucaptcha.com/createTask",
        json={"clientKey": API_KEY, "task": task},
        timeout=30,
    ).json()

    if created.get("errorId") != 0:
        raise RuntimeError(f"Задача не создана: {created}")

    task_id = created["taskId"]
    print("Задача создана, id", task_id)

    for _ in range(24):
        time.sleep(5)

        result = requests.post(
            "https://api.rucaptcha.com/getTaskResult",
            json={"clientKey": API_KEY, "taskId": task_id},
            timeout=30,
        ).json()

        if result.get("errorId") != 0:
            raise RuntimeError(f"Ошибка: {result}")

        if result.get("status") == "ready":
            return result["solution"]["token"]

    raise RuntimeError("Решение не пришло за отведённое время")


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    try:
        page.goto(TARGET_URL)
        page.wait_for_selector("[data-sitekey]", timeout=30000)

        website_key = page.get_attribute("[data-sitekey]", "data-sitekey")
        user_agent = page.evaluate("navigator.userAgent")
        print("Sitekey со страницы:", website_key)

        token = solve({
            "type": "RecaptchaV2EnterpriseTaskProxyless",
            "websiteURL": TARGET_URL,
            "websiteKey": website_key,
            "userAgent": user_agent,
            "isInvisible": False,
        })
        print("Токен получен:", token[:30], "…")

        page.evaluate("""(token) => {
            const field = document.querySelector('textarea[name="g-recaptcha-response"]');
            if (field) {
                field.value = token;
            }
            if (typeof window.onRecaptcha === 'function') {
                window.onRecaptcha(token);
            }
        }""", token)

        print("Токен передан форме, дальше идёт отправка жалобы")

    except Exception as e:
        print(f"Ошибка: {e}")
    finally:
        browser.close()

Функция обратного вызова на форме reportcontent.google.com называется onRecaptcha. Её имя видно в атрибуте data-callback виджета. Если на вашей форме имя другое, поменяйте его в примере.

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

Сервис возвращает решение в поле solution.token. Это и есть значение, которое обычно попадает в g-recaptcha-response, когда человек ставит галочку.

На форме жалобы одной записи в поле мало. Форма не отправляется сразу после капчи: она ждёт, когда сработает функция обратного вызова, и только тогда разблокирует отправку. Имя функции указано в атрибуте data-callback виджета. Поэтому токен нужно и записать в поле, и передать в эту функцию:

javascript Copy
document.querySelector('textarea[name="g-recaptcha-response"]').value = "ПОЛУЧЕННЫЙ_ТОКЕН";
onRecaptcha("ПОЛУЧЕННЫЙ_ТОКЕН");

После этого заполняйте форму жалобы и отправляйте её обычным способом.

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

Ошибка или проблема Причина Решение
Сервис возвращает токен, но форма его не принимает Использован обычный тип reCAPTCHA v2 вместо Enterprise На этом сайте капча Enterprise. Берите тип RecaptchaV2EnterpriseTaskProxyless
Токен получен, но форма не отправляется Токен только записан в поле, а функция обратного вызова не вызвана Вызовите функцию из data-callback виджета, здесь это onRecaptcha
Форма с капчей не открывается, на странице написано «Форма не найдена» Не пройдена проверка личности, форма и капча ещё не загружены Войдите в аккаунт Google или подтвердите адрес электронной почты — после этого откроется форма с капчей
В коде страницы нет ни виджета, ни поля g-recaptcha-response Смотрите исходник страницы, а виджет создаётся скриптом Откройте DevTools (F12), вкладка Elements — там виджет виден
Токен долго не приходит или отклоняется Задача решается на адресе сервиса, а форма проверяет совпадение IP Используйте RecaptchaV2EnterpriseTask со своим прокси
Капча ведёт себя как невидимая, галочки нет На конкретной форме включена невидимая версия Передайте в задачу isInvisible со значением true

Полный список кодов ошибок находится на странице «Коды ошибок», ссылка на неё ниже.

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