
Emma Foster
Machine Learning Engineer

AI recruiting agents membutuhkan data pencarian pekerjaan yang terstruktur — judul, persyaratan, kompensasi, detail perusahaan — dari papan lowongan utama untuk memasangkan kandidat, menganalisis tren pasar, dan mengotomasi alur kerja sumber daya. Papan lowongan seperti Indeed, LinkedIn, dan Glassdoor menerapkan perlindungan CAPTCHA yang memblokir pengumpulan otomatis setelah beberapa puluh permintaan. Panduan ini menunjukkan cara membangun pipeline data papan lowongan untuk agen rekrutmen AI menggunakan CapSolver untuk mempertahankan akses terus-menerus ke platform pekerjaan.
Agen rekrutmen AI melakukan tugas yang memerlukan akses skala besar ke papan lowongan: menelusuri ribuan listing untuk memasangkan keterampilan kandidat, memantau tren kompensasi di berbagai industri, melacak perusahaan mana yang merekrut untuk peran tertentu, dan mengidentifikasi kebutuhan keterampilan yang muncul. Tugas-tugas ini menghasilkan volume permintaan yang memicu deteksi bot di platform pekerjaan.
Papan lowongan berinvestasi secara signifikan dalam perlindungan bot karena data mereka bernilai komersial. Data listing, informasi gaji, dan ulasan perusahaan menggerakkan pendapatan langganan. Data Biro Statistik Tenaga Kerja menunjukkan bahwa pasar pekerjaan AS memproses lebih dari 6 juta perekrutan bulanan — data yang mendasari transaksi ini bernilai miliaran bagi perusahaan teknologi rekrutmen.
Ketika agen rekrutmen AI menghadapi CAPTCHA di hasil pencarian Indeed, daftar pekerjaan LinkedIn, atau halaman perusahaan Glassdoor, ia tidak dapat melanjutkan pengumpulan data yang diperlukan untuk pemetaan kandidat dan analisis pasar. CapSolver menyediakan lapisan penyelesaian verifikasi yang mempertahankan pipeline data rekrutmen berjalan terus-menerus.
pip install git+https://github.com/capsolver-ai/capsolver-core.git
pip install aiohttp beautifulsoup4 pandas
export CAPSOLVER_API_KEY="your-capsolver-api-key"
Persyaratan tambahan:
JOB_BOARDS = {
"indeed": {
"name": "Indeed",
"captcha_type": "ReCaptchaV2TaskProxyLess",
"trigger": "after_30_searches",
"data_fields": ["title", "company", "location", "salary", "description", "posted_date"]
},
"linkedin_jobs": {
"name": "LinkedIn Jobs",
"captcha_type": "AntiTurnstileTaskProxyLess",
"trigger": "rate_limit_and_behavioral",
"data_fields": ["title", "company", "location", "level", "employment_type", "applicants"]
},
"glassdoor": {
"name": "Glassdoor",
"captcha_type": "ReCaptchaV2TaskProxyLess",
"trigger": "after_40_page_views",
"data_fields": ["title", "company", "salary_range", "rating", "reviews", "benefits"]
},
"ziprecruiter": {
"name": "ZipRecruiter",
"captcha_type": "AntiTurnstileTaskProxyLess",
"trigger": "rate_limit_60_per_hour",
"data_fields": ["title", "company", "salary", "location", "skills", "posted_date"]
}
}
Gunakan ekstensi CapSolver untuk mengidentifikasi parameter CAPTCHA di setiap papan lowongan.
import asyncio
from capsolver_core import create_capsolver, CaptchaType, CaptchaInfo
class JobBoardCollector:
"""Kumpulkan data listing pekerjaan 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 = {"listings_collected": 0, "captchas_solved": 0}
async def search_jobs(self, query: str, location: str, platform: str = "indeed") -> list:
"""Cari listing pekerjaan dengan penanganan CAPTCHA."""
proxy = self.proxies[self.proxy_idx % len(self.proxies)]
self.proxy_idx += 1
html = await self._fetch_search(platform, query, location, proxy)
if self._is_captcha(html):
token = await self._solve(platform)
html = await self._retry(platform, query, location, proxy, token)
self.stats["captchas_solved"] += 1
listings = self._parse_listings(html)
self.stats["listings_collected"] += len(listings)
return listings
async def _solve(self, platform_key: str) -> str:
"""Selesaikan CAPTCHA untuk papan lowongan."""
platform = JOB_BOARDS[platform_key]
type_map = {
"ReCaptchaV2TaskProxyLess": CaptchaType.RECAPTCHA_V2,
"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 collect_salary_data(self, role: str, location: str) -> dict:
"""Kumpulkan data gaji untuk peran dan lokasi tertentu."""
results = {}
for platform in ["indeed", "glassdoor", "ziprecruiter"]:
listings = await self.search_jobs(f"{role} salary", location, platform)
salaries = [l.get("salary") for l in listings if l.get("salary")]
if salaries:
results[platform] = {
"min": min(salaries),
"max": max(salaries),
"median": sorted(salaries)[len(salaries)//2],
"sample_size": len(salaries)
}
await asyncio.sleep(5)
return results
async def close(self):
await self.cap.aclose()
Documentasi API CapSolver menutupi optimasi waktu penyelesaian untuk pengumpulan data frekuensi tinggi.
class RecruitingIntelligence:
"""Lapisan data agen rekrutmen AI."""
def __init__(self, collector: JobBoardCollector):
self.collector = collector
async def market_analysis(self, role: str, locations: list) -> dict:
"""Analisis pasar pekerjaan untuk peran tertentu di berbagai lokasi."""
analysis = {}
for location in locations:
listings = await self.collector.search_jobs(role, location)
analysis[location] = {
"total_openings": len(listings),
"companies_hiring": list(set(l.get("company") for l in listings if l.get("company"))),
"common_skills": self._extract_skills(listings),
"salary_range": self._salary_range(listings)
}
await asyncio.sleep(5)
return analysis
async def track_hiring_trends(self, companies: list, period_days: int = 30) -> dict:
"""Pantau aktivitas perekrutan perusahaan tertentu."""
trends = {}
for company in companies:
listings = await self.collector.search_jobs(company, "remote")
trends[company] = {
"active_listings": len(listings),
"roles": [l.get("title") for l in listings[:10]],
"locations": list(set(l.get("location") for l in listings if l.get("location")))
}
await asyncio.sleep(5)
return trends
def _extract_skills(self, listings: list) -> list:
"""Ekstrak keterampilan umum dari deskripsi pekerjaan."""
# Ekstraksi keterampilan yang disederhanakan
all_skills = []
for listing in listings:
desc = listing.get("description", "").lower()
common_skills = ["python", "javascript", "sql", "aws", "react", "machine learning", "docker", "kubernetes"]
for skill in common_skills:
if skill in desc:
all_skills.append(skill)
from collections import Counter
return [s for s, _ in Counter(all_skills).most_common(10)]
| Ruang Lingkup Pemantauan | Pencarian Harian | CAPTCHA Bulanan | Biaya Bulanan |
|---|---|---|---|
| 10 peran, 3 lokasi | ~90 | ~270 | $0.54-0.81 |
| 50 peran, 5 lokasi | ~750 | ~2,250 | $4.50-6.75 |
| 200 peran, 10 lokasi | ~6,000 | ~18,000 | $36-54 |
Strategi optimisasi:
Dapatkan Kode Bonus Anda: Gunakan kode WEBS di Dashboard CapSolver untuk mendapatkan bonus tambahan 5% pada setiap recharge. Ideal untuk tim teknologi HR yang membangun agen rekrutmen AI.
FAQ CapSolver tentang penggunaan yang bertanggung jawab memberikan panduan tambahan. Dokumentasi penggalian web CapSolver menutupi pola infrastruktur untuk pengumpulan volume tinggi. Untuk papan lowongan yang dilindungi Cloudflare, dokumentasi Turnstile memberikan detail implementasi khusus.
Membangun pipeline data papan lowongan untuk agen rekrutmen AI memerlukan profiling sistem CAPTCHA platform, implementasi penyelesaian asinkron dengan CapSolver, dan membangun fitur intelegensia di atas data yang dikumpulkan. Kombinasi proxy residensial, manajemen sesi, dan penyelesaian CAPTCHA otomatis memungkinkan pengumpulan data yang andal di berbagai platform pekerjaan utama.
Pendekatan ini berfungsi untuk platform yang menggunakan sistem CAPTCHA standar: Indeed, LinkedIn Jobs, Glassdoor, ZipRecruiter, Monster, CareerBuilder, dan sebagian besar papan lowongan regional. Setiap yang memerlukan identifikasi parameter CAPTCHA khusus.
Untuk rekrutmen aktif, pengumpulan harian menangkap postingan baru dalam 24 jam. Untuk analisis pasar dan pelacakan tren, 2-3 kali per minggu sudah cukup. Peran dengan permintaan tinggi (engineering, AI/ML) memanfaatkan pemantauan dua kali sehari.
Dengan 50 peran dan 5 lokasi yang dicek harian, sekitar 2.250 CAPTCHA per bulan dengan biaya $2-3 per 1.000 penyelesaian sama dengan $4,50-6,75 per bulan. Tambahkan biaya proxy untuk total infrastruktur di bawah $40 per bulan.
Ya. Data listing pekerjaan yang terstruktur (persyaratan, keterampilan, tingkat pengalaman) bersama dengan profil kandidat memungkinkan pemetaan AI. Kuncinya adalah mengekstrak persyaratan keterampilan yang terstruktur dari deskripsi pekerjaan dan membandingkannya dengan kualifikasi kandidat.
LinkedIn menggunakan lapisan perlindungan tambahan selain CAPTCHA standar. Pertahankan perilaku sesi yang realistis, gunakan proxy residensial, dan batasi frekuensi permintaan hingga 20-30 per jam. Fokus pada daftar pekerjaan yang dapat diakses secara publik daripada data profil, dan patuhi ketentuan layanan LinkedIn untuk akses otomatis.
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.
