Aller au contenu

Limites et erreurs

Les limites des sessions hébergées, les erreurs que renvoie l'API et celles qui valent la peine d'être réessayées.

Limites

  • 75 navigateurs en cours d’exécution ou de démarrage simultanément par compte.
  • Les sessions durent au maximum 4 heures.
  • Une session sans aucune commande CDP pendant 5 minutes est fermée (modifiable avec idleTimeoutSec).
  • Chaque session démarre avec un profil de navigateur vierge, supprimé à la fin de la session, sauf si vous utilisez un profil nommé, qui conserve les cookies et le stockage des sites d’une session à l’autre.
  • Par sécurité, le navigateur ne peut ni ouvrir de fichiers locaux (file://), ni uploader des fichiers depuis le serveur, ni accéder à des réseaux privés ou internes, ni envoyer d’e-mails sur le port 25.
  • L’upload d’un fichier fonctionne depuis votre code — voir Uploader des fichiers. Les téléchargements restent sur notre serveur et sont supprimés avec la session ; pour conserver un fichier, récupérez-le depuis la page et renvoyez son contenu.
  • Les extensions Chrome ne peuvent pas être chargées dans les navigateurs hébergés.
  • Le navigateur ne transmet ni les messages de console ni les erreurs de page : page.on("console") et page.on("pageerror") restent donc muets. Collectez ce dont vous avez besoin dans la page et relisez-le avec evaluate. Deux appels du driver dépendent de ces événements : voir setContent et exposeFunction.

Erreurs

StatutcodeSignification
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.

Les erreurs sont renvoyées en JSON : { "error": "...", "code": "..." }. Si la connexion WebSocket elle-même est refusée, créez une nouvelle session : les URL de connexion sont à usage unique et expirent au bout de deux minutes. Un upgrade WebSocket refusé répond avec un statut HTTP et un champ JSON error : 409 si l’URL a déjà été utilisée, si la session a été annulée, n’a pas été démarrée avec keepAlive ou est déjà connectée ; 401 si l’URL a expiré.

Ce qu’il faut réessayer

  • Réessayez avec backoff : 503 NO_CAPACITY et 503 NO_WORKER (attendez 1, 2, 4… secondes avec un peu de jitter, et abandonnez après quelques tentatives), ainsi qu’une 429 sans code (la limite de débit par adresse).
  • Réessayez quelques fois avec backoff : les autres réponses 5xx, et une connexion refusée avant le démarrage de votre script (avec une nouvelle session : l’ancienne URL de connexion est consommée).
  • Ne bouclez jamais : 400 (corrigez la requête), 401, 402 (ajoutez du crédit), 429 CONCURRENCY_LIMIT (fermez d’abord un navigateur) et 409 PROFILE_IN_USE. Une personne doit intervenir ; réessayer ne fait que gaspiller des requêtes.