← ClaudeAtlas

solve-captchalisted

Solve a CAPTCHA on the current browser tab. Free path first — frictionless checkbox + distorted-text via your own vision; image challenges (reCAPTCHA / hCaptcha / Turnstile) go to a configured token service (2captcha / CapSolver). Returns solved / unsolved for the caller to fall back.
suxrobGM/jobpilot · ★ 20 · AI & Automation · score 84
Install: claude install-skill suxrobGM/jobpilot
# Solve CAPTCHA Clear a CAPTCHA on the **current browser tab**. Return **solved** or **unsolved** (the caller falls back). Authorized use only — the user's own applications. ```bash JOBPILOT_API=http://localhost:8000 ``` ## 1. Dispatch + identify If the argument is a URL → `browser_navigate` there first. `browser_resize` to a tall viewport (`1280×1400`) so the widget is fully on-screen, then `browser_snapshot` + `browser_take_screenshot` the captcha and classify: - **checkbox** (reCAPTCHA "I'm not a robot" / hCaptcha / Turnstile) → §2. **Always try this first** — it escalates to the service only if it opens an image challenge. - **text** (distorted characters + answer field) → §3. - **image-grid already open** (no checkbox to click) → §4 directly. - **slider / unknown** → **unsolved**. ## 2. Checkbox (free, first) `browser_click` the control by `ref`, `browser_wait_for`, re-snapshot. Verified → **solved**. An image grid opened instead → escalate to §4. **Never hand-click tiles** — automated clicks get flagged and fail. ## 3. Text (free) `browser_take_screenshot`, read the characters, `browser_type` the answer, submit. Verified → **solved**. ## 4. Image-grid → token service Read the sitekey (`browser_evaluate`, read-only): ```js () => { const el = document.querySelector('.g-recaptcha, [data-sitekey]'); let key = el?.getAttribute('data-sitekey'); if (!key) { const f = [...document.querySelectorAll('iframe[src*="recaptcha"]')].map(f => f.src).find(s => /[?&