diff --git a/public/images/browser-rendering/speedystagehand.gif b/public/images/browser-rendering/speedystagehand.gif new file mode 100644 index 000000000000000..6a44cf8fccd3898 Binary files /dev/null and b/public/images/browser-rendering/speedystagehand.gif differ diff --git a/public/images/browser-rendering/stagehand.gif b/public/images/browser-rendering/stagehand.gif new file mode 100644 index 000000000000000..3c436aaa92404c1 Binary files /dev/null and b/public/images/browser-rendering/stagehand.gif differ diff --git a/src/content/changelog/browser-rendering/2025-09-25-br-playwright-ga-stagehand-limits.mdx b/src/content/changelog/browser-rendering/2025-09-25-br-playwright-ga-stagehand-limits.mdx new file mode 100644 index 000000000000000..7c94ac44661a3a7 --- /dev/null +++ b/src/content/changelog/browser-rendering/2025-09-25-br-playwright-ga-stagehand-limits.mdx @@ -0,0 +1,53 @@ +--- +title: Browser Rendering Playwright GA, Stagehand support (Beta), and higher limits +description: Browser Rendering birthday week announcements +products: + - browser-rendering +date: 2025-09-25T12:00:00Z +--- + +We’re shipping three updates to Browser Rendering: +- Playwright support is now Generally Available and synced with [Playwright v1.55](https://playwright.dev/docs/release-notes#version-155), giving you a stable foundation for critical automation and AI-agent workflows. +- We’re also adding [Stagehand support (Beta)](/browser-rendering/platform/stagehand/) so you can combine code with natural language instructions to build more resilient automations. +- Finally, we’ve tripled [limits](/browser-rendering/platform/limits/#workers-paid) for paid plans across both the [REST API](/browser-rendering/rest-api/) and [Workers Bindings](/browser-rendering/workers-bindings/) to help you scale. + +To get started with Stagehand, refer to the [Stagehand](/browser-rendering/platform/stagehand/) example that uses Stagehand and [Workers AI](/workers-ai/) to search for a movie on this [example movie directory](https://demo.playwright.dev/movies), extract its details using natural language (title, year, rating, duration, and genre), and return the information along with a screenshot of the webpage. + +```ts title="Stagehand example" +const stagehand = new Stagehand({ + env: "LOCAL", + localBrowserLaunchOptions: { cdpUrl: endpointURLString(env.BROWSER) }, + llmClient: new WorkersAIClient(env.AI), + verbose: 1, +}); + +await stagehand.init(); +const page = stagehand.page; + +await page.goto('https://demo.playwright.dev/movies'); + +// if search is a multi-step action, stagehand will return an array of actions it needs to act on +const actions = await page.observe('Search for "Furiosa"'); +for (const action of actions) + await page.act(action); + +await page.act('Click the search result'); + +// normal playwright functions work as expected +await page.waitForSelector('.info-wrapper .cast'); + +let movieInfo = await page.extract({ + instruction: 'Extract movie information', + schema: z.object({ + title: z.string(), + year: z.number(), + rating: z.number(), + genres: z.array(z.string()), + duration: z.number().describe("Duration in minutes"), + }), +}); + +await stagehand.close(); +``` + +![Stagehand video](/images/browser-rendering/speedystagehand.gif)