Dashboard

Playwright

Connect Playwright to a Scrayle cloud browser for stealth-enabled browser automation with full CDP support.

Prerequisites

npm install playwright-core @scrayle/sdk

Use 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 automatically

With 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;
}