Skip to main content
GeeTest protects sites with interactive puzzles - most commonly a slider you drag into place - backed by behavioral analysis of the drag itself. Surfsky solves GeeTest v4 with Captcha.solve or Captcha.autoSolve, and each solve is charged. GeeTest v3 is not solved.

Before you start

Start a browser and create a page-level cdp session as in the CAPTCHA setup example.

Manual captcha solving

Send Captcha.solve once the widget is on the page:
success means the widget passed; the site checks it when the form is sent, so wait for the protected content. solution holds the token as a JSON string, for a client that sends the form itself. Every GeeTest v4 kind is solved.

Automatic captcha solving

Use the Playwright or Puppeteer lifecycle. Create a page-level CDP session and attach listeners before enabling automatic mode with "geetest" in types:
Replace the target URL with your page. Add a bounded wait for the form result or protected content after navigation. {"status": "started"} only confirms that automatic mode started.

Understanding GeeTest challenge types

GeeTest ships two active generations with different bypass considerations:
  • v3 — the page loads a gt and challenge parameter pair; the classic version.
  • v4 — the page loads only a captcha_id with scripts served from /v4/ paths; adds more challenge variants and encrypts interaction data into a signed payload before validation.
Within either version, the widget itself can present as more than a slider: See Manual captcha solving for the kinds that are answered.

Verify bypass worked

Check the challenge version and the actual page flow. A GeeTest widget may appear only after a form action. Start the automatic solver before that action, then wait for the site to accept the result. Keep the CDP connection open while solving. Avoid running a second solver against the same challenge. If verification completes but the page is still blocked, inspect the next network response or form validation error.

Troubleshooting

If nothing happens, confirm that "geetest" is in types and the challenge is present. Observe failure events before retrying. See CAPTCHA troubleshooting for shared errors and DevTools to inspect a running attempt. Stop the browser after the job completes.

GeeTest bypass FAQ

Yes, for GeeTest v4.
Check the page source or network requests. If you see a gt and challenge parameter pair, it’s v3. If you only see captcha_id with scripts loading from /v4/ paths, it’s v4. Only v4 is solved.
GeeTest can skip the challenge entirely and accept a single click, or nothing visible at all, when it already trusts the session from prior behavior — this is normal, not a sign the page isn’t protected. Start the automatic solver before the triggering form action so it’s ready either way.
It only confirms automatic mode began — not that a challenge was found, solved, or accepted. Attach Captcha.solveCompleted and Captcha.solveFailed listeners and wait for the actual page result before treating the job as done.
Questions? Contact support.