Trình duyệt được lưu trữ sẵn (hosted)
Khởi động một trình duyệt Clearcote trên máy chủ của chúng tôi chỉ với một lệnh gọi API và điều khiển nó qua Chrome DevTools Protocol, từ Playwright, Puppeteer hoặc bất kỳ client CDP nào. Bạn không phải tự cài đặt hay vận hành gì cả. Mặc định, lưu lượng đi ra qua IP dân cư, và bạn trả tiền theo GB từ số dư trả trước.
- IP dân cư, không phải datacenter. Các trang web thấy một kết nối internet gia đình thật của một nhà mạng dân dụng, không phải địa chỉ của dịch vụ hosting hay cloud.
- Phần cứng thật, không phải VPS. Trình duyệt chạy trên các máy chủ vật lý chuyên dụng của chính chúng tôi, không phải trên máy ảo cloud dùng chung.
Thêm về trình duyệt hosted: một SDK cho cả local và cloud (launch(cloud=True)), lượt chạy agent (đưa vào một tác vụ, nhận về JSON), bản ghi hình và dòng thời gian sự kiện, đồng bộ cookie, secret và 2FA, và bàn giao cho người thật và webhook.Miễn phíNhận €5 lưu lượng miễn phí khi kết nối GitHub. Không cần thẻ.
Áp dụng một lần, mỗi tài khoản GitHub chỉ nhận một lần. Tài khoản GitHub phải được tạo ít nhất 30 ngày.
1. Lấy API key
Tạo một key trên trang “API keys”. Key bắt đầu bằng cc_live_ và được gửi dưới dạng bearer token. Hãy giữ bí mật: bất kỳ ai có key đều có thể tiêu số dư của bạn.
2. Khởi động trình duyệt và kết nối
POST /api/v1/browsers trả về một connectUrl: một URL WebSocket dùng một lần cho trình duyệt đó. Hãy kết nối trong vòng hai phút; URL này không dùng lại được. Trình duyệt khởi động ngay khi bạn kết nối, thường trong vòng vài giây, nhưng khi có country thì có thể mất tới khoảng nửa phút, vì vị trí của IP đầu ra được tra cứu trước. Mặc định Playwright ngừng chờ sau 30 giây, nên các ví dụ truyền timeout là hai phút.
// Node.js + Playwright
import { chromium } from "playwright";
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", country: "us" }),
});
const { connectUrl, id, error } = await res.json();
if (error) throw new Error(error);
const browser = await chromium.connectOverCDP(connectUrl, { timeout: 120_000 }); // the browser starts as you connect
const context = browser.contexts()[0];
const page = context.pages()[0] ?? (await context.newPage());
await page.goto("https://example.com");
await browser.close(); // ends the session// Puppeteer: the same connectUrl
const browser = await puppeteer.connect({ browserWSEndpoint: connectUrl, defaultViewport: null });# Python + Playwright
import requests
from playwright.sync_api import sync_playwright
r = requests.post("https://www.clearcotelabs.com/api/v1/browsers",
headers={"authorization": "Bearer cc_live_..."},
json={"identity": "account-1", "country": "de"}).json()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(r["connectUrl"], timeout=120_000)
page = browser.contexts[0].new_page()
page.goto("https://example.com")
browser.close()Lệnh tạo trả về 201 kèm mọi thứ code của bạn cần để kết nối và để biết giá:
{
"id": "bs_…", // use it with GET / DELETE /api/v1/browsers/<id>
"connectUrl": "wss://…/v1/connect/bs_…?token=…",
"expiresAt": "2026-09-24T10:02:00.000Z", // connect before this (two minutes)
"worker": "w_…",
"pricing": { "eurPerGb": 1, "eurPerHour": 0 },
"limits": { "maxSeconds": 14400, "idleSeconds": 300 } // plus maxBytes when capped
}Các thực hành tốt nhất
- Kết nối, đừng launch. Dùng
connectOverCDPhoặcpuppeteer.connectvớiconnectUrl;chromium.launch()thì lại khởi động một trình duyệt trên chính máy của bạn. - Dùng những gì đã có sẵn. Lấy
browser.contexts()[0]và trang đầu tiên của nó thay vì tạo context mới: context mới bắt đầu mà không có cookie và dữ liệu lưu trữ của profile, và Playwright gán cho nó một viewport giả lập 1280×720 không khớp với cửa sổ trình duyệt. - Đặt persona lúc tạo phiên, không phải từ script. Quốc gia, múi giờ và ngôn ngữ thuộc về lệnh tạo. Ghi đè user agent, viewport hay các thuộc tính navigator từ script sẽ tạo ra đúng những điểm bất nhất mà cơ chế phát hiện đang tìm.
- Giữ CDP hook ở phạm vi hẹp. Listener diện rộng, việc chặn (interception) mọi request và init script chính là fingerprint riêng của automation. Playwright và Puppeteer nguyên bản vẫn chạy bình thường, trừ hai lệnh gọi (setContent và exposeFunction): engine giữ các tác dụng phụ của
Runtime.enabletránh xa chính trang web, nên một driver đã được vá như Patchright chỉ là tùy chọn chứ không bắt buộc. - Một phiên, nhiều trang. Khởi động trình duyệt là phần chậm; hãy điều hướng bên trong nó. Đăng nhập một lần với một profile thay vì đăng nhập ở mỗi lần chạy.
- Luôn dừng phiên. Đóng trình duyệt trong khối
finally, và đặtmaxGbcùngidleTimeoutSecphù hợp với công việc, để một bug không thể để trình duyệt chạy mãi và tiêu số dư của bạn. - Quan sát trước khi thêm code. Khi một site hoạt động bất thường, hãy xem nó trong live view (hoặc giành quyền điều khiển) trước khi thêm các lệnh chờ và cách xử lý tạm thời.