Pular para o conteúdo

Limites e erros

Os limites das sessões hospedadas, os erros que a API retorna e quais deles valem uma nova tentativa.

Limites

  • 75 navegadores rodando ou iniciando ao mesmo tempo por conta.
  • As sessões duram no máximo 4 horas.
  • Uma sessão sem nenhum comando CDP por 5 minutos é fechada (altere isso com idleTimeoutSec).
  • Toda sessão começa com um perfil de navegador novo, apagado quando a sessão termina, a menos que você use um perfil com nome, que guarda os cookies e o armazenamento dos sites entre sessões.
  • Por segurança, o navegador não pode abrir arquivos locais (file://), fazer upload de arquivos a partir do servidor, acessar redes privadas ou internas nem enviar e-mail pela porta 25.
  • Fazer upload de um arquivo funciona a partir do seu código — veja Enviando arquivos. Os downloads ficam no nosso servidor e são apagados junto com a sessão; para guardar um arquivo, busque-o de dentro da página e retorne o conteúdo dele.
  • Não é possível carregar extensões do Chrome em navegadores hospedados.
  • O navegador não repassa mensagens do console nem erros da página, então page.on("console") e page.on("pageerror") ficam em silêncio. Colete o que precisar dentro da página e leia de volta com evaluate. Duas chamadas do driver dependem desses eventos: veja setContent e exposeFunction.

Erros

StatuscodeSignificado
400—The body is not JSON, or an option is invalid; the message says which.
400UNKNOWN_VERSIONNo release matches version; the message lists the ones you can pick.
400TOO_LARGEThe whole run configuration as stored (task, schema, sealed secrets and the browser options) is capped at 60 KB; shorten them.
400INVALIDA webhook or cookie import body is invalid; the message says which field (and which cookie).
400TOO_MANYA cookie import would leave the profile with more than 5000 cookies. Use mode "replace", or import fewer.
400CHALLENGE_KEY_MISSINGchallengeService has no key to use: pass challengeService.apiKey, store your key in the dashboard (Settings), or use key "managed".
401—Missing, malformed or revoked API key.
401INVALID_LINKA share, hand-off or replay link that is invalid, of the wrong kind, or expired.
403NOT_CONTROLOnly a link that lets you take control can mark a hand-off done; this one is watch-only.
402INSUFFICIENT_BALANCEBalance below the minimum. Top up in the dashboard.
402CHALLENGE_LIMITThis month's challenge-service limit on our key is reached. Raise it in the dashboard (Settings), or use your own key.
404NOT_FOUNDNo session, run, profile, webhook or recording with that id on your account.
409NOT_RUNNINGLive view, a reconnect or a hand-off asked for before the browser started or after it ended.
409NOT_KEEPALIVEThis session cannot be reconnected. Start it with keepAlive: true.
409PROFILE_IN_USEAnother session is already saving to that profile. Stop it, or open the profile with persist: false.
409NOT_READYThe recording is still being uploaded. Try again shortly after the session ends.
409HANDOFF_UNSUPPORTEDThe server running this browser does not support hand-off yet.
409NO_HANDOFFMarked done, but no hand-off was asked for.
409HANDOFF_EXPIREDThe hand-off timed out before it was marked done.
409WEBHOOK_LIMITAt most 5 webhooks per account. Delete one first.
410ENDEDA live link whose session has ended.
410GONEA replay link whose recording is no longer available (failed, or past its retention).
413TOO_LARGEA cookie import would make the profile larger than 3.5 MB.
429CONCURRENCY_LIMITToo many browsers running or starting at once. Close one first.
429—More than 60 create calls in a minute from one address. Slow down.
429—More than 60 cookie imports in 10 minutes on one account (or 30 new webhooks in 10 minutes, 10 webhook tests or 60 hand-off requests a minute). Wait and retry.
503NO_CAPACITYNo free browser slot right now, or no server that can run what you asked for (runs, schema, secrets, recording, the challenge service). Retry after a few seconds.
503NO_WORKERThe server running that session is not reachable at the moment.
503NOT_CONFIGUREDHosted browsers (or that part of them) are not configured on this server.
503NOT_AVAILABLENotes, profiles, runs, recordings, events, hand-off, webhooks or the challenge service are not enabled on this server yet.

Os erros vêm em JSON: { "error": "...", "code": "..." }. Se a própria conexão WebSocket for recusada, crie uma nova sessão: as URLs de conexão são de uso único e expiram após dois minutos. Um upgrade de WebSocket recusado responde com um status HTTP e um error em JSON: 409 quando a URL já foi usada, a sessão foi cancelada, não foi iniciada com keepAlive ou já está conectada; 401 quando a URL expirou.

O que tentar de novo

  • Tente de novo com backoff: 503 NO_CAPACITY e 503 NO_WORKER (espere 1, 2, 4… segundos com um pouco de jitter e desista depois de algumas tentativas), e um 429 sem código (o rate limit por endereço).
  • Tente algumas vezes com backoff: outras respostas 5xx e uma conexão recusada antes de o seu script começar (com uma nova sessão: a URL de conexão antiga já foi gasta).
  • Nunca em loop: 400 (corrija a requisição), 401, 402 (adicione crédito), 429 CONCURRENCY_LIMIT (feche um navegador antes) e 409 PROFILE_IN_USE. Alguém precisa agir; tentar de novo só queima requisições.