Image captchas live today in Playwright (Python + Node.js); reCAPTCHA, hCaptcha & Turnstile flows are planned previews — Last Updated: August 29, 2026
CaptchaKings integrates directly with Playwright (Python and Node.js/TypeScript) across headless Chromium, Firefox, and WebKit.
• Current Capabilities: Real-time Image OCR (~1.2s median, $0.80/1k), GeeTest, Tencent, MTCaptcha, and Amazon WAF (~8s, $1.00/1k).
• Integration Model: Take element screenshot or fetch DOM sitekey → submit to API → inject solution via page.evaluate() or page.fill().
• Free Balance: $0.50 free trial credits upon account creation.
⚡ TL;DR: Playwright has no built-in captcha solving. Image/text captchas work today: screenshot the element → send it to CaptchaKings (~1.2s median) → fill in the answer. The reCAPTCHA/Turnstile token flow below is a planned preview — see /supported-captchas. Works in headless Chromium, Firefox & WebKit. Free $0.50 balance on signup.
📋 Status: Live today via the API: image/text captchas ($0.80 per 1,000, ~1.2s median) plus GeeTest, Tencent, xCaptcha, MTCaptcha and Amazon WAF ($1.00 per 1,000) — measured numbers at /benchmarks. reCAPTCHA, hCaptcha and Cloudflare Turnstile are planned, not yet available — see /supported-captchas.
Playwright is the best modern browser-automation framework — but CAPTCHAs are explicitly designed to stop it. Microsoft's stealth techniques help you look human; a solving API makes you pass as human. Combining both gives you a reliable solving path for scraping, testing, and automation at scale.
This flow goes live when reCAPTCHA support launches — see /recaptcha-solver. Image/text captchas work today via the generic image API (screenshot the element and POST it — see /documentation). Install the dependencies:
pip install playwright captchakings
playwright install chromium
from playwright.sync_api import sync_playwright
from captchakings import CaptchaKings
API_KEY = "ck_your_api_key_here"
PAGE_URL = "https://example.com/login"
client = CaptchaKings(API_KEY)
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(PAGE_URL)
# 1. Pull the sitekey out of the DOM
sitekey = page.get_attribute("[data-sitekey]", "data-sitekey")
# 2. Solve with CaptchaKings (planned reCAPTCHA flow)
token = client.solve_recaptcha_v2(sitekey=sitekey, page_url=PAGE_URL)
# 3. Inject the token & submit
page.evaluate("""(t) => {
document.getElementById('g-recaptcha-response').innerHTML = t;
}""", token)
page.click("button[type=submit]")
page.wait_for_load_state("networkidle")
print("Passed:", page.url)
browser.close()
const { chromium } = require('playwright');
const axios = require('axios');
const API_KEY = 'ck_your_api_key_here';
const PAGE_URL = 'https://example.com/login';
async function solveRecaptcha(sitekey, pageUrl) {
const { data } = await axios.post('https://captchakings.com/api', {
api_key: API_KEY,
captcha_type: 'recaptcha_v2',
sitekey: sitekey,
page_url: pageUrl
});
return data.token;
}
(async () => {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
await page.goto(PAGE_URL);
const sitekey = await page.getAttribute('[data-sitekey]', 'data-sitekey');
const token = await solveRecaptcha(sitekey, PAGE_URL);
await page.evaluate((t) => {
document.getElementById('g-recaptcha-response').innerHTML = t;
}, token);
await page.click('button[type=submit]');
await page.waitForLoadState('networkidle');
console.log('Passed:', page.url());
await browser.close();
})();
Turnstile support is planned, not yet available — see /supported-captchas. When live it will follow the identical pattern — the only difference is the target field cf-turnstile-response:
token = client.solve_turnstile(sitekey=sitekey, page_url=PAGE_URL)
page.evaluate("""(t) => {
document.querySelector('[name=cf-turnstile-response]').value = t;
}""", token)
| Capability | Playwright alone | Playwright + CaptchaKings |
|---|---|---|
| reCAPTCHA v2/v3/Enterprise | ❌ Blocked | 🗓️ Planned — token injection at launch (support matrix) |
| hCaptcha / Turnstile | ❌ Blocked | 🗓️ Planned — token injection at launch |
| AWS WAF challenges | ❌ Blocked | ✅ Live — ~8s median, $1.00 / 1,000 |
| Image/text captchas | ❌ No OCR | ✅ Live — AI OCR, ~1.2s median, $0.80 / 1,000 |
| GeeTest / Tencent / xCaptcha / MTCaptcha | ❌ Blocked | ✅ Live — $1.00 / 1,000 |
| Cost at 100k solves/mo | — | $80 image/text · $100 token types (flat rates, no volume tiers) |
Yes — solving is done on CaptchaKings servers, so headless Chromium, Firefox and WebKit all work identically. No browser extension is required.
Absolutely. After passing the challenge, export context.storage_state() and reload it in later runs to skip solving again until the session expires.
Pass Playwright's proxy settings as usual and make sure the solving IP matches — or use the built-in CaptchaKings IP Rotator for automatic rotation.
🎁 Free $0.50 balance — test the live image-captcha flow on us. Create your API key →