深度解析

什么是解决媒体验证码

Solve Media CAPTCHA(现在是 Permit.io / Radius Networks 的一部分)是一种基于广告的验证码,它用 品牌信息和口号 替换扭曲的随机文本。用户没有输入“aX3kP”,而是输入了可识别的短语,例如“您可以信任的质量”。

虽然 Solve Media 如今不太常见,但它仍然出现在一些网站上。它的工作原理类似于标准文本验证码,并且可以使用相同的图像 OCR 方法来解决。


Solve Media 的工作原理

  1. 该小部件加载广告消息并将其显示为图像
  2. 用户阅读品牌短语并将其输入输入框中
  3. 该响应由 Solve Media 的服务器验证
  4. 如果正确,则继续提交表单
┌─────────────────────────────────┐
│                                 │
│   "Taste The Rainbow"           │
│                                 │
├─────────────────────────────────┤
│ Type the phrase: [____________] │
│                     [Verify]    │
└─────────────────────────────────┘

解决媒体与标准文本验证码问题

特征 解决媒体 标准文本验证码
文字内容 品牌短语、英语单词 随机字符
可读性 高(意味着可读) 低(意味着很难)
失真 最小 重的
盈利模式 广告 没有任何
OCR 难点 简单(干净的文字) 硬(扭曲)
用户体验 更好(可识别的单词) 更糟糕(难以阅读)

识别页面上的求解媒体

寻找这些标记:

<!-- Solve Media script -->
<script src="https://api.solvemedia.com/papi/challenge.script"></script>

<!-- Widget container -->
<div id="adcopy-outer"></div>

<!-- Hidden response fields -->
<input type="hidden" name="adcopy_challenge" />
<input type="hidden" name="adcopy_response" />

ID 以 adcopy-solvemedia 开头的元素表示“解决媒体验证码”。


使用 CaptchaAI 求解求解媒体

由于 Solve Media 在图像中显示文本,因此可以使用标准图像 OCR 方法来解决:

Python

import requests
import time
import base64

API_KEY = "YOUR_API_KEY"

# Capture the CAPTCHA image
# Method 1: Screenshot the widget
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/page-with-solvemedia")

captcha_img = driver.find_element(By.CSS_SELECTOR, "#adcopy-puzzle-image img")
captcha_img.screenshot("solvemedia.png")

# Submit to CaptchaAI
with open("solvemedia.png", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode()

response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": img_b64,
    "phrase": 1,      # Contains spaces (multi-word phrase)
    "json": 1
})

task_id = response.json()["request"]

# Poll for solution
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        text = result["request"]
        print(f"Phrase: {text}")
        break

# Type the phrase
driver.find_element(By.CSS_SELECTOR, "#adcopy_response").send_keys(text)
driver.find_element(By.CSS_SELECTOR, "form").submit()

Node.js

const axios = require('axios');
const fs = require('fs');

async function solveSolveMedia(imagePath) {
  const imageB64 = fs.readFileSync(imagePath).toString('base64');

  const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
    params: {
      key: 'YOUR_API_KEY',
      method: 'base64',
      body: imageB64,
      phrase: 1,
      json: 1
    }
  });

  const taskId = submit.data.request;

  for (let i = 0; i < 30; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
    });
    if (res.data.status === 1) return res.data.request;
  }
  throw new Error('Timeout');
}

关键考虑因素

提示 为什么
设置 phrase=1 解决媒体短语包含空格的问题
设置 numeric=2 短语通常只是字母
不要设置 min_len/res.php 短语长度各不相同
保持原样 一些实现不区分大小写

常问问题

Solve Media 还活跃吗?

Solve Media 被收购并更名。一些旧的实现仍然存在于旧网站上,但新的部署很少。

为什么 Solve Media 比 reCAPTCHA 更容易解决?

Solve Media 被设计为可读 - 它是一种广告产品,而不是安全产品。文字故意清晰,以便用户能够阅读品牌信息。

我可以在没有 OCR 的情况下解决 Solve Media 问题吗?

在某些情况下,短语文本在页面源或 API 响应中可用,因此无需提取图像。检查 adcopy_challenge 隐藏字段。

CaptchaAI 有专用的 Solve Media 方法吗?

否。使用标准图像 OCR 方法(method=base64method=post)和 phrase=1


相关指南

该文章已禁用评论。