# reCAPTCHA v2 Usage reCAPTCHA v2 presents users with an "I'm not a robot" checkbox. The solver visits the target page with a real Chromium browser, clicks the checkbox, and extracts the resulting `gRecaptchaResponse` token. ## Supported task types | Task type | Description | |-----------|-------------| | `NoCaptchaTaskProxyless` | Standard reCAPTCHA v2 checkbox | | `RecaptchaV2TaskProxyless` | Same as above, alternate naming | | `RecaptchaV2EnterpriseTaskProxyless` | reCAPTCHA v2 Enterprise variant | ## Required fields | Field | Type | Description | |-------|------|-------------| | `websiteURL` | string | Full URL of the page containing the captcha | | `websiteKey` | string | The `data-sitekey` value from the page's HTML | | `isInvisible` | bool | Optional. Set `true` for invisible reCAPTCHA | ## Test target The official Google demo page is suitable for acceptance validation: - **URL:** `https://www.google.com/recaptcha/api2/demo` - **Site key:** `6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-` ## Create a task ```bash curl -X POST http://localhost:8000/createTask \ -H "Content-Type: application/json" \ -d '{ "clientKey": "your-client-key", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } }' ``` Response: ```json { "errorId": 0, "taskId": "uuid-string" } ``` ## Poll for result ```bash curl -X POST http://localhost:8000/getTaskResult \ -H "Content-Type: application/json" \ -d '{ "clientKey": "your-client-key", "taskId": "uuid-from-createTask" }' ``` When ready, you receive: ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq24..." } } ``` ## Invisible reCAPTCHA For pages using invisible reCAPTCHA (no visible checkbox), add `"isInvisible": true`. The solver will call `grecaptcha.execute()` directly instead of clicking the checkbox: ```bash curl -X POST http://localhost:8000/createTask \ -H "Content-Type: application/json" \ -d '{ "clientKey": "your-client-key", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "isInvisible": true } }' ``` ## Acceptance status | Target | Status | Notes | |--------|--------|-------| | `https://www.google.com/recaptcha/api2/demo` | ⚠️ Audio challenge path | Google detects headless browsers | ### Headless browser detection Google's risk analysis engine reliably detects headless Chromium and presents a visual image challenge rather than issuing a token directly. The solver implements an audio challenge fallback: 1. Click the checkbox — Google presents a challenge dialog. 2. Click the audio button in the challenge dialog. 3. Download the MP3 audio file. 4. Transcribe via the configured `CAPTCHA_MODEL` endpoint. 5. Submit the transcript to receive the token. !!! warning "Audio transcription requirement" The audio challenge path requires a model endpoint capable of processing audio. The standard `CAPTCHA_MODEL` must support audio/speech input. Accuracy and availability depend on the configured endpoint. ### Recommended integration path For reliable reCAPTCHA v2 solving in production, consider using the **classification task** approach: 1. Extract the challenge image grid from the page using Playwright. 2. Send the grid image to `ReCaptchaV2Classification` with the challenge question. 3. Use the returned cell indices to programmatically click the matching tiles. See [Image Classification](classification.md) for details. ## Operational notes - Token validity is approximately 120 seconds; submit promptly. - The `RecaptchaV2EnterpriseTaskProxyless` type uses the same browser path. - On less aggressive sites (not Google's own demo), the checkbox click may succeed without triggering a challenge.