Swap launch() for connectOverCDP
Add your API key and run. Same one-line change in Node, Python, Java, and .NET.
const browser = await chromium.connectOverCDP(
`wss://cdp-lb.axiom.ai/?token=${KEY}`
);
Point connectOverCDP at our WebSocket and the script you already have runs on fresh cloud Chrome. You manage your script. We manage Chrome.
1import { chromium } from "playwright";2 3const browser = await chromium.connectOverCDP(4 `wss://cdp-lb.axiom.ai/?token=${process.env.AXIOM_API_KEY}`5);6 7const context = browser.contexts()[0];8const page = context.pages()[0] ?? await context.newPage();9 10await page.goto("https://example.com");11await page.getByRole("button", { name: "Accept" }).click();12await page.screenshot({ path: "out.png" });13 14await browser.close();15 The switch
Your script connects to a browser in our cloud instead of launching its own. Nothing else changes.
Explore the Chrome APIAdd your API key and run. Same one-line change in Node, Python, Java, and .NET.
const browser = await chromium.connectOverCDP(
`wss://cdp-lb.axiom.ai/?token=${KEY}`
);
Every session gets current cloud Chrome. Nothing to download in CI, nothing to rebuild when Chromium updates.
Up to 20 concurrent sessions in the cloud, unlimited on desktop, and more on request. Parallel work means more connections, not more servers, and runtime only meters while a session is open.
See infrastructureEach cloud session gets its own server with a private Docker container, desktop runs never leave your machine, and we never train AI on anything that passes through either.
Also available
The browser you connected to also takes Step API calls, functions from the engine behind our No-Code Tool. One call scrapes a paginated list, solves a captcha, or walks a date picker, using the selectors you already have.
Explore the Step API1await axiom.browserOpen();2try {3 await axiom.goto("https://example.com/login");4 await axiom.enterText("#email", "user@example.com");5 await axiom.enterText("#password", process.env.PW);6 await axiom.click("button[type=submit]");7 await axiom.wait(2000);8 9 const rows = await axiom.scrape(null, { hierarchy: ".product-card" }, null, 50, {});10} finally {11 await axiom.browserClose();12}13 1await axiom.goto("https://example.com/apply");2await axiom.enterText("#full-name", row.name);3await axiom.selectList("#country", row.country);4await axiom.click("button[type=submit]");5 1const [[title], [description]] = await axiom.scrapeMetadata([2 { id: "general_metadata_title" },3 { id: "meta_description", value: 'meta[name="description"]' }4]);5const verdict = await axiom.integrateAI({6 aiFunction: "generate",7 prompt: `Product page or category page? ${title} ${description}`8});9 1const targets = await db.query("SELECT url FROM watchlist");2 3await axiom.browserOpen();4try {5 for (const { url } of targets) {6 await axiom.goto(url);7 const [[price]] = await axiom.scrape(null, { hierarchy: ".price" }, null, 1, {});8 if (Number(price) < 100) await notifySlack(url, price);9 }10} finally {11 await axiom.browserClose();12}13 Get an API key and try the Chrome API for free.
2 free hours of runtime. No card required.