Solve Media CAPTCHA(现在是 Permit.io / Radius Networks 的一部分)是一种基于广告的验证码,它用 品牌信息和口号 替换扭曲的随机文本。用户没有输入“aX3kP”,而是输入了可识别的短语,例如“您可以信任的质量”。
虽然 Solve Media 如今不太常见,但它仍然出现在一些网站上。它的工作原理类似于标准文本验证码,并且可以使用相同的图像 OCR 方法来解决。
Solve Media 的工作原理
- 该小部件加载广告消息并将其显示为图像
- 用户阅读品牌短语并将其输入输入框中
- 该响应由 Solve Media 的服务器验证
- 如果正确,则继续提交表单
┌─────────────────────────────────┐
│ │
│ "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=base64 或 method=post)和 phrase=1。