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 profile | In 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, logins | a profile folder: launch_persistent_context("profiles/acct-1", ...) |
| the proxy and its location | proxy= with geoip=True |
| the profile ID you pass to the local API | a 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:
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.