Learn to extract data from any website using ZenRows’ Scraping Browser with Playwright. This guide walks you through creating your first browser-based scraping request that can handle complex JavaScript-heavy sites with full browser automation. ZenRows’ Scraping Browser provides cloud-based Chrome instances you can control using Playwright. Whether dealing with dynamic content, complex user interactions, or sophisticated anti-bot protection, you can get started in minutes with Playwright’s powerful automation capabilities.Documentation Index
Fetch the complete documentation index at: https://docs.zenrows.com/llms.txt
Use this file to discover all available pages before exploring further.
1. Set Up Your Project
Set Up Your Development Environment
Before diving in, ensure you have the proper development environment and Playwright installed. The Scraping Browser works seamlessly with both Python and Node.js versions of Playwright.- Python
- Node.js
Get Your API Key and Connection URL
Sign Up for a free ZenRows account and get your API key from the Scraping Browser dashboard. You’ll need this key to authenticate your WebSocket connection.2. Make Your First Request
Start with a simple request to understand how the Scraping Browser works with Playwright. We’ll use the E-commerce Challenge page to demonstrate how to connect to the browser and extract the page title.YOUR_ZENROWS_API_KEY with your actual API key and run the script:
Expected Output
The script will print the page title:3. Build a Real-World Scraping Scenario
Let’s scale up to a practical scraping scenario by extracting product information from the e-commerce site. Using Playwright’s powerful selectors and data extraction methods, we’ll modify our code to extract product names, prices, and URLs from the page.Run Your Application
Execute your script to test the scraping functionality:4. Alternative: Using the ZenRows Browser SDK
For a more streamlined development experience, you can use the ZenRows Browser SDK instead of managing WebSocket URLs manually. The SDK simplifies connection management and provides additional utilities.Install the SDK
Quick Migration from WebSocket URL
If you have existing Playwright code using the WebSocket connection, migrating to the SDK requires minimal changes: Before (WebSocket URL):Complete Example with SDK
SDK Benefits
- Simplified configuration: No need to manually construct WebSocket URLs
- Better error handling: Built-in error messages and debugging information
- Future-proof: Automatic updates to connection protocols and endpoints
- Additional utilities: Access to helper methods and advanced configuration options
How Playwright with Scraping Browser Helps
Combining Playwright with ZenRows’ Scraping Browser provides powerful advantages for web scraping:Key Benefits
- Cloud-based browser instances: Run Playwright scripts on remote Chrome instances, freeing up local resources for other tasks.
- Seamless integration: Connect your existing Playwright code to ZenRows with just a WebSocket URL change - no complex setup required.
- Advanced automation: Use Playwright’s full feature set, which includes page interactions, form submissions, file uploads, and complex user workflows.
- Built-in anti-detection: Benefit from residential proxy rotation and genuine browser fingerprints automatically.
- Cross-browser support: While we use Chromium for optimal compatibility, Playwright’s API remains consistent across different browser engines.
- High concurrency: Scale your Playwright scripts with up to 150 concurrent browser instances, depending on your plan.
- Reliable execution: Cloud infrastructure ensures consistent performance without local browser management overhead.
Troubleshooting
Below are common issues you might encounter when using Playwright with the Scraping Browser:Connection Refused
- API Key Issues: Verify that you’re using the correct API key.
- Network Issues: Check your internet connection and firewall settings.
- WebSocket Endpoint: Ensure that the WebSocket URL (
wss://browser.zenrows.com) is correct.
Empty Data or Timeout Errors
-
Use
page.waitForSelector()to ensure elements load before extraction -
Increase timeout values for slow-loading pages
scraper.js
- Verify CSS selectors are correct using browser developer tools
-
Add
page.waitForLoadState('networkidle')for dynamic content
Browser Context Issues
- Use existing context when available:
browser.contexts[0] if browser.contexts else await browser.new_context() - Properly close pages and browsers to prevent resource leaks
- Handle exceptions properly to ensure cleanup occurs
Geolocation Blocks
Get Help From ZenRows Experts
Next Steps
You now have a solid foundation for Playwright-based web scraping with ZenRows. Here are some recommended next steps:- Practical Use Cases:
Learn common scraping patterns, including screenshots, custom JavaScript execution, and form handling. - Complete Scraping Browser Documentation:
Explore all available features and advanced configuration options for the Scraping Browser. - Playwright Web Scraping Guide:
Dive deeper into Playwright techniques for sophisticated scraping scenarios. - Pricing and Plans:
Understand how browser usage is calculated and choose the plan that fits your scraping volume.
Frequently Asked Questions (FAQ)
Can I use ZenRows® Scraping Browser with Puppeteer?
Can I use ZenRows® Scraping Browser with Puppeteer?
Do I need to configure proxies manually with ZenRows® Scraping Browser?
Do I need to configure proxies manually with ZenRows® Scraping Browser?
Can the Scraping Browser solve CAPTCHAs?
Can the Scraping Browser solve CAPTCHAs?
Can I use all Playwright features with the Scraping Browser?
Can I use all Playwright features with the Scraping Browser?
How do I handle multiple pages or tabs?
How do I handle multiple pages or tabs?
await browser.newPage() or await context.newPage(). Each page operates independently while sharing the same browser session.Can I use Playwright's built-in retry mechanisms?
Can I use Playwright's built-in retry mechanisms?
expect() assertions, waitForSelector(), and other built-in retry mechanisms work perfectly with the Scraping Browser. These features help handle dynamic content and improve scraping reliability.How do I take screenshots with Playwright and Scraping Browser?
How do I take screenshots with Playwright and Scraping Browser?
Can I use Playwright's network interception features?
Can I use Playwright's network interception features?
page.route() and page.on('request') methods with the Scraping Browser.What's the difference between using Playwright locally vs. with Scraping Browser?
What's the difference between using Playwright locally vs. with Scraping Browser?
How do I handle file downloads with Playwright and Scraping Browser?
How do I handle file downloads with Playwright and Scraping Browser?
page.waitForDownload() and the download will be transferred from the cloud browser to your local environment automatically.