Add examples/playwright/solve-recaptcha-audio.mjs — annotated Playwright
recipe for solving reCAPTCHA v2 via the audio challenge.
- Spawns MCP server, applies stealth fingerprint (same seed as vision example)
- Checks solver_info.capabilities.audio before launching browser; exits cleanly
on unsupported provider with a clear message
- Clicks the anchor iframe checkbox, switches to audio challenge if image grid
shown first, reads MP3 URL via .rc-audiochallenge-tdownload-link / #audio-source
- Passes URL directly to solve_audio_captcha (server fetches + decodes)
- Types transcription into #audio-response, clicks #recaptcha-verify-button
- Reads g-recaptcha-response from host page; logs outcome, exits 0 on no token
(headless environments commonly produce no token — documented in comments)
- node --check passes; no Go changes
Reflect the previously-deferred items as done: gemini provider is fully wired
to native generateContent (vision + audio), unit-tested, with a note that live
use needs a real Google key. Document that get_stealth_script now takes
os/browser/locale/seed and returns a fingerprint, and that the evasion script
is templated to match it (coherent) — inject both together or share a seed.
Note reasoning-model <think> blocks are stripped before json parse. Record the
CAPTCHA_E2E_HEADED toggle, drop the done roadmap items, keep the honest note
that headless reCAPTCHA v2 usually won't mint a token, and call out the single
package-lock.json lockfile.