Solve Media adalah CAPTCHA berbasis iklan: alih-alih huruf acak yang sengaja dibuat berantakan, pengguna diminta mengetik ulang slogan merek seperti "Quality You Can Trust". Untuk tim otomatisasi, konsekuensinya satu dan sangat praktis — ini bukan tantangan JavaScript seperti reCAPTCHA atau Cloudflare Turnstile, melainkan teks di dalam sebuah gambar, sehingga ditangani dengan jalur OCR gambar biasa.
Layanan ini sudah diakuisisi dan kini berada di bawah Permit.io / Radius Networks, jadi penerapan barunya praktis nihil. Namun kalau pekerjaan Anda menyentuh portal lama, sistem internal perusahaan, atau situs media yang belum pernah dimigrasikan sejak awal 2010-an, widget adcopy- ini masih akan muncul. Bagian berikut membahas cara mengenalinya di HTML, alasan OCR menanganinya jauh lebih ringan daripada CAPTCHA teks klasik, dan parameter API mana yang benar-benar menentukan hasil.
Kenapa Solve Media justru paling mudah dibaca mesin
Ada satu hal yang membingungkan saat pertama kali menemuinya: CAPTCHA lain berusaha keras agar sulit dibaca, Solve Media justru sebaliknya. Model bisnisnya adalah periklanan — pengiklan membayar supaya pesannya terbaca. Distorsi berat akan menghancurkan nilai jual itu, jadi teksnya dibiarkan bersih, kontras tinggi, dan memakai kata bahasa Inggris yang benar-benar ada di kamus.
Untuk OCR, perbedaan itu besar. Mesin yang tersendat pada karakter acak bergelombang bekerja pada kondisi mendekati ideal di sini: font rapi, latar polos, dan kosakata yang bisa divalidasi silang.
| Aspek | Solve Media | CAPTCHA teks standar |
|---|---|---|
| Isi teks | Frasa merek, kata bahasa Inggris | Karakter acak |
| Keterbacaan | Tinggi (memang harus terbaca) | Rendah (memang dibuat sulit) |
| Distorsi | Minimal | Berat |
| Model pendapatan | Periklanan | Tidak ada |
| Beban untuk OCR | Ringan (teks bersih) | Berat (terdistorsi) |
| Pengalaman pengguna | Lebih baik (kata dikenali) | Lebih buruk (sulit dibaca) |
Alur satu tantangan Solve Media
Urutannya sederhana dan tidak pernah berubah:
- Widget dimuat lalu menampilkan pesan iklan sebagai gambar
- Pengguna membaca frasa merek dan mengetiknya ke kolom input
- Server Solve Media memverifikasi jawaban tersebut
- Jika cocok, proses submit form dilanjutkan
┌─────────────────────────────────┐
│ │
│ "Taste The Rainbow" │
│ │
├─────────────────────────────────┤
│ Type the phrase: [____________] │
│ [Verify] │
└─────────────────────────────────┘
Perhatikan bahwa yang diverifikasi adalah string frasa, bukan token kriptografis. Tidak ada g-recaptcha-response yang harus disuntikkan ke DOM dan tidak ada callback yang harus dipicu. Anda cukup mengisi kolom teks lalu submit form seperti pengguna biasa — inilah yang membuat integrasinya jauh lebih ringkas dibanding tantangan modern.
Mengenali Solve Media di halaman
Sebelum menulis kode apa pun, pastikan dulu bahwa yang Anda hadapi memang Solve Media. Penandanya konsisten dan mudah dicari:
<!-- 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" />
Aturan praktisnya: setiap elemen dengan ID berawalan adcopy- atau mengandung solvemedia hampir pasti berasal dari widget ini. Field tersembunyi adcopy_challenge dan adcopy_response adalah pasangan yang dikirim bersama form, dan adcopy_response adalah tempat frasa hasil OCR nanti diketik.
Satu skenario yang sering muncul di pekerjaan kontrak lokal: banyak developer di Indonesia mengambil job maintenance untuk CMS lawas milik klien — portal berita daerah, sistem pendaftaran, atau form kontak korporat berbasis PHP yang belum tersentuh bertahun-tahun. Saat form itu tiba-tiba menolak submit dari skrip QA, refleks pertama biasanya menuduh reCAPTCHA. Cek view-source lebih dulu: kalau yang muncul justru api.solvemedia.com/papi/challenge.script, penanganannya sama sekali berbeda dan jauh lebih sederhana.
Menyelesaikan Solve Media dengan CaptchaAI
CaptchaAI tidak punya metode khusus bernama "solvemedia", dan memang tidak perlu. Karena tantangannya berupa teks di dalam gambar, jalurnya adalah metode OCR gambar standar: ambil gambar widget, kirim ke in.php, simpan task ID, lakukan polling ke res.php, lalu ketikkan hasilnya ke kolom adcopy_response.
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');
}
Dua contoh di atas memakai pola yang sama seperti seluruh integrasi OCR CaptchaAI lain: kirim → simpan task ID → polling → pakai hasil. Jika Anda sudah pernah memakai CaptchaAI untuk CAPTCHA gambar biasa, tidak ada yang baru selain nilai phrase.
Parameter yang menentukan akurasi
Kesalahan paling umum bukan pada kode, melainkan pada parameter pengiriman. Empat hal berikut yang paling sering membuat hasil OCR meleset:
| Pengaturan | Alasan |
|---|---|
Setel phrase=1 |
Frasa Solve Media mengandung spasi antar kata |
Setel numeric=2 |
Isinya umumnya huruf saja, tanpa angka |
Jangan setel min_len/max_len |
Panjang frasa berbeda-beda tiap iklan |
| Biarkan kapitalisasi apa adanya | Sebagian implementasi tidak membedakan huruf besar-kecil |
Tambahan dari sisi pengambilan gambar: pastikan screenshot hanya memotong area gambar frasa, bukan seluruh container widget. Border, tombol refresh, dan teks bantuan di sekitarnya ikut terbaca sebagai karakter dan menurunkan akurasi tanpa alasan.
Biaya dan throughput untuk beban seperti ini
Solve Media hampir selalu muncul dalam volume kecil — beberapa form pada satu situs lama, bukan ribuan permintaan per jam. Untuk beban seperti itu, model penagihan CaptchaAI berbasis thread (bukan per solve) berarti biaya bulanan Anda tetap sama entah Anda menyelesaikan sepuluh atau sepuluh ribu gambar. Paket terkecil, BASIC ($15/bulan, 5 thread), sudah lebih dari cukup untuk skrip maintenance atau suite QA terjadwal.
Kalau job maintenance itu berjalan berdampingan dengan pekerjaan scraping yang lebih berat, barulah naik tingkat masuk akal: STANDARD ($30/bulan, 15 thread) atau ADVANCE ($90/bulan, 50 thread). Satu thread menangani satu CAPTCHA yang sedang berjalan; begitu selesai, thread itu langsung bebas untuk permintaan berikutnya. Harga tetap dalam USD dan daftar lengkapnya ada di halaman pricing CaptchaAI.
Untuk skrip yang di-deploy dari region terdekat seperti AWS ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta), jeda polling 5 detik seperti pada contoh sudah aman. Jangan memperpendeknya menjadi satu detik — itu hanya menambah permintaan tanpa mempercepat hasil.
Pertanyaan Umum
Apakah Solve Media masih dipakai di situs baru?
Praktis tidak. Layanannya sudah diakuisisi dan diganti nama, sehingga yang tersisa hanyalah penerapan warisan di situs-situs lama. Anda menemuinya karena mewarisi kode orang lain, bukan karena ada yang memasangnya hari ini.
Bagaimana membedakan Solve Media dari reCAPTCHA pada halaman yang sama?
Lihat sumber halaman. reCAPTCHA memuat skrip dari domain Google dan menyisipkan field g-recaptcha-response; Solve Media memuat api.solvemedia.com/papi/challenge.script dan memakai pasangan field adcopy_challenge serta adcopy_response. Penanda adcopy- adalah pembeda paling cepat.
Apakah frasanya selalu berbahasa Inggris?
Hampir selalu, karena inventaris iklannya berbasis pasar berbahasa Inggris. Jangan menormalisasi hasil OCR ke kosakata Indonesia atau mengoreksinya secara otomatis — kirim string apa adanya ke kolom adcopy_response.
Perlukah saya menjalankan browser untuk menyelesaikannya?
Tidak selalu. Browser hanya dibutuhkan untuk mengambil gambar widget. Jika URL gambar tantangan bisa Anda peroleh langsung dari HTML, cukup unduh gambarnya dengan klien HTTP biasa lalu kirim ke in.php — tanpa Selenium sama sekali.
Bagaimana kalau form lama yang sama juga memakai hCaptcha atau FunCaptcha?
Dua tipe itu belum didukung. hCaptcha dan FunCaptcha (Arkose Labs) tidak tersedia saat ini, dan GeeTest v4 masih berstatus segera hadir. Yang didukung mencakup reCAPTCHA v2/v3, Cloudflare Turnstile dan Cloudflare Challenge, GeeTest v3, serta CAPTCHA gambar/OCR dan grid — plus CaptchaFox (beta), Friendly Captcha (beta), dan Lemin (beta).