Skip to main content

Hybrid Automation

info

Hybrid Automation is only available on paid plans.

Hybrid automation lets you pause an automated script, hand control to a human via a secure live URL, and resume automation once they finish. Use it for login flows, 2FA, CAPTCHAs, or any step that requires human judgment.

hybrid automation preview

How It Works

Create a liveURL through CDP and Browserless returns a one-time, shareable link. No API tokens are exposed and no extra software is needed.

BehaviorDefaultOverride
ViewportResizes to match the end user's screenresizable: false to keep the current viewport
InteractionClick, type, scroll, touch, and tap enabledinteractable: false to block all input (view-only mode)
Stream qualityFull quality compressed videoquality: 1-100 to reduce bandwidth (useful for mobile)
Tab scopeOnly the page used to create the URLshowBrowserInterface: true to stream all tabs (may increase CAPTCHA challenges)
EventsNoneListen for Browserless.liveComplete and Browserless.captchaFound

Basic Implementation

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
browserWSEndpoint: 'wss://production-sfo.browserless.io?token=YOUR_API_TOKEN_HERE',
});
const page = await browser.newPage();
await page.goto('https://practicetestautomation.com/practice-test-login/');

const cdp = await page.createCDPSession();
const { liveURL } = await cdp.send('Browserless.liveURL');

console.log('Share this URL:', liveURL);

// Wait for the user to complete their tasks
await new Promise((r) => cdp.on('Browserless.liveComplete', r));

// Continue automation...
await browser.close();

Example: Authentication with 2FA

Hand off the browser to a human for login flows that require verification, then resume automation with the authenticated session.

const login = async () => {
const browser = await puppeteer.connect({
browserWSEndpoint: 'wss://production-sfo.browserless.io?token=YOUR_API_TOKEN_HERE',
});
const page = await browser.newPage();
await page.goto('https://accounts.google.com');

const cdp = await page.createCDPSession();
const { liveURL } = await cdp.send('Browserless.liveURL');

console.log('Please complete login:', liveURL);

// Wait for the user to finish authentication
await new Promise((r) => cdp.on('Browserless.liveComplete', r));

// Continue with the authenticated session
// Your automation code here...

await browser.close();
};
tip

For advanced patterns like multi-stage workflows, read-only monitoring, programmatic session control, and bandwidth optimization, see Advanced Hybrid Automation Configurations.

Next Steps