Opciones e identidades
Lo que puedes configurar al iniciar un navegador alojado: las opciones, la configuración stealth predeterminada y las identidades, los perfiles que mantienen tu sesión iniciada, una versión fijada y la página de inicio.
Opciones
Todas son opcionales. Envíalas como cuerpo JSON de la llamada de creación.
| Campo | Tipo | Significado |
|---|---|---|
identity | string | One label per account you run: the same device fingerprint AND the same residential IP, for as long as that IP stays online. |
fingerprint | string | Device seed only (no IP pinning). The same seed gives the same device profile every time; with lightStealth on it picks from a small set of metadata profiles. |
lightStealth | boolean | Default true: varies only the metadata axes the host can back up. Set false to turn it off. |
platform | windows | macos | linux | android | Operating system the persona presents. |
brand | Chrome | Edge | Opera | Vivaldi | Browser brand the persona presents. |
timezone | IANA name | e.g. America/New_York. Use geoip instead to follow the exit IP. |
locale | string | Accept-Language, e.g. en-US,en. |
geoip | boolean | Timezone and language follow the exit IP. Default true unless you set timezone or locale yourself. |
proxy | "managed" | { server, username?, password? } | Omitted = managed residential pool. Or your own proxy: http://, socks5:// or socks5h:// (rules below). |
country | 2-letter code | Managed pool: exit country, e.g. us, de, gb. |
state | region code | Managed pool: exit state/region, e.g. ca, ny. Needs country. |
city | city name | Managed pool: exit city, e.g. "los angeles". Needs state. |
proxySession | string | Managed pool: sticky label. The same label returns the same exit IP later (kept for 24 hours). |
timeoutSec | number | Hard limit on the session length, in seconds (10 up to the account maximum below). |
idleTimeoutSec | number | End the session after this long without a CDP command (10–1800). |
maxGb | number | Stop the session after this much traffic (0.001–1000). |
headless | boolean | Default true. |
keepAlive | boolean | Default false. Keep the browser running when your client disconnects, until you end it (DELETE, or the CDP command Browser.close) or a limit does; reconnect with POST /api/v1/browsers/<id>/connect. |
version | string | Run a specific Clearcote release, e.g. "152.0.7977.82-r21" or "r21". Omitted = the current release. See "Pinning a release". |
profile | "name" | { name, persist? } | Load a saved profile (cookies + site storage). With persist: true, save it back when the session ends. See "Profiles". |
url | http(s) URL | Opened in the first tab before you connect: you find it already loading. |
adblock | boolean | Refuse known ad and tracker hosts before they load, so they are never billed. Default false. |
solveSliders | boolean | Default true. Slide-to-verify challenges are dragged for you, in any tab or frame; false leaves them to your script. See "Slider challenges". |
solveCheckboxes | boolean | Default true. "Verify you are human" checkboxes are clicked for you, in any tab or frame; false leaves them to your script. See "Checkbox challenges". |
challengeService | true | { categories?, sites?, key?, apiKey?, mode?, maxSolves?, maxSpendEur? } | Default off. Challenges the free actions cannot clear go to a solving service, with your own key or ours (billed per solve). true (or no categories) auto-selects: every challenge it recognises, in token, clearance, block-page and image; or list categories and sites yourself. See "Challenge service". |
record | boolean | Default false. Record the session as an MP4; GET /api/v1/browsers/<id>/recording once it is ready (kept 14 days). |
note | string | Your label for the session (at most 256 characters). Shown in the dashboard; filter by it in the list. |
worker | string | Place the session on the same server as an earlier one (its worker). 503 if that server is full. |
Configuración stealth predeterminada e identidades
Cada sesión parte de los ajustes de la página de configuración recomendada: lightStealth activado, un seed, y zona horaria e idioma que siguen a la IP de salida. Con lightStealth (el valor por defecto), el seed elige el perfil de dispositivo dentro de un conjunto pequeño que varía los núcleos de CPU, la memoria y el pixel ratio; canvas, WebGL y audio son los de la máquina donde corre la sesión. Define lightStealth: false para tener una persona completa por seed: las lecturas de canvas y WebGL reciben ruido por sitio derivado del seed, y las cadenas de la GPU, la pantalla y la configuración de audio (frecuencia de muestreo, latencia) siguen a la persona. Sin identity ni fingerprint, cada sesión recibe un seed aleatorio y una IP nueva.
Pasa identity: "account-42" para volver en sesiones posteriores con el mismo perfil de dispositivo, y con la misma IP mientras esa IP residencial siga en línea, que es lo que espera una cuenta con la sesión iniciada. Las identidades son privadas de tu cuenta: otro cliente que use la misma etiqueta recibe su propio seed y su propia IP. Por sí sola, una identidad no conserva cookies: para eso, usa un perfil.
Perfiles: inicia sesión una sola vez
Un perfil guarda las cookies, el localStorage y el IndexedDB de una sesión bajo un nombre, así la siguiente sesión con ese nombre arranca ya autenticada. Pasa profile: { name: "shop-account", persist: true } para cargarlo y volver a guardarlo cuando termine la sesión, o simplemente profile: "shop-account" para cargarlo en modo de solo lectura. La primera sesión con un nombre nuevo empieza vacía y lo crea.
// Every run: the same body. The first one starts signed out; sign in, then close the browser
// and the session saves the cookies and site storage. Every later run starts signed in.
const res = await fetch("https://www.clearcotelabs.com/api/v1/browsers", {
method: "POST",
headers: { authorization: "Bearer cc_live_...", "content-type": "application/json" },
body: JSON.stringify({ profile: { name: "shop-account", persist: true }, country: "de" }),
});- Mismo dispositivo, misma IP. Un perfil trae su propia identidad (
profile:<name>), así que el sitio ve la misma huella digital, y la misma IP residencial mientras esa IP siga en línea, como un cliente que regresa. Si prefieres otra cosa, pasa tú mismoidentityofingerprint, y mantén el mismo país entre ejecuciones. - Un solo escritor a la vez. Solo una sesión en ejecución puede guardar en un perfil; una segunda con
persist: truerecibe409 PROFILE_IN_USE. Las sesiones de solo lectura pueden correr en paralelo y ven el último estado guardado. - Se guarda cuando termina la sesión, ya sea que cierres el navegador, te desconectes, lo detengas o lo termine un límite. Si el navegador se cae, se conserva el estado guardado anterior en lugar de reemplazarlo por uno parcial. Las cookies de sesión (las que no tienen vencimiento) se descartan, igual que las descarta un navegador real al reiniciarse.
- Hasta unos 3.5 MB comprimidos. Si el IndexedDB de un sitio lo hace más grande, el IndexedDB queda fuera; las cookies y el localStorage se siguen guardando.
- Privado. Un perfil es solo tuyo (el “shop-account” de otro cliente es un perfil distinto), se almacena cifrado y solo se entrega al servidor que ejecuta tu sesión. Lístalos con
GET /api/v1/browsers/profiles, borra uno conDELETE /api/v1/browsers/profiles/<name>o usa el panel.
¿Ya iniciaste sesión en otro lugar? La sincronización de cookies copia esas cookies a un perfil, así que la primera sesión también empieza con la sesión iniciada.
Fijar una versión
Las sesiones ejecutan la versión actual de Clearcote. Para ejecutar una anterior, pasa version: la versión completa ("152.0.7977.82-r21"), solo la recompilación ("r21"), una versión de Chromium o solo su versión mayor ("152" elige el build más reciente de esa versión), o "latest". Son las mismas versiones que descarga la opción version del SDK, así que una sesión alojada y una ejecución local fijadas a la misma versión usan el mismo build.
const res = await fetch("https://www.clearcotelabs.com/api/v1/browsers", {
method: "POST",
headers: { authorization: "Bearer cc_live_...", "content-type": "application/json" },
body: JSON.stringify({ identity: "account-1", version: "152.0.7977.82-r21" }),
});
const { connectUrl, engine, warnings } = await res.json();
// engine -> { version: "152.0.7977.82", revision: "r21", pinned: true }
// warnings -> [ "This session runs 152.0.7977.82-r21, older than the current ... " ]- Revisa
warnings. Una versión anterior no tiene lo que agregaron las versiones posteriores. Las opciones y correcciones que llegaron después pueden faltar, o ignorarse en silencio en lugar de rechazarse, así que un ajuste que funciona en la versión actual puede no hacer nada, sin avisar, en una versión fijada. - El
enginede la respuesta siempre indica qué versión ejecuta la sesión, esté fijada o no. - Una versión que no existe da un
400con el códigoUNKNOWN_VERSION, y el mensaje lista las versiones que puedes elegir. - La primera sesión con una versión que nuestros servidores todavía no han usado puede tardar hasta un minuto más en iniciar mientras se descarga el build. Las siguientes sesiones con esa versión arrancan tan rápido como cualquier otra.
Página de inicio y bloqueo de anuncios
urlabre una página en la primera pestaña antes de que te conectes, así que ya está cargando cuando tu script se conecta.adblock: truerechaza las solicitudes a hosts conocidos de anuncios, de verificación de anuncios y de analítica antes de que se hagan, así que nunca se facturan. La lista es deliberadamente conservadora (no toca los gestores de etiquetas, las herramientas de consentimiento, los SDKs de login ni los CAPTCHAs), pero algunos sitios notan que faltan anuncios; déjalo desactivado donde eso importe.