anti_captcha when starting the browser, choose a solver for the challenge, and verify the page state after solving.
Enable solving
Add this to the browser start body:auto_captcha_types to restrict automatic detection to the types your page needs. It does not restrict an explicit manual Captcha.solve request.
Provider configuration
Provider availability depends on your account configuration. reCAPTCHA, GeeTest, and BLS use the external provider integration. Image-to-text requires a configured CapMonster key. hCaptcha, PerimeterX, DataDome audio, and FunCaptcha use Gemini.
Check solver balance for the providers exposed by your account. A balance response does not verify that every provider key is valid or funded.
Choose a method
A supported type is not a guarantee that every version or site configuration will solve. Use a small test against the actual target and verify the protected content.
Connect and solve
This Python example starts a browser, connects Playwright, and attempts a manual Turnstile solve. Install the packages and set your Surfsky credentials:TARGET_URL with the page you are testing. Save as solve.py:
{"status": "success", "type": "turnstile"}. If no challenge is present, manual detection can return a CDP error instead. The final API request stops the browser when the example exits.
For JavaScript, start with the Playwright lifecycle, add anti_captcha to its start body, and create the CDP session with await page.context().newCDPSession(page). The command parameters are the same.
Manual solving
Captcha.solve waits for one attempt to finish:
Only pass options used by the selected solver. A field being accepted does not mean every solver uses it. See the type-specific guides for concrete examples.
Results include
status and type. Statuses include success, failed, timeout, and not_detected; image solving also returns solution on success. Invalid parameters and detection failures may raise CDP errors instead of returning a status object.
Automatic solving
UseCaptcha.autoSolve to start background detection on the page. Attach event listeners before starting it, then navigate:
{"status": "started"} confirms that background solving started. It does not report a solved challenge. Use page conditions to decide when the job is complete, with a bounded timeout.
type restricts detection to one allowed type. Omit it to detect among the configured auto_captcha_types. Calling autoSolve again replaces the current background loop; disconnecting the CDP client ends it. Repeated failures can stop the loop, so observe failure events.
Events
Payload fields depend on the event. Solve events include the type when known, and may include
status, error, or an image solution.
Control the external provider
If the browser loaded the external integration, toggle it on the current page with:disable_external_providers: true, the integration is absent and this command returns an error. Start another browser with loading enabled if you need it.
Troubleshooting
Use DevTools or Screencast to observe one attempt before increasing concurrency. Keep provider keys out of logs and source control.