You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Gakido includes a comprehensive benchmark tool to test browser impersonation against various antibot detection systems.
Quick Start
# Run with default profiles (13 profiles)
uv run python examples/antibot_benchmark.py
# Test specific profile
uv run python examples/antibot_benchmark.py --profile chrome_144
# Test all 24 base profiles
uv run python examples/antibot_benchmark.py --all-profiles
Test Categories
The benchmark tests 9 endpoints across 4 categories:
1. TLS Fingerprint Tests
Endpoint
URL
Description
tls_browserleaks
tls.browserleaks.com
JA3/JA4 fingerprint analysis
scrapfly_ja3
tools.scrapfly.io
Scrapfly JA3 fingerprint
2. HTTP Header Analysis
Endpoint
URL
Description
httpbin_headers
httpbin.org/headers
HTTP header echo service
httpbin_user_agent
httpbin.org/user-agent
User-Agent verification
3. Bot Detection Services
Endpoint
URL
Description
nowsecure
nowsecure.nl
NowSecure bot detection test
sannysoft
bot.sannysoft.com
Sannysoft bot detection
incolumitas
bot.incolumitas.com
Incolumitas bot detection
4. Cloudflare Endpoints
Endpoint
URL
Description
cloudflare_trace
cloudflare.com/cdn-cgi/trace
Cloudflare trace endpoint
cloudflare_1111
1.1.1.1/cdn-cgi/trace
Cloudflare 1.1.1.1 trace
Usage
Basic Usage
# Default profiles
uv run python examples/antibot_benchmark.py
# Single profile
uv run python examples/antibot_benchmark.py --profile chrome_144
# Multiple profiles
uv run python examples/antibot_benchmark.py -p chrome_144 -p firefox_147 -p brave_131
# All base profiles (24 profiles)
uv run python examples/antibot_benchmark.py --all-profiles
Options
Option
Description
--profile, -p
Profile to test (can be specified multiple times)
--all-profiles
Test all 24 base profiles
--async
Use async client for testing
--timeout, -t
Request timeout in seconds (default: 15)
--output, -o
Save results to JSON file
--quiet, -q
Suppress verbose output
Examples
# Async mode (faster for multiple profiles)
uv run python examples/antibot_benchmark.py --async
# Custom timeout
uv run python examples/antibot_benchmark.py --timeout 30
# Save results to JSON
uv run python examples/antibot_benchmark.py --output results.json
# Quiet mode with JSON output
uv run python examples/antibot_benchmark.py -q -o results.json
Bot Detection: HTTP 200 response (page loads without block)
Cloudflare: Contains fl= in trace response
What Affects Results
Factor
Impact
TLS Configuration
JA3/JA4 fingerprint matching
HTTP/2 Settings
SETTINGS frame fingerprint
Header Order
Header ordering detection
Client Hints
Sec-CH-UA consistency
User-Agent
Browser identification
Recommendations
Use Chrome profiles for best compatibility
Enable client hints for Chromium-based detection
Use platform-specific profiles (e.g., chrome_131_windows for Windows targets)
Rotate profiles to avoid fingerprint-based blocking
Results: fingerprint comparison
A direct comparison against tls.peet.ws with the
chrome_120 profile. Every client sends the same Chrome User-Agent, so
the only variable is the TLS / HTTP/2 fingerprint.
requests / httpx present an OpenSSL fingerprint over HTTP/1.1 — nothing
like a browser.
gakido's pure-Python path gets the HTTP/2 fingerprint almost right (the extra
5:16384;8:0 is forced by the h2 library) but TLS is still OpenSSL.
gakido's native backend matches real Chrome on both JA4 and the Akamai
HTTP/2 fingerprint, byte for byte. For Chromium profiles the extension order
is randomized per connection, so the JA3 hash also varies the way Chrome's does.
What this does and does not mean
Matching the fingerprint defeats anti-bot systems that block on the TLS / HTTP
fingerprint itself — a large and common class. It does not solve
JavaScript challenges such as Cloudflare's managed challenge or Turnstile: those
require executing JavaScript and cannot be passed by any raw HTTP client
(gakido, curl_cffi, or otherwise) without a real/headless browser. Treat gakido
as the transport-fingerprint layer, not a challenge solver.