Mobil tarayıcı otomasyonu, masaüstüyle aynı CAPTCHA'larla (reCAPTCHA onay kutuları, Cloudflare zorlukları, görüntü ızgaraları) karşılaşır ancak aynı zamanda duyarlı düzenler, yalnızca dokunma etkileşimleri ve farklı Kullanıcı Aracısı parmak izleri gibi mobil cihazlara özgü tuhaflıklarla da karşı karşıya kalır.CaptchaAIcihaz bağlamından bağımsız olarak çözümü gerçekleştirir.
Bu eğitim iki yaklaşımı kapsamaktadır: ADB aracılığıyla Android için Chrome ile Selenium ve masaüstünde Playwright'ın mobil emülasyonu.
Gerçek Dünya Senaryosu
reCAPTCHA v2'ye hizmet veren, mobil cihazlar için optimize edilmiş bir web sitesinde form gönderimlerini otomatikleştiriyorsunuz. Site, mobil Kullanıcı Aracılarını algılar ve mobile özel bir CAPTCHA düzeni oluşturur. CAPTCHA'yı çözmeniz ve formu mobil tarayıcı bağlamında göndermeniz gerekir.
Yaklaşım 1: Oyun Yazarı Mobil Emülasyonu (Python)
Playwright'ın cihaz emülasyonu, mobil tarayıcıları CAPTCHA çözümüyle otomatikleştirmenin en basit yoludur; fiziksel cihaz gerektirmez:
# playwright_mobile_captcha.py
import asyncio
import httpx
from playwright.async_api import async_playwright
API_KEY = "YOUR_API_KEY"
async def solve_recaptcha(sitekey: str, pageurl: str) -> str:
"""Submit reCAPTCHA v2 to CaptchaAI and poll for result."""
async with httpx.AsyncClient(timeout=180) as client:
# Submit task
resp = await client.get(
"https://ocr.captchaai.com/in.php",
params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": "1",
},
)
result = resp.json()
if result["status"] != 1:
raise Exception(f"Submit failed: {result['request']}")
task_id = result["request"]
# Poll for result
for _ in range(30):
await asyncio.sleep(5)
poll = await client.get(
"https://ocr.captchaai.com/res.php",
params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": "1",
},
)
poll_result = poll.json()
if poll_result["status"] == 1:
return poll_result["request"]
if poll_result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Solve failed: {poll_result['request']}")
raise Exception("Polling timeout")
async def main():
async with async_playwright() as p:
# Launch with iPhone 13 emulation
iphone = p.devices["iPhone 13"]
browser = await p.chromium.launch(headless=False)
context = await browser.new_context(**iphone)
page = await context.new_page()
await page.goto("https://example.com/mobile-form")
await page.wait_for_selector(".g-recaptcha", timeout=10000)
# Extract sitekey
sitekey = await page.get_attribute(".g-recaptcha", "data-sitekey")
pageurl = page.url
print(f"Found sitekey: {sitekey}")
# Solve via CaptchaAI
token = await solve_recaptcha(sitekey, pageurl)
print(f"Token received: {token[:50]}...")
# Inject token
await page.evaluate(f"""
document.getElementById('g-recaptcha-response').value = '{token}';
document.getElementById('g-recaptcha-response').style.display = '';
""")
# Trigger callback if it exists
await page.evaluate(f"""
try {{
const clients = ___grecaptcha_cfg.clients;
Object.keys(clients).forEach(k => {{
Object.keys(clients[k]).forEach(j => {{
if (clients[k][j] && clients[k][j].callback) {{
clients[k][j].callback('{token}');
}}
}});
}});
}} catch(e) {{}}
""")
# Submit form
await page.click('button[type="submit"]')
await page.wait_for_load_state("networkidle")
print("Form submitted successfully")
await browser.close()
asyncio.run(main())
Yaklaşım 2: Mobil Emülasyonlu Selenyum (JavaScript)
Node.js iş akışları için Selenium'u Chrome DevTools Protokolü mobil emülasyonuyla kullanın:
// selenium_mobile_captcha.js
const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
async function solveCaptcha(sitekey, pageurl) {
// Submit task
const submitResp = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: API_KEY,
method: 'userrecaptcha',
googlekey: sitekey,
pageurl: pageurl,
json: '1',
},
});
if (submitResp.data.status !== 1) {
throw new Error(`Submit failed: ${submitResp.data.request}`);
}
const taskId = submitResp.data.request;
// Poll for result
for (let i = 0; i < 30; i++) {
await new Promise((r) => setTimeout(r, 5000));
const pollResp = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: '1' },
});
if (pollResp.data.status === 1) return pollResp.data.request;
if (pollResp.data.request !== 'CAPCHA_NOT_READY') {
throw new Error(`Solve failed: ${pollResp.data.request}`);
}
}
throw new Error('Polling timeout');
}
async function main() {
// Configure mobile emulation
const mobileEmulation = {
deviceMetrics: { width: 390, height: 844, pixelRatio: 3.0 },
userAgent:
'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) ' +
'AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
};
const options = new chrome.Options();
options.setMobileEmulation(mobileEmulation);
const driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
try {
await driver.get('https://example.com/mobile-form');
await driver.wait(until.elementLocated(By.css('.g-recaptcha')), 10000);
// Extract sitekey
const captchaEl = await driver.findElement(By.css('.g-recaptcha'));
const sitekey = await captchaEl.getAttribute('data-sitekey');
const pageurl = await driver.getCurrentUrl();
console.log(`Sitekey: ${sitekey}`);
// Solve CAPTCHA
const token = await solveCaptcha(sitekey, pageurl);
console.log(`Token: ${token.substring(0, 50)}...`);
// Inject token
await driver.executeScript(`
document.getElementById('g-recaptcha-response').value = arguments[0];
`, token);
// Submit form
await driver.findElement(By.css('button[type="submit"]')).click();
console.log('Form submitted');
} finally {
await driver.quit();
}
}
main().catch(console.error);
Mobile Özel Hususlar
| Faktör | Masaüstü | Mobil | CAPTCHA'ya etkisi |
|---|---|---|---|
| Kullanıcı Aracısı | Masaüstü Chrome/Firefox | Mobil Safari/Chrome | Bazı siteler cihaza göre farklı CAPTCHA yapılandırmaları sunar |
| Görünüm alanı | 1920×1080+ | 390×844 | CAPTCHA widget'ı farklı şekilde oluşturulabilir |
| Dokunma etkinlikleri | Fare olayları | Dokunma etkinlikleri | Bazı CAPTCHA'lar etkileşim türünü doğrular |
| Ağ | Geniş bant | 4G/5G | Daha uzun zaman aşımları gerekebilir |
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| CAPTCHA mobil öykünmede oluşturulmuyor | Site, navigator.platform aracılığıyla öykünmeyi algılıyor | DevTools Protokolünde platform geçersiz kılmayı ayarlayın |
g-recaptcha-response metin alanı bulunamadı |
Mobil düzende farklı CAPTCHA oluşturma kullanılıyor | ID yerine name özelliğine göre textarea arayın |
| Jeton enjeksiyonu çalışıyor ancak form hâlâ başarısız oluyor | Sunucu, Kullanıcı-Aracı tutarlılığını doğrular | Çözüm ve form gönderimi için aynı Kullanıcı Aracısının kullanıldığından emin olun |
| Öykünmede sayfa yavaş yükleniyor | Kaynak ağırlıklı sayfalar | Yüklemeyi hızlandırmak için --disable-images Chrome bayrağını kullanın |
SSS
Gerçek mobil cihazları mı yoksa emülasyonu mu kullanmalıyım?
Emülasyon, geliştirme için daha hızlıdır ve Appium veya ADB aracılığıyla CI/CD. Real cihazları, parmak izinin önemli olduğu üretim senaryoları için daha iyidir.
CaptchaAI'nin bunun mobil bir CAPTCHA olduğunu bilmesi gerekiyor mu?
Hayır. CaptchaAI, site anahtarına ve sayfa URL'sine göre çözer. Mobil ve masaüstü ayrımı çözüm sürecini etkilemez.
Mobil öykünmeyi proxy ile birleştirebilir miyim?
Evet. Hem Playwright hem de Selenium, mobil emülasyonun yanı sıra proxy yapılandırmasını da destekler. Tutarlılık için proxy'yi CaptchaAI'ye de iletin.
İlgili Makaleler
- Api Kullanarak Recaptcha V2 Geri Arama Sorunu Nasıl Çözülür?
- Zapier Captchaai Kodsuz Otomasyon
- Recaptcha V2 Turnstilesi Aynı Sahada İşleme
Sonraki Adımlar
Mobil CAPTCHA akışlarını otomatikleştirmeye başlayın -CaptchaAI API anahtarınızı alınve mobil otomasyon yığınınızla entegre edin.
İlgili kılavuzlar: