Airtable, proje yönetimi, veri toplama ve iş akışı otomasyonu için kullanılan esnek bir veritabanı platformudur. Airtable iş akışınızın CAPTCHA korumalı hizmetlerle (form gönderme, URL'leri işleme veya veri girişini otomatikleştirme) etkileşime girmesi gerektiğindeCaptchaAIAutomations ve Scripting uzantılarını kullanarak CAPTCHA'ları doğrudan Airtable'dan çözebilir.
Bu kılavuz, yeni kayıtlar oluşturulduğunda veya güncellendiğinde CaptchaAI aracılığıyla CAPTCHA çözmeyi tetikleyen Airtable Otomasyonlarının nasıl kurulacağını gösterir.
Gerçek Dünya Senaryosu
Hedef URL'leri Airtable tablosunda izlersiniz. Her URL'de, verilerin çıkarılabilmesi için çözülmesi gereken bir CAPTCHA bulunur. Yeni bir URL eklendiğinde:
- Airtable Otomasyonu yeni rekoru tespit ediyor
- Bir komut dosyası CAPTCHA parametrelerini CaptchaAI'ye gönderir
- CaptchaAI çözülmüş jetonu döndürür
- Belirteç Airtable kaydına geri kaydedilir
Tablo Yapısı
Şu alanlarla CAPTCHA Görevleri adlı bir Airtable tablosu oluşturun:
| Alan Adı | Tür | Amaç |
|---|---|---|
| URL'si | URL'si | Hedef sayfa URL'si |
| Site anahtarı | Tek satırlık metin | reCAPTCHA site anahtarı |
| Durum | Tek seçim | beklemede, çözülüyor, çözüldü, başarısız oldu |
| Jeton | Uzun metin | Çözülmüş CAPTCHA belirteci |
| Çözüldü | Tarih/time | Çözümün zaman damgası |
| Hata | Tek satırlık metin | Başarısız olursa hata mesajı |
1. Adım: Otomasyonu Oluşturun
Airtable'da:
- Otomasyonlar sekmesine gidin
- Otomasyon oluştur'u tıklayın
- Adını verin: "Yeni Kayıttaki CAPTCHA'yı Çöz"
Tetikleyici
Kayıt koşullarla eşleştiğinde seçeneğini seçin:
- Tablo: CAPTCHA Görevleri
- Durum: Durum "beklemede"
Bu, hem yeni kayıtları hem de yeniden çözümleri kapsayan bir kayıt "beklemede" olarak ayarlandığında tetiklenir.
2. Adım: Komut Dosyası Eylemini Ekleyin
Bir eylem ekleyin – Bir komut dosyası çalıştırın:
// Airtable Automation Script — Solve CAPTCHA via CaptchaAI
// Input configuration (set in the left panel):
// - recordId: Record ID from trigger
// - sitekey: Sitekey field from trigger
// - pageurl: URL field from trigger
const config = input.config();
const recordId = config.recordId;
const sitekey = config.sitekey;
const pageurl = config.pageurl;
const API_KEY = 'YOUR_API_KEY'; // Use input.config() for security
// Update status to "solving"
const table = base.getTable('CAPTCHA Tasks');
await table.updateRecordAsync(recordId, {
'Status': { name: 'solving' },
});
try {
// Step 1: Submit task to CaptchaAI
const submitUrl = `https://ocr.captchaai.com/in.php?key=${API_KEY}&method=userrecaptcha&googlekey=${encodeURIComponent(sitekey)}&pageurl=${encodeURIComponent(pageurl)}&json=1`;
const submitResponse = await fetch(submitUrl);
const submitResult = await submitResponse.json();
if (submitResult.status !== 1) {
throw new Error(`Submit failed: ${submitResult.request}`);
}
const taskId = submitResult.request;
console.log(`Task submitted: ${taskId}`);
// Step 2: Poll for result (wait 15 seconds first)
await new Promise(resolve => setTimeout(resolve, 15000));
let token = null;
for (let i = 0; i < 20; i++) {
const pollUrl = `https://ocr.captchaai.com/res.php?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const pollResponse = await fetch(pollUrl);
const pollResult = await pollResponse.json();
if (pollResult.status === 1) {
token = pollResult.request;
break;
}
if (pollResult.request !== 'CAPCHA_NOT_READY') {
throw new Error(`Solve failed: ${pollResult.request}`);
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!token) {
throw new Error('Polling timeout — CAPTCHA not solved in time');
}
// Step 3: Update record with solved token
await table.updateRecordAsync(recordId, {
'Status': { name: 'solved' },
'Token': token,
'Solved At': new Date().toISOString(),
'Error': '',
});
console.log(`CAPTCHA solved for record ${recordId}`);
} catch (error) {
// Update record with error
await table.updateRecordAsync(recordId, {
'Status': { name: 'failed' },
'Error': error.message,
});
console.error(`Failed: ${error.message}`);
}
Komut Dosyası Girişlerini Yapılandırma
Betik eyleminin sol panelinde giriş değişkenlerini eşleyin:
recordId– Tetikleme adımından ID kaydısitekey– tetikleme adımından Sitekey alanıpageurl– tetikleme adımındaki URL alanı
3. Adım: Komut Dosyası Uzantısıyla Toplu İşleme
Birçok kaydı aynı anda işlemek için Airtable'ın Scripting uzantısını (Uygulamalar panelinde mevcuttur) kullanın:
// Batch CAPTCHA Solver — Airtable Scripting Extension
const API_KEY = 'YOUR_API_KEY';
const table = base.getTable('CAPTCHA Tasks');
// Get all pending records
const query = await table.selectRecordsAsync({
fields: ['URL', 'Sitekey', 'Status'],
});
const pendingRecords = query.records.filter(
r => r.getCellValueAsString('Status') === 'pending'
);
output.text(`Found ${pendingRecords.length} pending CAPTCHAs`);
for (const record of pendingRecords) {
const sitekey = record.getCellValueAsString('Sitekey');
const pageurl = record.getCellValueAsString('URL');
if (!sitekey || !pageurl) {
output.text(`Skipping ${record.id} — missing sitekey or URL`);
continue;
}
output.text(`Solving for: ${pageurl}`);
await table.updateRecordAsync(record.id, {
'Status': { name: 'solving' },
});
try {
// Submit
const submitResp = await fetch(
`https://ocr.captchaai.com/in.php?key=${API_KEY}&method=userrecaptcha&googlekey=${encodeURIComponent(sitekey)}&pageurl=${encodeURIComponent(pageurl)}&json=1`
);
const submitData = await submitResp.json();
if (submitData.status !== 1) throw new Error(submitData.request);
// Poll
await new Promise(r => setTimeout(r, 15000));
let token = null;
for (let i = 0; i < 20; i++) {
const pollResp = await fetch(
`https://ocr.captchaai.com/res.php?key=${API_KEY}&action=get&id=${submitData.request}&json=1`
);
const pollData = await pollResp.json();
if (pollData.status === 1) { token = pollData.request; break; }
if (pollData.request !== 'CAPCHA_NOT_READY') throw new Error(pollData.request);
await new Promise(r => setTimeout(r, 5000));
}
if (!token) throw new Error('Timeout');
await table.updateRecordAsync(record.id, {
'Status': { name: 'solved' },
'Token': token,
'Solved At': new Date().toISOString(),
});
output.text(`✓ Solved: ${pageurl}`);
} catch (e) {
await table.updateRecordAsync(record.id, {
'Status': { name: 'failed' },
'Error': e.message,
});
output.text(`✗ Failed: ${e.message}`);
}
}
output.text('Batch processing complete');
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Otomasyon tetiklenmiyor | Kayıt "beklemede" durumuyla eşleşmiyor | Durum alanı değerinin tam olarak eşleştiğini doğrulayın |
fetch is not defined |
Airtable Scripting, bazı bağlamlarda remoteFetchAsync'yi kullanır |
fetch yerine remoteFetchAsync'yi deneyin |
| Komut dosyası zaman aşımı | Airtable komut dosyalarının otomasyonlar için 30 saniyelik bir sınırı vardır | Daha az yoklama yinelemesi kullanın; ilk bekleme süresini 20 saniyeye çıkar |
| Kayıt güncellemesi başarısız oluyor | Alan adı uyuşmazlığı | updateRecordAsync tablosundaki alan adlarının tam olarak eşleştiğinden emin olun |
| Komut dosyasında gösterilen API anahtarı | Sabit kodlanmış API anahtarı | input.config()'yi gizli bir giriş değişkeniyle kullanın |
SSS
Airtable'da komut dosyası yürütme süresi sınırı nedir?
Otomasyon komut dosyaları: 30 saniye. Komut dosyası uzantısı: 30 saniye (ancak Pro planlarıyla uzatılabilir). Uzun yoklama için ilk bekleme süresini artırın ve yinelemeleri azaltın.
Bunu Resim CAPTCHA'ları için de kullanabilir miyim?
Evet. method'yi base64 olarak değiştirin ve görüntü verilerini gönderin. Base64 kodlu CAPTCHA görüntülerini Airtable Ek alanlarında saklayabilir ve bunları komut dosyasına çıkarabilirsiniz.
API anahtarını güvenli bir şekilde nasıl kullanırım?
Otomasyonlarda, komut dosyası ayarları panelinde yapılandırılan giriş değişkenlerini kullanın. Komut Dosyası uzantısında, input.textAsync() ile çalışma zamanında anahtarı isteyebilirsiniz.
Başarısız CAPTCHA'ları yeniden çözebilir miyim?
Evet. Durumu tekrar "beklemede" olarak ayarlayın; otomasyon yeniden tetiklenecektir. Yeniden denemeleri sınırlamak için yeniden deneme sayacı alanı ekleyin.
İlgili Makaleler
- Api Kullanarak Recaptcha V2 Geri Arama Sorunu Nasıl Çözülür?
- Recaptcha V2 Turnstilesi Aynı Sahada İşleme
- Recaptcha V2 Geri Arama Mekanizması
Sonraki Adımlar
Airtable veritabanlarınızdan CAPTCHA çözmeyi otomatikleştirin -CaptchaAI API anahtarınızı alınve otomasyonu ayarlayın.
İlgili kılavuzlar: