Antibot Systems Benchmark
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
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
Default Profiles Tested
The benchmark tests these 13 profiles by default:
Profile
Platform
Client Hints
chrome_120
macOS
✅
chrome_144
macOS
✅
chrome_131_windows
Windows
✅
chrome_136_linux
Linux
✅
firefox_133
macOS
❌
firefox_147
Linux
❌
safari_184_macos
macOS
❌
safari_187_ios
iOS
❌
edge_131
Windows
✅
edge_144
Windows
✅
brave_131
Windows
✅
opera_115
Windows
✅
tor_145
Windows
❌
Sample Output
======================================================================
GAKIDO ANTIBOT SYSTEMS BENCHMARK
======================================================================
Profiles to test: 4
Timeout: 10.0s
============================================================
Testing profile: chrome_144
============================================================
✅ tls_browserleaks HTTP 200 711ms
✅ scrapfly_ja3 HTTP 200 950ms
✅ httpbin_headers HTTP 200 873ms
✅ httpbin_user_agent HTTP 200 260ms
✅ nowsecure HTTP 200 2389ms
✅ sannysoft HTTP 200 608ms
✅ incolumitas HTTP 200 1087ms
✅ cloudflare_trace HTTP 200 469ms
✅ cloudflare_1111 HTTP 200 419ms
Summary: 9/9 passed (100.0%) | Avg: 895ms
======================================================================
BENCHMARK SUMMARY
======================================================================
Profiles tested: 4
Total tests run: 36
Overall success rate: 100.0%
--- Category Breakdown ---
TLS Fingerprint : 8/8 (100.0%)
HTTP Headers : 8/8 (100.0%)
Bot Detection : 12/12 (100.0%)
Cloudflare : 8/8 (100.0%)
--- Profile Rankings ---
1. chrome_144 100.0% | hints:✓ | macOS
2. firefox_147 100.0% | hints:✗ | Linux
3. safari_184_macos 100.0% | hints:✗ | macOS
4. brave_131 100.0% | hints:✓ | Windows
🏆 Perfect scores: chrome_144, firefox_147, safari_184_macos, brave_131
When using --output, results are saved in this format:
{
"timestamp" : "2025-01-25T16:15:00.000000" ,
"gakido_version" : "0.1.0" ,
"total_profiles_tested" : 4 ,
"total_tests_run" : 36 ,
"overall_success_rate" : 100.0 ,
"profiles" : [
{
"profile_name" : "chrome_144" ,
"platform" : "macOS" ,
"has_client_hints" : true ,
"has_canvas_webgl" : true ,
"user_agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)..." ,
"tests" : [
{
"endpoint_name" : "tls_browserleaks" ,
"url" : "https://tls.browserleaks.com/json" ,
"description" : "TLS/JA3 fingerprint analysis" ,
"success" : true ,
"status_code" : 200 ,
"response_time_ms" : 711.5 ,
"error" : null ,
"details" : { "response" : { "ja3_hash" : "..." }}
}
],
"total_tests" : 9 ,
"passed_tests" : 9 ,
"failed_tests" : 0 ,
"success_rate" : 100.0 ,
"avg_response_time_ms" : 895.2
}
],
"summary" : {
"category_stats" : {
"TLS Fingerprint" : { "total" : 8 , "passed" : 8 },
"HTTP Headers" : { "total" : 8 , "passed" : 8 },
"Bot Detection" : { "total" : 12 , "passed" : 12 },
"Cloudflare" : { "total" : 8 , "passed" : 8 }
},
"best_profile" : "chrome_144" ,
"worst_profile" : "tor_145" ,
"profiles_with_100_percent" : [ "chrome_144" , "firefox_147" ]
}
}
Programmatic Usage
from examples.antibot_benchmark import AntibotBenchmark , AsyncAntibotBenchmark
import asyncio
# Sync benchmark
benchmark = AntibotBenchmark (
profiles = [ "chrome_144" , "firefox_147" ],
timeout = 15.0 ,
verbose = True ,
)
report = benchmark . run ()
# Access results
print ( f "Success rate: { report . overall_success_rate } %" )
for profile in report . profiles :
print ( f " { profile . profile_name } : { profile . success_rate } %" )
# Save to JSON
benchmark . save_report ( report , "results.json" )
# Async benchmark
async def run_async ():
benchmark = AsyncAntibotBenchmark (
profiles = [ "chrome_144" , "firefox_147" ],
timeout = 15.0 ,
)
return await benchmark . run_async ()
report = asyncio . run ( run_async ())
Adding Custom Endpoints
You can extend the benchmark by adding custom endpoints:
from examples.antibot_benchmark import AntibotBenchmark , BOT_DETECTION_ENDPOINTS
# Add custom endpoint
BOT_DETECTION_ENDPOINTS [ "my_endpoint" ] = {
"url" : "https://example.com/bot-check" ,
"description" : "My custom bot check" ,
"check" : lambda r : r . get ( "is_bot" ) == False , # Custom validation
"check_status" : lambda s : s == 200 ,
}
# Run benchmark with custom endpoint included
benchmark = AntibotBenchmark ( profiles = [ "chrome_144" ])
report = benchmark . run ()
Interpreting Results
Success Criteria
TLS Fingerprint : Returns valid JA3/JA4 hash
HTTP Headers : Returns expected header structure
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