Эта статья была полезной?
Как решить FunCaptcha (Arkose Labs) на GTOP100
Технический специалист
Введение
GTOP100 — это популярный рейтинг серверов для различных онлайн-игр (таких как MapleStory, RuneScape и других). Для защиты процесса голосования от накрутки сайт использует FunCaptcha (Arkose Labs). Это интерактивная капча, которая часто требует выполнить задание на изображение (например, повернуть картинку или выбрать объект).
В этом руководстве мы разберем, как получить необходимые параметры, решить FunCaptcha через API 2Captcha и корректно внедрить токен на страницу голосования.
Параметры задачи
Для обхода FunCaptcha на GTOP100 используется тип задачи FunCaptchaTaskProxyless (если вы не используете свои прокси) или FunCaptchaTask. Data blob для этого сайта не требуется.
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "FunCaptchaTaskProxyless",
"websiteURL": "https://gtop100.com/MapleStory/server-103514?vote=1&pingUsername=summerboy9",
"websitePublicKey": "FDED3FA5-1764-490F-8BA3-7CE7B0553BC9",
"surl": "https://client-api.arkoselabs.com"
}
}
Как найти параметры
websiteURL
Это полный адрес страницы, на которой появляется капча. Для GTOP100 это страница голосования за конкретный сервер. URL всегда содержит параметры игры, ID сервера и имя пользователя.
Пример: https://gtop100.com/MapleStory/server-103514?vote=1&pingUsername=summerboy9
websitePublicKey (publickey)
Это публичный ключ Arkose Labs, который имеет формат UUID.
- Откройте страницу голосования и нажмите F12 (DevTools).
- Перейдите на вкладку Elements.
- Нажмите Ctrl+F и введите data-pkey или public-key.
- Скопируйте значение атрибута. Для GTOP100 это FDED3FA5-1764-490F-8BA3-7CE7B0553BC9.
Альтернативный способ: Перейдите на вкладку Network, отфильтруйте по Fetch/XHR или JS, найдите запросы к arkoselabs.com или funcaptcha. В параметрах запроса будет указан public_key.
surl (apiSubdomain)
Этот параметр указывает на кастомный поддомен API Arkose Labs, если он используется на сайте.
- На вкладке Elements найдите тег script, который загружает скрипт капчи.
- Обычно это URL вида https://client-api.arkoselabs.com/fc/api... или https://arkoselabs.com/fc/api...
- Скопируйте полный URL домена (в данном случае https://client-api.arkoselabs.com). Если используется стандартный домен, этот параметр можно не передавать.
Примеры кода
Python + requests (Получение токена)
Если вам нужно просто получить токен для последующей отправки формы через API или скрытое поле:
python
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.funcaptcha(
site_key='FDED3FA5-1764-490F-8BA3-7CE7B0553BC9',
url='https://gtop100.com/MapleStory/server-103514?vote=1&pingUsername=summerboy9',
surl='https://client-api.arkoselabs.com'
)
print(f"Токен успешно получен: {result['code']}")
except Exception as e:
print(f"Произошла ошибка: {e}")
Python + Playwright (Автоматизация браузера)
При автоматизации браузера токен нужно внедрить в скрытое поле или вызвать callback-функцию, чтобы кнопка голосования стала активной.
python
import asyncio
from playwright.async_api import async_playwright
from twocaptcha import TwoCaptcha
API_KEY = 'YOUR_API_KEY'
SITE_KEY = 'FDED3FA5-1764-490F-8BA3-7CE7B0553BC9'
PAGE_URL = 'https://gtop100.com/MapleStory/server-103514?vote=1&pingUsername=summerboy9'
async def solve_captcha():
solver = TwoCaptcha(API_KEY)
try:
result = solver.funcaptcha(
site_key=SITE_KEY,
url=PAGE_URL,
surl='https://client-api.arkoselabs.com'
)
token = result['code']
print(f"Капча решена! Токен: {token}")
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto(PAGE_URL)
await page.wait_for_selector('iframe[src*="arkoselabs"]', timeout=10000)
# Внедряем токен в скрытое поле
await page.evaluate(f"""
const tokenInput = document.getElementById('funaptcha-token');
if (tokenInput) {{
tokenInput.value = '{token}';
}}
// Если используется callback, вызываем его через ___grecaptcha_cfg или прямой вызов
if (typeof window.parent.onSuccess === 'function') {{
window.parent.onSuccess('{token}');
}}
""")
# Кликаем по кнопке голосования, если она стала активной
# await page.click('button[type="submit"]')
await asyncio.sleep(5)
await browser.close()
except Exception as e:
print(f"Ошибка: {e}")
asyncio.run(solve_captcha())
Отчеты о правильности решения
Если сайт отклонил полученный токен, обязательно сообщите об этом через метод reportIncorrect. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку. Если токен успешно прошел проверку, отправьте reportCorrect.
Отправить отчет можно через API:
python
import requests
API_KEY = "YOUR_API_KEY"
TASK_ID = "123456789"
# Отчет о неверном решении
requests.post(
"https://api.2captcha.com/reportIncorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
# Отчет о правильном решении
requests.post(
"https://api.2captcha.com/reportCorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
Подробный гайд по отправке отчетов с примерами для разных языков: https://2captcha.com/h/how-to-submit-reports
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| ERROR_CAPTCHA_UNSOLVABLE | IP-адрес, с которого решается капча, заблокирован Arkose Labs | Используйте тип задачи FunCaptchaTask и передавайте качественные резидентские прокси. Датацентровые IP часто блокируются. |
| Токен получен, но сайт отклоняет голос | Токен не был внедрен в нужное поле, истекло время жизни или IP изменился | Убедитесь, что вы внедряете токен в правильное скрытое поле или вызываете callback. Используйте прокси для финального запроса. |
| ERROR_WRONG_USER_KEY | Неверный API-ключ | Проверьте, что вы используете правильный ключ от 2Captcha. |
| Iframe с капчей не найден | Страница загружается динамически | Добавьте явные ожидания (waitForSelector) для iframe с arkoselabs или funcaptcha. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация по FunCaptcha (Arkose Labs): https://2captcha.com/api-docs/arkoselabs-funcaptcha
- Подробный гайд по отправке отчетов: https://2captcha.com/h/how-to-submit-reports
- Библиотека для Python: https://github.com/2captcha/2captcha-python