Playwright
Connect Playwright to a Scrayle cloud browser for stealth-enabled browser automation with full CDP support.
Prerequisites
npm install playwright-core @scrayle/sdkUse playwright-core (not playwright) since Scrayle provides the browser - you do not need a local Chromium installation.
Basic Usage
import { chromium } from 'playwright-core';
import { Playwright } from '@scrayle/sdk';
// Create a cloud browser session
const { browserWSEndpoint } = await Playwright.connect({
config: { apiKey: process.env.SCRAYLE_API_KEY, scrayleHub: 'eu' }, // 'eu' | 'us' | 'asia'
proxyCountry: 'US',
});
// Connect Playwright to the cloud browser
const browser = await chromium.connectOverCDP(browserWSEndpoint);
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();With Browser Profile
Persist cookies and session data across runs:
const { browserWSEndpoint } = await Playwright.connect({
config: { apiKey: process.env.SCRAYLE_API_KEY },
profileId: 'my-profile-id',
profilePersist: true,
proxyCountry: 'GB',
});
const browser = await chromium.connectOverCDP(browserWSEndpoint);
const page = await browser.newPage();
// Cookies and localStorage from previous sessions are restored
await page.goto('https://example.com/dashboard');
await browser.close(); // Profile is saved automaticallyWith Extensions
const { browserWSEndpoint } = await Playwright.connect({
config: { apiKey: process.env.SCRAYLE_API_KEY },
extensionIds: 'ext_abc123,ext_def456',
});Session Options
const { browserWSEndpoint } = await Playwright.connect({
config: { apiKey: process.env.SCRAYLE_API_KEY },
// Session configuration
sessionName: 'my-scraping-session',
sessionTTL: 300, // 5 minute timeout
sessionRecording: true, // Record the session
// Proxy configuration
proxyCountry: 'US',
proxyState: 'California',
proxyCity: 'Los Angeles',
// Or use your own proxy
proxyURL: 'http://user:[email protected]:8080',
// Browser profile
profileId: 'profile-id',
profilePersist: true,
// Extensions
extensionIds: 'ext_id1,ext_id2',
// Viewport
defaultViewport: { width: 1920, height: 1080 },
});Async Creation
Use connectAsync for non-blocking session creation:
const { browserWSEndpoint } = await Playwright.connectAsync({
config: { apiKey: process.env.SCRAYLE_API_KEY },
proxyCountry: 'US',
});Error Handling
import { ScrayleError } from '@scrayle/sdk';
try {
const { browserWSEndpoint } = await Playwright.connect({
config: { apiKey: process.env.SCRAYLE_API_KEY },
proxyCountry: 'US',
});
const browser = await chromium.connectOverCDP(browserWSEndpoint);
// ... your automation code
} catch (error) {
if (error instanceof ScrayleError) {
console.error('Scrayle error:', error.message, error.statusCode);
}
throw error;
}