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.

Download nonecap.crx
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

  1. In Kameleo, click the three dots on the profile card and choose Edit.
  2. Open Advanced Settings, then the Browser section.
  3. Click Chrome extensions and select the .crx file. Its path appears under the button.
  4. Click Save, or Save & Start to launch the profile.
  5. 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):

Python · add NoneCap to profiles
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 .crx again 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 in extensions instead of the old entry.
  • Exported .kameleo profile 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:

Python · start and connect
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:

Python · solve, inject, 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?
Yes, to Chroma profiles. Kameleo loads Chrome extensions into Chroma, its Chrome-based browser, from a .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?
For profiles you create in the app, add the file under Settings, Default Profile Settings, Customize Settings, Browser, Chrome extensions. For profiles you create or update from code, pass the file's absolute path in the profile's extensions list through Kameleo's Local API, as shown on this page.
Does it work in Junglefox profiles?
No. Junglefox is Kameleo's Firefox-based browser and takes Firefox add-ons as .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?
No. NoneCap solves hCaptcha only: image grids, drag puzzles and point-on-image challenges. For reCAPTCHA or Turnstile you need a different solver.
Can I use NoneCap with Kameleo's Local API and Playwright?
Yes. Start the profile through the Local API on 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.

Start solving hCaptcha in minutes.

1,300 free credits on signup. Pay per solve, credits never expire, failed solves never charged.