Connect
Copy
import { puppeteer } from '@bctrl/sdk';
const session = await puppeteer.connect({
apiKey: process.env.BCTRL_API_KEY
});
const page = session.page;
Navigation
Copy
await page.goto('https://example.com');
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
await page.goBack();
await page.goForward();
await page.reload();
const url = page.url();
const title = await page.title();
Selectors & Actions
Copy
// Click
await page.click('button');
await page.click('button', { clickCount: 2 });
// Type
await page.type('input[name="email"]', '[email protected]');
await page.type('input', 'Hello', { delay: 100 });
// Query elements
const element = await page.$('button');
const elements = await page.$$('li');
// Fill (clears first)
await page.click('input');
await page.keyboard.down('Control');
await page.keyboard.press('A');
await page.keyboard.up('Control');
await page.keyboard.type('new text');
Getting Content
Copy
// Text content
const text = await page.$eval('h1', el => el.textContent);
const texts = await page.$$eval('li', els => els.map(el => el.textContent));
// Attributes
const href = await page.$eval('a', el => el.getAttribute('href'));
// Inner HTML
const html = await page.$eval('div', el => el.innerHTML);
Evaluate JavaScript
Copy
// Simple
const title = await page.evaluate(() => document.title);
// With arguments
const text = await page.evaluate(
selector => document.querySelector(selector)?.textContent,
'h1'
);
// Complex return
const data = await page.evaluate(() => ({
url: location.href,
height: document.body.scrollHeight
}));
Screenshots
Copy
await page.screenshot({ path: 'screenshot.png' });
await page.screenshot({ path: 'full.png', fullPage: true });
const buffer = await page.screenshot({ encoding: 'binary' });
Mouse & Keyboard
Copy
// Mouse
await page.mouse.move(100, 200);
await page.mouse.click(100, 200);
await page.mouse.wheel({ deltaY: 500 });
// Keyboard
await page.keyboard.press('Enter');
await page.keyboard.type('Hello World');
await page.keyboard.down('Shift');
await page.keyboard.press('ArrowDown');
await page.keyboard.up('Shift');
Waiting
Copy
await page.waitForSelector('button');
await page.waitForSelector('button', { visible: true });
await page.waitForNavigation();
await page.waitForTimeout(1000);
AI Agents
Copy
await session.stagehand.act('Click the submit button');
const data = await session.stagehand.extract(
'Get all product prices',
z.array(z.number())
);
Full Example
Copy
import { puppeteer } from '@bctrl/sdk';
async function main() {
const session = await puppeteer.connect({
apiKey: process.env.BCTRL_API_KEY
});
const page = session.page;
await page.goto('https://example.com');
// Fill form
await page.type('#email', '[email protected]');
await page.type('#password', 'password123');
await page.click('button[type="submit"]');
await page.waitForNavigation();
console.log('Logged in:', page.url());
await session.close();
}
main();

