Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

arkose-solver (Python)

PyPI Python

Arkose Labs / FunCaptcha solver producing sup=1 suppressed tokens. The site's RSA public key is derived from the served api.js on every solve, so there is nothing to capture or pin.

pip install arkose-solver

Requires Python 3.10+. Part of arkose-solver, which is also available for Go and Node.

from arkose_solver import Solver

s = Solver(
    surl="https://verify.example.com",
    public_key="00000000-0000-0000-0000-000000000000",
    site="https://www.example.com",
    proxy="http://user:pass@host:port",   # optional
)
res = s.solve()
print(res.token, res.suppressed)

solve() returns SolveResult(token, suppressed, timings). suppressed is True when the token carries sup=1.

Options

Solver(surl, public_key, site=None, rsa_public_key=None, proxy=None, user_agent=None, language="en-US", capi_mode="lightbox", title="", referer=None, origin=None, sitedata_location_href=None, document_referrer=None, data_exchange_url=None, data_exchange_regex=None)

rsa_public_key is only an override; leave it unset and it is extracted from api.js automatically.

Conformance

python tests/conformance.py

Checks every derivation against ../testvectors.json (generated by the Go implementation, which asserts each value against captured ground truth) and then verifies 20 freshly generated payloads are internally self-consistent — f, ife_hash, webgl_hash_webgl, network_info_rtt_type and screen_pixel_depth all recomputed from the payload itself.

Transport

Uses curl_cffi with Chrome impersonation. Arkose reads the TLS fingerprint (JA3/JA4), so requests/httpx will not do regardless of how correct the payload is.