Solve hCaptcha in Kameleo profiles.
Kameleo is an anti-detect browser that runs profiles built from real
device fingerprints in two browsers of its own: Chroma, based on Chrome,
and Junglefox, based on Firefox. Chroma profiles load Chrome extensions
from a .crx file, and the NoneCap hCaptcha solver is a Chrome
extension: add its file to a profile and it solves hCaptcha there as you
browse. If you drive profiles from code through Kameleo's Local API,
request tokens from the NoneCap API instead; that route is further down.
NoneCap is a captcha solver service that focuses on hCaptcha, and does not
solve reCAPTCHA or Turnstile.
Download the extension's .crx file
Kameleo's
auto-installing browser extensions
article says a profile takes an extension as a file, a .crx
for Chroma, and suggests an online downloader to get one from a Chrome
Web Store listing. You can skip the downloader: this command downloads
the NoneCap extension's signed .crx from the Chrome Web
Store's own servers.
curl -L -G -o nonecap.crx \
-d response=redirect \
-d prodversion=156.0 \
-d acceptformat=crx3 \
-d x=id%3Dkahepbmokpbbkfognbmimpmnlfibcolf%26uc \
https://clients2.google.com/service/update2/crx
In Windows PowerShell, type curl.exe instead of
curl and end each line with a backtick (`)
instead of \. Keep the file in a folder of its own, since Kameleo
asks for its path. It is the same release as the
Chrome Web Store listing.
Add it to a profile
- In Kameleo, click the three dots on the profile card and choose Edit.
- Open Advanced Settings, then the Browser section.
- Click Chrome extensions and select the
.crxfile. Its path appears under the button. - Click Save, or Save & Start to launch the profile.
- Open a page with hCaptcha. When the challenge opens, the extension solves it on the page.
Kameleo loads the extension every time the profile starts. To add it to every profile you create after this, open Settings in the left menu, Default Profile Settings, Customize Settings, the Browser section, click Chrome extensions, select the file and Save.
Profiles you create from code
Kameleo's
install browser extensions
tutorial adds extensions through the Local API: a profile's
extensions list takes absolute paths to .crx
files, when you create it or later. Kameleo's help says a profile has to
be stopped before it can be changed. With the Python SDK
(pip install kameleo.local-api-client):
from kameleo.local_api_client import KameleoLocalApiClient
from kameleo.local_api_client.models import (
CreateProfileRequest,
UpdateProfileRequest,
)
kameleo = KameleoLocalApiClient(endpoint="http://localhost:5050")
crx = "/Users/me/kameleo-extensions/nonecap.crx" # absolute path to the .crx
fp = kameleo.fingerprint.search_fingerprints(
device_type="desktop", browser_product="chrome",
)[0]
kameleo.profile.create_profile(CreateProfileRequest(
fingerprint_id=fp.id, name="with-nonecap", extensions=[crx],
))
existing = kameleo.profile.read_profile("YOUR_PROFILE_ID")
kameleo.profile.update_profile(existing.id, UpdateProfileRequest(
extensions=(existing.extensions or []) + [crx],
)) Things to know
- The extension works in Chroma profiles only. Junglefox profiles take Firefox add-ons (
.xpi), and NoneCap is a Chrome extension. - The extension needs Chrome 120 or newer. Kameleo ships a Chroma kernel within five days of each Chrome release; an older profile moves to the latest one with Upgrade in its three-dot menu while it is stopped (Kameleo's upgrade article).
- Kameleo keeps its own copy of the file in the profile, so the profile stays on the release you added. To update, download the
.crxagain and put the new file in place of the old one in the profile's Chrome extensions list; from code, pass the new file's path inextensionsinstead of the old entry. - Exported
.kameleoprofile archives include their extensions, and importing one restores them. - While it solves, the browser shows a "started debugging this browser" banner. That is expected: the extension attaches only for the solve and detaches when the attempt ends. The extension privacy policy says what it sends.
Free solves or your API key
The extension includes 100 free solves a day without an account, which suits a few profiles. For more, create a NoneCap account, copy an API key from the dashboard and paste it into the extension's options in each profile. Solves then draw from your balance, from 1 credit per challenge round, and a failed solve is never charged. See pricing.
Profiles you start from code
Kameleo's Local API listens on http://localhost:5050 while the
Kameleo app or its Engine runs, with SDKs for Python, JavaScript and C#.
Start a Chroma profile through it and connect Playwright to
ws://localhost:5050/playwright/ plus the profile ID, as
Kameleo's
Playwright guide
shows; Selenium and Puppeteer connect too. Kameleo's
plan overview
lists the Local API and SDKs among the features of every plan; plans
differ in concurrent browsers, browser time and API requests per minute.
In a script, request the token yourself rather than waiting on the
extension: read the page's sitekey,
call NoneCap with the Python SDK
(pip install nonecap kameleo.local-api-client playwright), put
the token in h-captcha-response and submit:
import os
from kameleo.local_api_client import KameleoLocalApiClient
from nonecap import NoneCap
from playwright.sync_api import sync_playwright
kameleo = KameleoLocalApiClient(endpoint="http://localhost:5050")
nc = NoneCap(api_key=os.environ["NONECAP_KEY"])
profile_id = os.environ["KAMELEO_PROFILE_ID"] # a Chroma profile
kameleo.profile.start_profile(profile_id)
pw = sync_playwright().start()
browser = pw.chromium.connect_over_cdp(
f"ws://localhost:5050/playwright/{profile_id}", timeout=90_000,
)
page = browser.contexts[0].new_page() Then, in the same script, solve and submit:
try:
page.goto("https://target.example/login")
solve = nc.solve(
type="hcaptcha",
sitekey=page.get_attribute("[data-sitekey]", "data-sitekey"),
url=page.url,
user_agent=page.evaluate("navigator.userAgent"),
)
page.evaluate("""token => {
for (const name of ["h-captcha-response", "g-recaptcha-response"]) {
const el = document.querySelector(`textarea[name="${name}"]`);
if (el) el.value = token;
}}""", solve.token)
with page.expect_navigation():
page.click("[type=submit]")
finally:
browser.close()
pw.stop()
kameleo.profile.stop_profile(profile_id)
nc.close()
Pass the profile's user agent as user_agent, as above: some
sites accept a token only from the browser version that solved it. If the
profile runs through a proxy, send that proxy as proxy (for example proxy="http://user:pass@host:port" in nc.solve()) so the
token is solved from the same address the profile submits it from. For an
invisible widget, call its data-callback with the token after
injecting it; the Playwright guide
shows how.
Use it where you're allowed to
NoneCap's terms rule out fraud, credential stuffing, spam and unauthorised access, and leave it to you to check the terms of the sites your profiles visit.
Last updated November 2026.
Frequently asked
Can I add a captcha solver extension to Kameleo?
.crx file, and the NoneCap hCaptcha solver is a Chrome extension. Download its .crx file, then in the profile's Edit view open Advanced Settings, Browser, Chrome extensions and select the file. The steps are at the top of this page.How do I add the extension to every Kameleo profile?
extensions list through Kameleo's Local API, as shown on this page.Does it work in Junglefox profiles?
.xpi files. NoneCap is a Chrome extension, so use Chroma profiles for the extension, or call the NoneCap API from your script in any profile.Does it solve reCAPTCHA or Cloudflare Turnstile?
Can I use NoneCap with Kameleo's Local API and Playwright?
localhost:5050, connect Playwright to ws://localhost:5050/playwright/ plus the profile ID, read the sitekey, request the token from the NoneCap API and put it in h-captcha-response. The Python example on this page does exactly that.