Integrations

Browser Profile Isolation + CaptchaAI Integration

Browser profile isolation tools create distinct browser environments with unique fingerprints per session. Combined with CaptchaAI, each profile gets reliable CAPTCHA solving with session-appropriate fingerprinting.


How Stealth-Configured Browsers Help CAPTCHA Solving

Feature Regular Chrome Stealth-Configured Browser
Fingerprint Same every session Unique per profile
WebRTC leak Exposes real IP Masked/disabled
Canvas hash Consistent Randomized per profile
Font list System default Spoofed set
Cookie isolation Shared by default Separate per profile
Detection risk High Very low

Multilogin + CaptchaAI

Start a Profile via API

import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

MULTILOGIN_TOKEN = "your_multilogin_token"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def start_multilogin_profile(profile_id):
    """Start a Multilogin browser profile and return WebDriver."""
    # Start profile via Multilogin API
    resp = requests.get(
        f"http://127.0.0.1:35000/api/v1/profile/start"
        f"?automation=true&profileId={profile_id}",
        headers={"Authorization": f"Bearer {MULTILOGIN_TOKEN}"},
    )

    data = resp.json()
    port = data["value"]

    # Connect Selenium to the running profile
    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{port}"

    driver = webdriver.Chrome(options=options)
    return driver


def solve_recaptcha(site_url, sitekey):
    """Solve via CaptchaAI API."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] == "CAPCHA_NOT_READY":
            continue
        if data["status"] == 1:
            return data["request"]

    raise TimeoutError("Solve timeout")


def run_with_multilogin(profile_id, target_url):
    driver = start_multilogin_profile(profile_id)

    try:
        driver.get(target_url)
        time.sleep(3)

        # Detect sitekey
        sitekey = driver.execute_script(
            "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
        )

        if sitekey:
            # Solve CAPTCHA
            token = solve_recaptcha(target_url, sitekey)

            # Inject token
            driver.execute_script(f"""
                document.querySelector('#g-recaptcha-response').value = '{token}';
                document.querySelectorAll('[name="g-recaptcha-response"]')
                    .forEach(el => {{ el.value = '{token}'; }});
            """)

            # Submit form
            driver.find_element(By.CSS_SELECTOR, "form").submit()
            time.sleep(3)

        return driver.page_source

    finally:
        driver.quit()


# Run across multiple profiles
profile_ids = [
    "profile-uuid-1",
    "profile-uuid-2",
    "profile-uuid-3",
]

for pid in profile_ids:
    result = run_with_multilogin(pid, "https://target-site.com/form")
    print(f"Profile {pid}: done")

GoLogin + CaptchaAI

Profile Management

import requests
import time
import subprocess
from selenium import webdriver


GOLOGIN_TOKEN = "your_gologin_token"
GOLOGIN_API = "https://api.gologin.com/browser"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def create_gologin_profile():
    """Create a new GoLogin profile with random fingerprint."""
    resp = requests.post(
        GOLOGIN_API,
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
        json={
            "name": f"captcha-profile-{int(time.time())}",
            "os": "win",
            "navigator": {
                "userAgent": "random",
                "resolution": "1920x1080",
                "language": "en-US",
            },
            "proxy": {
                "mode": "none",
            },
            "webRTC": {
                "mode": "altered",
                "enabled": True,
            },
        },
    )
    return resp.json()["id"]


def start_gologin_profile(profile_id):
    """Start GoLogin profile and connect WebDriver."""
    resp = requests.get(
        f"{GOLOGIN_API}/{profile_id}/start",
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
    )

    data = resp.json()
    debug_port = data.get("debugPort", 0)
    ws_url = data.get("wsUrl", "")

    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{debug_port}"

    driver = webdriver.Chrome(options=options)
    return driver


def stop_gologin_profile(profile_id):
    requests.get(
        f"{GOLOGIN_API}/{profile_id}/stop",
        headers={"Authorization": f"Bearer {GOLOGIN_TOKEN}"},
    )


def solve_and_submit(driver, url):
    """Navigate, solve CAPTCHA, submit form."""
    driver.get(url)
    time.sleep(3)

    sitekey = driver.execute_script(
        "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
    )

    if not sitekey:
        return {"status": "no_captcha"}

    # Solve via CaptchaAI
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            break

    token = data["request"]

    driver.execute_script(f"""
        document.querySelector('#g-recaptcha-response').value = '{token}';
    """)

    return {"status": "solved", "token": token[:30] + "..."}


# Full pipeline
profile_id = create_gologin_profile()
driver = start_gologin_profile(profile_id)

try:
    result = solve_and_submit(driver, "https://target-site.com/register")
    print(result)
finally:
    driver.quit()
    stop_gologin_profile(profile_id)

Dolphin Anty + CaptchaAI

import requests
import time
from selenium import webdriver

DOLPHIN_API = "http://localhost:3001/v1.0"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def start_dolphin_profile(profile_id):
    """Start a Dolphin Anty profile."""
    resp = requests.get(
        f"{DOLPHIN_API}/browser_profiles/{profile_id}/start"
        f"?automation=1"
    )
    data = resp.json()

    port = data["automation"]["port"]
    options = webdriver.ChromeOptions()
    options.debugger_address = f"127.0.0.1:{port}"

    return webdriver.Chrome(options=options)


def stop_dolphin_profile(profile_id):
    requests.get(f"{DOLPHIN_API}/browser_profiles/{profile_id}/stop")


def captcha_workflow(driver, url, captchaai_key):
    driver.get(url)
    time.sleep(3)

    sitekey = driver.execute_script(
        "return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
    )
    if not sitekey:
        return None

    # Submit to CaptchaAI
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": captchaai_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    # Poll
    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": captchaai_key, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            break

    token = data["request"]
    driver.execute_script(f"""
        document.querySelector('#g-recaptcha-response').value = '{token}';
    """)
    return token

Multi-Profile Parallel Execution

from concurrent.futures import ThreadPoolExecutor, as_completed


def process_profile(profile_config):
    """Run a task on one privacy-focused browser profile."""
    browser = profile_config["browser"]  # "multilogin", "gologin", "dolphin"
    profile_id = profile_config["profile_id"]
    url = profile_config["url"]

    driver = None
    try:
        if browser == "multilogin":
            driver = start_multilogin_profile(profile_id)
        elif browser == "gologin":
            driver = start_gologin_profile(profile_id)
        elif browser == "dolphin":
            driver = start_dolphin_profile(profile_id)

        result = solve_and_submit(driver, url)
        return {"profile": profile_id, **result}

    except Exception as e:
        return {"profile": profile_id, "status": "error", "error": str(e)}

    finally:
        if driver:
            driver.quit()
        if browser == "gologin":
            stop_gologin_profile(profile_id)
        elif browser == "dolphin":
            stop_dolphin_profile(profile_id)


# Run 10 profiles in parallel
profiles = [
    {"browser": "gologin", "profile_id": f"profile-{i}", "url": "https://target.com/form"}
    for i in range(10)
]

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = {executor.submit(process_profile, p): p for p in profiles}

    for future in as_completed(futures):
        result = future.result()
        print(f"[{result['status']}] Profile: {result['profile']}")

Best Practices

Practice Why
One profile per task Prevents fingerprint contamination
Rotate proxies per profile Match IP to fingerprint location
Warm up profiles Visit neutral sites before target
Space requests 30-60s apart Avoid rate limiting
Clean cookies between runs Prevent tracking correlation
Match timezone to proxy WebRTC and Date API consistency

Troubleshooting

Issue Cause Fix
Profile won't start Port conflict Check no other profile using same port
WebDriver can't connect Wrong debug port Verify API response for correct port
CAPTCHA still triggered Fingerprint inconsistency Match proxy location to profile timezone
Token rejected Profile detected as bot Warm up profile with organic browsing
Slow profile creation API rate limit Add delays between profile creation calls

FAQ

Which privacy-focused browser works best with CaptchaAI?

All three (Multilogin, GoLogin, Dolphin Anty) work equally well. CaptchaAI is browser-agnostic — it only needs the sitekey and page URL.

Do I need proxies with privacy-focused browsers?

Strongly recommended. Privacy-focused browsers spoof the fingerprint, but the IP still matters for CAPTCHA risk scoring.

How many profiles can I run simultaneously?

Depends on system resources. Each profile uses 200-500 MB RAM. With 16 GB RAM, run 10-20 profiles safely.

Can I reuse profiles across sessions?

Yes. Privacy-focused browsers persist cookies and storage. Reusing profiles builds session history, reducing CAPTCHA frequency.



Combine unique browser fingerprints with automated CAPTCHA solving — get your CaptchaAI key and integrate with privacy-focused browsers.

Discussions (0)

No comments yet.