testdriverai/testdriver:captcha
Solve captchas using 2captcha service
npx skills add https://github.com/testdriverai/testdriverai --skill testdriver:captcha
<!-- Generated from captcha.mdx. DO NOT EDIT. -->
TestDriver can automatically solve captchas during your tests using the 2captcha service. This feature works on both Linux and Windows sandboxes.
const result = await testdriver.captcha({
apiKey: process.env.TWOCAPTCHA_API_KEY,
});
console.log(result.success); // true
console.log(result.token); // The solved captcha token
That's it! TestDriver will automatically:
| Type | Auto-Detected | Notes |
|------|---------------|-------|
| reCAPTCHA v2 | ✅ | Including invisible |
| reCAPTCHA v3 | ✅ | Action is auto-detected |
| hCaptcha | ✅ | |
| Cloudflare Turnstile | ✅ | |
const result = await testdriver.captcha({
// Required
apiKey: '2CAPTCHA_API_KEY',
// Optional - usually auto-detected
sitekey: '6Le...', // Override auto-detected sitekey
type: 'recaptcha_v3', // Override auto-detected type
action: 'submit', // reCAPTCHA v3 action
// Timing
timeout: 120000, // Max wait time (default: 120s)
pollInterval: 5000, // Poll interval (default: 5s)
});
import { describe, expect, it } from "vitest";
import { TestDriver } from "testdriver";
describe("Checkout flow", () => {
it("should complete checkout with captcha", async (context) => {
const testdriver = TestDriver(context);
// Navigate to checkout page
await testdriver.provision.chrome({
url: 'https://example.com/checkout',
});
// Fill out form
await testdriver.type({ text: 'John Doe', selector: '#name' });
await testdriver.type({ text: '[email protected]', selector: '#email' });
// Solve the captcha
const result = await testdriver.captcha({
apiKey: process.env.TWOCAPTCHA_API_KEY,
});
expect(result.success).toBe(true);
// Submit the form
await testdriver.click({ selector: '#submit' });
// Verify success
await testdriver.find({ text: 'Order confirmed' });
}, 180000);
});
You can set your API key as an environment variable:
export TWOCAPTCHA_API_KEY=your_api_key_here
Then use it in your tests:
const result = await testdriver.captcha({
apiKey: process.env.TWOCAPTCHA_API_KEY,
});
Add the key to your repository secrets and expose it in your workflow:
- name: Run Tests
run: vitest run
env:
TWOCAPTCHA_API_KEY: ${{ secrets.TWOCAPTCHA_API_KEY }}
data-sitekey, script tags, etc.)The captcha element wasn't found on the page. Try:
captcha()sitekey and type manuallyCaptcha solving typically takes 10-30 seconds. If you're getting timeouts:
timeout optionSome sites validate tokens immediately. Make sure:
action parameter matches the site's expected actionTake testdriverai/testdriver:captcha from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.