
Emma Foster
Machine Learning Engineer

AI travel agents membutuhkan akses real-time ke ketersediaan penerbangan, inventaris hotel, dan data platform pemesanan untuk memberikan rekomendasi yang akurat dan mengotomasi reservasi. Situs web perjalanan menerapkan perlindungan CAPTCHA yang agresif — reCAPTCHA, Cloudflare Turnstile, dan tantangan khusus — yang menghambat pengumpulan data otomatis setelah hanya beberapa puluh permintaan. Panduan ini menunjukkan cara membangun pipeline ketersediaan data perjalanan untuk agen AI menggunakan CapSolver untuk mempertahankan akses terus-menerus ke platform maskapai penerbangan, hotel, dan OTA.
Agen perjalanan online (OTAs), situs web maskapai penerbangan, dan platform pemesanan hotel termasuk situs yang paling dilindungi di internet. Platform ini berinvestasi secara signifikan dalam deteksi bot karena data harga sangat bernilai secara komersial dan sumber daya server mahal selama periode pemesanan puncak.
Ketika agen perjalanan AI mencoba memeriksa ketersediaan penerbangan di berbagai rute, membandingkan harga hotel di berbagai tanggal, atau memantau perubahan harga tiket, menghasilkan pola permintaan yang memicu tantangan verifikasi. Manajemen bot Cloudflare melaporkan bahwa situs perjalanan mengalami 3-5x lebih banyak lalu lintas bot daripada situs rata-rata, menyebabkan ambang batas perlindungan yang lebih agresif.
Penggunaan CAPTCHA yang umum di platform perjalanan termasuk reCAPTCHA v2 di halaman hasil pencarian setelah beberapa pencarian, Cloudflare Turnstile di frontend OTA modern, DataDome di mesin pemesanan maskapai besar, dan tantangan JavaScript khusus di aggregator hotel. Tanpa penyelesaian otomatis, agen perjalanan AI tidak dapat mempertahankan akses data terus-menerus yang diperlukan untuk rekomendasi real-time.
# Mesin inti CapSolver
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# Ketergantungan pengumpulan data
pip install aiohttp beautifulsoup4 pandas schedule
export CAPSOLVER_API_KEY="your-capsolver-api-key"
Persyaratan tambahan:
Peta perlindungan CAPTCHA di setiap platform perjalanan yang perlu diakses agen Anda:
TRAVEL_PLATFORMS = {
"booking_com": {
"name": "Booking.com",
"captcha_type": "AntiTurnstileTaskProxyLess",
"trigger": "after_20_searches_per_session",
"data_available": ["hotels", "apartments", "pricing", "availability"]
},
"skyscanner": {
"name": "Skyscanner",
"captcha_type": "ReCaptchaV2TaskProxyLess",
"trigger": "rate_limit_50_per_hour",
"data_available": ["flights", "prices", "routes", "airlines"]
},
"expedia": {
"name": "Expedia",
"captcha_type": "ReCaptchaV3TaskProxyLess",
"trigger": "behavioral_score_based",
"data_available": ["flights", "hotels", "packages", "car_rental"]
},
"airbnb": {
"name": "Airbnb",
"captcha_type": "AntiTurnstileTaskProxyLess",
"trigger": "after_search_and_listing_views",
"data_available": ["listings", "pricing", "availability", "reviews"]
}
}
Gunakan ekstensi CapSolver untuk mengidentifikasi kunci situs dan parameter CAPTCHA di setiap platform selama pengembangan.
Buat mesin pengumpulan asinkron dengan penyelesaian CAPTCHA terintegrasi:
import asyncio
import aiohttp
import time
from capsolver_core import create_capsolver, CaptchaType, CaptchaInfo
class TravelDataCollector:
"""Kumpulkan data ketersediaan perjalanan dengan penanganan CAPTCHA."""
def __init__(self, api_key: str, proxies: list):
self.cap = create_capsolver(api_key=api_key)
self.proxies = proxies
self.proxy_idx = 0
self.stats = {"queries": 0, "captchas_solved": 0}
async def search_flights(self, origin: str, destination: str, date: str) -> dict:
"""Cari ketersediaan penerbangan dengan penanganan CAPTCHA."""
proxy = self.proxies[self.proxy_idx % len(self.proxies)]
self.proxy_idx += 1
# Coba pencarian
result = await self._make_search_request(
platform="skyscanner",
params={"origin": origin, "dest": destination, "date": date},
proxy=proxy
)
# Tangani CAPTCHA jika dipicu
if self._is_captcha_response(result):
token = await self._solve_captcha("skyscanner")
result = await self._retry_with_token(token, proxy)
self.stats["captchas_solved"] += 1
self.stats["queries"] += 1
return self._parse_flight_results(result)
async def search_hotels(self, location: str, checkin: str, checkout: str) -> dict:
"""Cari ketersediaan hotel dengan penanganan CAPTCHA."""
proxy = self.proxies[self.proxy_idx % len(self.proxies)]
self.proxy_idx += 1
result = await self._make_search_request(
platform="booking_com",
params={"location": location, "checkin": checkin, "checkout": checkout},
proxy=proxy
)
if self._is_captcha_response(result):
token = await self._solve_captcha("booking_com")
result = await self._retry_with_token(token, proxy)
self.stats["captchas_solved"] += 1
self.stats["queries"] += 1
return self._parse_hotel_results(result)
async def _solve_captcha(self, platform_key: str) -> str:
"""Selesaikan CAPTCHA untuk platform perjalanan tertentu."""
platform = TRAVEL_PLATFORMS[platform_key]
type_map = {
"ReCaptchaV2TaskProxyLess": CaptchaType.RECAPTCHA_V2,
"ReCaptchaV3TaskProxyLess": CaptchaType.RECAPTCHA_V3,
"AntiTurnstileTaskProxyLess": CaptchaType.CLOUDFLARE
}
info = CaptchaInfo(
type=type_map[platform["captcha_type"]],
website_url=f"https://www.{platform_key.replace('_', '')}.com",
website_key=platform.get("site_key", "")
)
solution = await self.cap.solve(info)
return solution.token
async def close(self):
await self.cap.aclose()
Dokumentasi API CapSolver (https://www.capsolver.com/blog/reCAPTCHA/captcha-solver-response-api) mencakup optimasi waktu penyelesaian untuk skenario pemantauan frekuensi tinggi.
class TravelPriceMonitor:
"""Pantau harga perjalanan dan beri pemberitahuan perubahan."""
def __init__(self, collector: TravelDataCollector):
self.collector = collector
self.price_history = {}
async def monitor_route(self, origin: str, dest: str, dates: list) -> list:
"""Pantau rute penerbangan di berbagai tanggal."""
alerts = []
for date in dates:
current = await self.collector.search_flights(origin, dest, date)
route_key = f"{origin}-{dest}-{date}"
if route_key in self.price_history:
prev_price = self.price_history[route_key]
curr_price = current.get("lowest_price", 0)
if curr_price < prev_price * 0.9: # Penurunan harga 10%+
alerts.append({
"type": "PRICE_DROP",
"route": f"{origin} → {dest}",
"date": date,
"old_price": prev_price,
"new_price": curr_price,
"savings": f"{(1 - curr_price/prev_price)*100:.0f}%"
})
self.price_history[route_key] = current.get("lowest_price", 0)
await asyncio.sleep(5) # Pembatasan kecepatan
return alerts
| Ruang Lingkup Pemantauan | Permintaan Harian | CAPTCHA Bulanan (est.) | Biaya Bulanan |
|---|---|---|---|
| 10 rute, 2x/hari | ~60 | ~180 | $0.36-0.54 |
| 50 rute, 2x/hari | ~300 | ~900 | $1.80-2.70 |
| 200 rute, 4x/hari | ~2.400 | ~7.200 | $14-22 |
| 500 hotel, harian | ~1.500 | ~4.500 | $9-14 |
Strategi optimisasi:
Dapatkan Kode Bonus Anda: Gunakan kode WEBS di Dashboard CapSolver untuk mendapatkan bonus tambahan 5% pada setiap recharge. Ideal untuk agen perjalanan AI yang memantau harga di berbagai platform.
Pengumpulan data perjalanan harus mengikuti praktik yang bertanggung jawab:
robots.txt dan batas kecepatanFAQ CapSolver tentang penggunaan yang bertanggung jawab (https://www.capsolver.com/faq/ai-and-automation) memberikan panduan tambahan. Untuk menangani situs perjalanan yang dilindungi Cloudflare (https://www.capsolver.com/blog/Cloudflare/bypass-cloudflare-turnstile), dokumentasi penyelesaian Turnstile mencakup pola implementasi khusus. Panduan penggalian web CapSolver (https://www.capsolver.com/blog/web-scraping/web-scraping-with-python) menawarkan pola infrastruktur tambahan untuk pengumpulan volume tinggi.
Membangun pipeline ketersediaan data perjalanan untuk agen AI membutuhkan profiling sistem CAPTCHA platform, implementasi penyelesaian asinkron dengan CapSolver, dan pengaturan pemantauan berkala dengan pemberitahuan harga. Kombinasi proxy residensial, persistensi sesi, dan penyelesaian CAPTCHA otomatis memungkinkan pengumpulan data yang andal di berbagai platform maskapai penerbangan, hotel, dan OTA dengan biaya yang dapat dikelola.
Pendekatan ini berfungsi untuk platform yang menggunakan sistem CAPTCHA standar: Booking.com, Skyscanner, Expedia, Kayak, Google Flights, Airbnb, dan sebagian besar OTA. Setiap platform memerlukan identifikasi parameter CAPTCHA khusus, tetapi mekanisme penyelesaian konsisten di seluruh platform.
Untuk pemantauan penerbangan, 2-4 pemeriksaan per hari menangkap sebagian besar perubahan harga. Untuk ketersediaan hotel selama musim puncak, pemeriksaan setiap jam mungkin diperlukan. Seimbangkan frekuensi pemeriksaan dengan biaya penyelesaian CAPTCHA dan batas kecepatan platform.
Dengan 50 rute yang diperiksa dua kali sehari dengan tingkat penemuan CAPTCHA sekitar 30%, biaya bulanan sekitar $1,80-2,70 untuk penyelesaian CAPTCHA. Tambahkan biaya proxy sebesar $20-50/bulan untuk kumpulan residensial. Biaya infrastruktur total di bawah $55/bulan untuk pemantauan rute komprehensif.
Pipeline pengumpulan data menyediakan informasi harga dan ketersediaan. Pemesanan aktual memerlukan langkah tambahan pengisian formulir dan pemrosesan pembayaran. CapSolver dapat menangani CAPTCHA selama alur pemesanan juga, tetapi pastikan Anda memiliki otorisasi yang tepat untuk pemesanan otomatis di setiap platform.
Implementasikan snapshot berbasis timestamp dan kumpulkan semua data rute dalam jangka waktu singkat (kurang dari 30 menit). Ini memastikan perbandingan harga berdasarkan titik data yang hampir bersamaan. Tandai harga yang berubah antara awal dan akhir pengumpulan untuk pemeriksaan ulang.
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
