Giới hạn và lỗi
Các giới hạn của phiên hosted, những lỗi mà API trả về, và lỗi nào đáng thử lại.
Giới hạn
- 75 trình duyệt đang chạy hoặc đang khởi động cùng lúc trên mỗi tài khoản.
- Mỗi phiên kéo dài tối đa 4 giờ.
- Phiên không nhận lệnh CDP nào trong 5 phút sẽ bị đóng (thay đổi bằng
idleTimeoutSec). - Mỗi phiên bắt đầu với một profile trình duyệt mới, bị xóa khi phiên kết thúc, trừ khi bạn dùng một profile có tên, loại profile giữ cookie và dữ liệu lưu trữ của site giữa các phiên.
- Vì lý do an toàn, trình duyệt không thể mở file local (
file://), upload file từ máy chủ, truy cập mạng riêng hoặc mạng nội bộ, hay gửi email qua cổng 25. - Upload file hoạt động từ code của bạn — xem Upload file. Download thì nằm lại trên máy chủ của chúng tôi và bị xóa cùng với phiên; để giữ lại một file, hãy lấy nó từ bên trong trang và trả về nội dung của file đó.
- Không thể nạp Chrome extension vào trình duyệt hosted.
- Trình duyệt không chuyển tiếp console message hay lỗi trang, nên
page.on("console")vàpage.on("pageerror")sẽ im lặng. Hãy thu thập những gì bạn cần bên trong trang rồi đọc lại bằngevaluate. Có hai lệnh gọi của driver phụ thuộc vào các sự kiện này: xem setContent và exposeFunction.
Lỗi
| Trạng thái | code | Ý nghĩa |
|---|---|---|
| 400 | — | The body is not JSON, or an option is invalid; the message says which. |
| 400 | UNKNOWN_VERSION | No release matches version; the message lists the ones you can pick. |
| 400 | TOO_LARGE | The whole run configuration as stored (task, schema, sealed secrets and the browser options) is capped at 60 KB; shorten them. |
| 400 | INVALID | A webhook or cookie import body is invalid; the message says which field (and which cookie). |
| 400 | TOO_MANY | A cookie import would leave the profile with more than 5000 cookies. Use mode "replace", or import fewer. |
| 400 | CHALLENGE_KEY_MISSING | challengeService 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. |
| 401 | INVALID_LINK | A share, hand-off or replay link that is invalid, of the wrong kind, or expired. |
| 403 | NOT_CONTROL | Only a link that lets you take control can mark a hand-off done; this one is watch-only. |
| 402 | INSUFFICIENT_BALANCE | Balance below the minimum. Top up in the dashboard. |
| 402 | CHALLENGE_LIMIT | This month's challenge-service limit on our key is reached. Raise it in the dashboard (Settings), or use your own key. |
| 404 | NOT_FOUND | No session, run, profile, webhook or recording with that id on your account. |
| 409 | NOT_RUNNING | Live view, a reconnect or a hand-off asked for before the browser started or after it ended. |
| 409 | NOT_KEEPALIVE | This session cannot be reconnected. Start it with keepAlive: true. |
| 409 | PROFILE_IN_USE | Another session is already saving to that profile. Stop it, or open the profile with persist: false. |
| 409 | NOT_READY | The recording is still being uploaded. Try again shortly after the session ends. |
| 409 | HANDOFF_UNSUPPORTED | The server running this browser does not support hand-off yet. |
| 409 | NO_HANDOFF | Marked done, but no hand-off was asked for. |
| 409 | HANDOFF_EXPIRED | The hand-off timed out before it was marked done. |
| 409 | WEBHOOK_LIMIT | At most 5 webhooks per account. Delete one first. |
| 410 | ENDED | A live link whose session has ended. |
| 410 | GONE | A replay link whose recording is no longer available (failed, or past its retention). |
| 413 | TOO_LARGE | A cookie import would make the profile larger than 3.5 MB. |
| 429 | CONCURRENCY_LIMIT | Too 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. |
| 503 | NO_CAPACITY | No 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. |
| 503 | NO_WORKER | The server running that session is not reachable at the moment. |
| 503 | NOT_CONFIGURED | Hosted browsers (or that part of them) are not configured on this server. |
| 503 | NOT_AVAILABLE | Notes, profiles, runs, recordings, events, hand-off, webhooks or the challenge service are not enabled on this server yet. |
Lỗi được trả về dạng JSON: { "error": "...", "code": "..." }. Nếu chính kết nối WebSocket bị từ chối, hãy tạo một phiên mới: connect URL chỉ dùng được một lần và hết hạn sau hai phút. Một WebSocket upgrade bị từ chối sẽ trả về một mã trạng thái HTTP kèm error dạng JSON: 409 khi URL đã được dùng, phiên đã bị hủy, không được khởi động với keepAlive, hoặc đang có kết nối rồi; 401 khi URL đã hết hạn.
Khi nào nên thử lại
- Thử lại với backoff:
503 NO_CAPACITYvà503 NO_WORKER(chờ 1, 2, 4… giây kèm một chút jitter, và dừng sau vài lần), cùng429không có code (rate limit theo địa chỉ). - Thử lại vài lần với backoff: các phản hồi
5xxkhác, và một lần kết nối bị từ chối trước khi script của bạn bắt đầu (với một phiên mới: connect URL cũ đã dùng rồi). - Không thử lại trong vòng lặp:
400(sửa request),401,402(nạp thêm tiền),429 CONCURRENCY_LIMIT(đóng bớt một trình duyệt trước) và409 PROFILE_IN_USE. Phải có người xử lý; thử lại chỉ tốn request vô ích.