> ## Documentation Index
> Fetch the complete documentation index at: https://docs.surfsky.io/llms.txt
> Use this file to discover all available pages before exploring further.

# GeeTest

> Configure automatic GeeTest solving and verify the result on your page.

Use `Captcha.autoSolve` for GeeTest. This type is handled by the external provider integration; sending it to `Captcha.solve` returns an error.

<span id="overview" />

<span id="prerequisites" />

<span id="quick-start" />

## Before you start

Enable the solver when [starting the browser](/captcha-solving#enable-solving):

```json theme={null}
{
  "anti_captcha": {
    "enabled": true,
    "disable_external_providers": false,
    "auto_captcha_types": ["geetest"]
  }
}
```

Your account needs the corresponding external provider configuration. Check [solver balance](/api-reference/captcha/get-solver-balance) and [provider settings](/captcha-solving#provider-configuration) if solving does not begin.

## Auto solving

Use the [Playwright](/quickstart/playwright) or [Puppeteer](/quickstart/puppeteer) lifecycle, adding the settings above to the start request. Create a page-level CDP session and attach listeners before enabling automatic mode:

<CodeGroup>
  ```python Python (async Playwright) theme={null}
  cdp = await page.context.new_cdp_session(page)
  cdp.on("Captcha.solveCompleted", lambda event: print("Completed:", event))
  cdp.on("Captcha.solveFailed", lambda event: print("Failed:", event))
  await cdp.send("Captcha.autoSolve", {"type": "geetest"})
  await page.goto(target_url, wait_until="domcontentloaded")
  ```

  ```javascript JavaScript (Playwright) theme={null}
  const cdp = await page.context().newCDPSession(page);
  cdp.on("Captcha.solveCompleted", event => console.log("Completed:", event));
  cdp.on("Captcha.solveFailed", event => console.error("Failed:", event));
  await cdp.send("Captcha.autoSolve", { type: "geetest" });
  await page.goto(targetUrl, { waitUntil: "domcontentloaded" });
  ```
</CodeGroup>

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.

## Check the page result

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.

<span id="best-practices" />

<span id="how-it-works" />

<span id="need-help" />

<span id="related" />

## Troubleshooting

If nothing happens, confirm that the external integration was loaded, `"geetest"` is allowed in `auto_captcha_types`, and the challenge is present. Observe failure events and check provider availability before retrying.

See [CAPTCHA troubleshooting](/captcha-solving#troubleshooting) for shared errors and [DevTools](/debugging) to inspect a running attempt. Stop the browser after the job completes.
