Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
Cloudflare Turnstile·5초 챌린지를 한 API 호출로 해결, 성공 시만 비용, 1,000회 무료, 카드 필요 없음
Solve Cloudflare Turnstile and the 5-second challenge with one API call. Pay only for successful solves. 1,000 free solves to start, no card.
개발 도구GitHub @CircuitSavage온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Solve Cloudflare Turnstile in Playwright via Peak — token injection, works headless on datacenter IPs.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗playwright-turnstile is a Playwright helper that solves Cloudflare Turnstile for you: it reads the sitekey off the page, gets a token from Peak, and injects it so your submit or navigation goes through.
from playwright_turnstile import solve_turnstile
token = await solve_turnstile(page, api_key="pk_your_api_key")
playwright-stealth is a proof of concept. Even with a patched, real browser, interactive Turnstile still fails from headless and datacenter environments: the widget scores the session, sees a datacenter IP with no trusted history, and holds you at the "Verifying..." spinner or an endless challenge. Clicking the checkbox harder does not help, because the token you need is issued by Cloudflare's risk engine, not by the click.
So this package does not click. It reads the Turnstile sitekey from the DOM, hands it to Peak, and injects the returned token into cf-turnstile-response while firing the widget's success callback. When your setup gets blocked, drop in a Peak API key and it just works.
This package uses Peak to solve Turnstile.
→ Get your free API key · Docs · Pricing
pip install playwright-turnstile playwright
playwright install chromium
The core package has no runtime dependencies; playwright is the one you drive it with.
import asyncio
from playwright.async_api import async_playwright
from playwright_turnstile import solve_turnstile
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://protected.example/login")
# Reads the sitekey, solves via Peak, injects the token.
await solve_turnstile(page, api_key="pk_your_api_key")
await page.click("button[type=submit]")
await page.wait_for_load_state("networkidle")
await browser.close()
asyncio.run(main())
Set your key once and let it read from the environment:
export PEAK_API_KEY=pk_your_api_key # Windows: set PEAK_API_KEY=pk_your_api_key
await solve_turnstile(page) # picks up PEAK_API_KEY
await solve_turnstile(page, api_key=None, proxy=None, sitekey=None, timeout=180.0)Solve the Turnstile challenge on a Playwright async Page. Returns the token (also injected into the page).
page — a Playwright async Page on a Turnstile-protected URL.api_key — Peak key (pk_...). Falls back to the PEAK_API_KEY env var.proxy — optional proxy passed to Peak, e.g. http://user:pass@ip:port. Use the same egress IP as your browser so the token matches the session.sitekey — override the sitekey instead of reading it from the DOM.timeout — seconds to wait for Peak.app_id — optional Peak app ID. Falls back to the PEAK_APP_ID env var. Earns you a share of each solve — see Earn with your app ID.solve_turnstile_sync(page, ...)Same signature, for Playwright's sync API (sync_playwright). Blocking.
from playwright_turnstile import solve_turnstile_sync
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://protected.example/login")
solve_turnstile_sync(page, api_key="pk_your_api_key")
.cf-turnstile[data-sitekey], any [data-sitekey], or the challenges.cloudflare.com iframe src) via query_selector / evaluate.POST https://api.peak.fo/solve with task_type: "turnstiletask", the sitekey, url: page.url, and your optional proxy.cf-turnstile-response field (creating a hidden input if the widget has not yet) and invokes the widget's data-callback, so your form submit or navigation proceeds.Peak also supports the Cloudflare 5s challenge (task_type: "cloudflare5stask"); this package focuses on Turnstile.
Pass app_id="app_your_id" (or set the PEAK_APP_ID environment variable) to earn 5% of every solve routed through this package, paid as Peak solve credit. It is optional and does not change whether a solve succeeds or how fast it returns.
await solve_turnstile(page, app_id="app_your_id") # or: export PEAK_APP_ID=app_your_id
Create an app id at peak.fo/dashboard/developer; details at peak.fo/earn.
Built for automation, QA, and scraping public data. Respect each target's Terms of Service and robots.txt, and do not use it for credential-stuffing or other abuse. You are responsible for how you use it.
MIT — see LICENSE.