Skip to content

Migrating from an anti-detect browser app

For teams that automate Multilogin, GoLogin, AdsPower, Dolphin Anty or Kameleo profiles from code. With Clearcote, your script starts the browser itself: no desktop app to keep running, no local API to call first.

The change

import requests
from playwright.sync_api import sync_playwright
from clearcote import launch_persistent_context

ws = requests.get("http://local.adspower.net:50325/api/v1/browser/start",
                  params={"user_id": "k1abc23"}).json()["data"]["ws"]["puppeteer"]
browser = sync_playwright().start().chromium.connect_over_cdp(ws)
page = browser.contexts[0].new_page()
context = launch_persistent_context(
    "profiles/acct-1",                       # cookies and storage live here
    fingerprint="acct-1",                    # the device: same seed, same device
    platform="windows",
    proxy={"server": "http://proxy.example:8080", "username": "user", "password": "pass"},
    geoip=True,                              # timezone, language and WebRTC follow the exit IP
)
page = context.new_page()
page.goto("https://example.com")

AdsPower's start call is shown; every app has its own (Multilogin X: GET https://launcher.mlx.yt:45001/api/v2/profile/f/<folder>/p/<id>/start), and the whole call goes. If other tools of yours expect a CDP address the way the app handed one out, serve(fingerprint="acct-1", user_data_dir="profiles/acct-1") starts the same browser with an endpoint at srv.cdp_url; see Deployment.

A profile becomes a seed and a folder

In the app's profileIn Clearcote
the fingerprint (OS, screen, GPU, fonts, canvas)a fingerprint seed and a platform. The same seed gives the same device every time
cookies, storage, loginsa profile folder: launch_persistent_context("profiles/acct-1", ...)
the proxy and its locationproxy= with geoip=True
the profile ID you pass to the local APIa name you choose. Using it as the seed and the folder name keeps them together

Bring the cookies along

Start the old profile one last time through the app's API, save its storage, and load the cookies into the new folder:

python
import json
from playwright.sync_api import sync_playwright
from clearcote import launch_persistent_context

# 1. from the running app profile (ws = the address its start call returned)
with sync_playwright() as p:
    old = p.chromium.connect_over_cdp(ws)
    old.contexts[0].storage_state(path="acct-1.json")

# 2. into the Clearcote profile, once
context = launch_persistent_context("profiles/acct-1", fingerprint="acct-1")
context.add_cookies(json.load(open("acct-1.json"))["cookies"])
context.close()

For a hosted browser, clearcote cloud profile sync acct-1 --from-cdp <address> --domain example.com copies the cookies straight from the running profile into a cloud profile. See Profiles, cookie sync and secrets.

The fingerprint does not carry over: the new seed is a new device, so a site sees one device change, as after a new laptop. Keep that seed from then on, and move accounts that react badly to a new device a few at a time.

What changes day to day

  • Runs on servers. No GUI session, no app login, no local API port. Linux, Windows and the Docker image run headless.
  • No per-profile price. Seeds and profile folders are free; the licence counts browsers running at the same time. See Pricing.
  • An engine you can read. The open build is BSD-3, and every patch in it is public.
  • Still want a window? The Profile Manager app opens an identity as a normal browser window for work by hand.

Check the switch

clearcote info prints the build the SDK resolves and a launch test. A proxy with a username and password needs the latest build, free with a GitHub sign-in (clearcote login). Next: Profiles & persistence. Comparisons: Multilogin, GoLogin, AdsPower, Dolphin Anty and Kameleo.