The Complete Guide To Playwright Web Scraping

Scraping Robot
November 15, 2023

As organizations increasingly rely on data analysis to drive strategic decision-making, web scraping is becoming an essential business operation. Web scraping allows you to collect large amounts of publicly available information from the internet for multiple business use cases. Many websites have an API that lets you gather data directly, but for others, you need to extract data from the HTML.

Table of Contents

Playwright web scraping is simpler than many other options. It’s a fast, efficient browser automation tool that requires minimal coding. This guide will cover Playwright web scraping, including how to use Playwright in Python and how it compares to Puppeteer.

What Is the Playwright Tool?

learn about playwright

Although not solely designed for web scraping, Playwright is an open-source automation library for web browsers that enables you to programmatically perform tasks such as navigating pages, filling out and submitting forms, clicking links, capturing screenshots, and extracting information from web pages.

Playwright web scraping is a great tool for businesses. Playwright supports all major web browsers, including Chrome, Firefox, and Safari. You can operate Playwright in headless mode, which is useful for scraping data from multiple pages simultaneously. Headless mode also ties up fewer resources and eliminates the issue of empty HTML pages associated with single-page application (SPA) frameworks. However, you can also run Playwright in headful mode if you need to.

Playwright was created for Node.js but also supports Java, .NET, and Python. It has a rich set of APIs. In addition to handling SPAs, Playwright web scraping can deal with shadow DOM and JavaScript.

Playwright Web Scraping Tutorial

web scraping with playwright

Here’s a step-by-step tutorial for Playwright scraping in Node.js.

Step 1: Set Up Your Environment

  1. Install Node.js

Playwright web scraping requires Node.js to run. Download it from the official website.

  1. Create a Project Folder

Make a new directory for your project and navigate into it through your command line.

  1. Initialize Node.js Project


npm init -y


This will create a `package.json` file for you.

  1. Install Playwright


npm i playwright


This will install Playwright and its browser binaries.

Step 2: Write Your Scraper

  1. Create a JavaScript File

Create a file named `scraper.js` in your project directory.

  1. Import Playwright


const playwright = require(‘playwright’);


  1. Write the Scraper Function


async function scrapeWebsite(url) {

// Launch the browser

const browser = await playwright.chromium.launch({ headless: true });

const context = await browser.newContext();

const page = await context.newPage();

// Navigate to the website

await page.goto(url);

// Perform actions like clicking buttons or typing text

// Example: await‘selector’);

// Extract data

// Example: const result = await page.textContent(‘selector’);

// Close the browser

await browser.close();

// Return or process the extracted data

// Example: return result;



Replace “selector” with the appropriate selectors for the elements you want to extract while Playwright web scraping.

  1. Use the Function

Call the `scrapeWebsite` function with the URL of the website you want to scrape:


scrapeWebsite(‘’).then(data => {


}).catch(e => {




Step 3: Run Your Scraper


node scraper.js


This will execute your script and output the scraped data to the console.

Python Playwright Web Scraping Tutorial

guide of scraping with playwright

Web scraping with Playwright and Python is straightforward if you have a working knowledge of Python. Here’s a simple tutorial for Playwright web scraping.

Step 1: Environment Setup

Before you begin, make sure you have Python installed on your system. You’ll also need to install the Playwright package and the browsers it will use.


pip install playwright

playwright install

Step 2: Importing Playwright

Create a Python file for your script and import the required Playwright modules.

from playwright.sync_api import sync_playwright

Step 3: Starting Playwright and Opening a Browser

Use the Playwright context manager to initiate a Playwright session and open a browser instance.

with sync_playwright() as p:

browser = p.chromium.launch()

page = browser.new_page()

Step 4: Navigating to the Web Page

Tell Playwright to navigate to the page you want to scrape.


Step 5: Locating Elements

Once the page is loaded, you can locate elements using CSS selectors. Playwright’s page object has several methods to interact with elements.

# Grab the element’s inner text

element_text = page.text_content(‘selector’)

# Grab multiple elements

elements_list = page.query_selector_all(‘selector’)

Step 6: Extracting Data

Extract data from the elements you’ve targeted. If you’re getting multiple elements, you may want to loop over them.

for element in elements_list:


Step 7: Handling Data

Handle the data as needed — save it to a file, a database, or process it right away.

with open(‘data.txt’, ‘w’) as file:

for element in elements_list:

file.write(element.text_content() + ‘\n’)

Step 8: Shutdown

Once you have finished Playwright web scraping, close the browser.


Full Example Script

Here’s how your entire Playwright web scraping script might look:

from playwright.sync_api import sync_playwright

# Start Playwright and open the browser

with sync_playwright() as p:

browser = p.chromium.launch()

page = browser.new_page()

# Navigate to the page


# Extract data

element_text = page.text_content(‘h1’) # Assuming you want the h1 tag content

elements_list = page.query_selector_all(‘.item’) # Assuming .item is the class for items you’re interested in

# Write data to a file

with open(‘data.txt’, ‘w’) as file:

file.write(element_text + ‘\n’)

for element in elements_list:

file.write(element.text_content().strip() + ‘\n’)

# Close the browser


Additional Tips:

  • If the website is dynamic, make sure that you wait for elements to be loaded before attempting to scrape them. Playwright can wait for elements with methods like wait_for_selector.
  • If you need to interact with the page, like clicking buttons or filling forms, use methods like click and fill.
  • Always handle exceptions, especially for network issues or if an element is not found.
  • You can use the async version of Playwright if you are comfortable with asynchronous programming in Python, which can be more efficient.

Puppeteer vs. Playwright for Scraping

puppeteer vs. playwright

Puppeteer and Playwright are both browser automation tools. Google designed Puppeteer, and it automates tasks primarily in the Chrome browser, although you can also use it in Firefox.

Playwright, on the other hand, uses a single API to operate in all major browsers, providing more flexibility. Playwright also supports multiple languages, so you can work with the language you’re most comfortable using.

Puppeteer is fine for simple scraping tasks in Chrome. However, Playwright web scraping will be a better option if you need more advanced features, such as multiple users or advanced navigation. You’ll also obviously choose Playwright if you want to use browsers other than Chrome or Firefox.

All in all, Playwright web scraping is more flexible and powerful. But Puppeteer has been on the market longer, so it has more community resources and third-party tools available.

Best Practices When Using Playwright for Web Scraping

best practice of playwright scraping

When you’re scraping with Playwright, here are some best practices to keep in mind:

  • Respect robots.txt: Always check the robots.txt file of the website you want to scrape. This file tells you if and how web crawlers should interact with the site.
  • User-agent string: Set a user-agent string that identifies your bot and possibly allows website administrators to contact you if needed.
  • Rate limiting: Implement rate limiting in your scraper. Do not send requests more frequently than a human could reasonably do so. High traffic can overload the website’s servers, which is unethical and could lead to your IP being banned.
  • Error handling: Implement comprehensive error handling. If you encounter a 4xx or 5xx error, your script should handle it gracefully, which may include backing off and trying again later.
  • Headless mode: Run Playwright in headless mode to save system resources. This also makes running on servers or environments without a graphical interface easier.
  • Caching: Use caching to avoid re-downloading the same content unnecessarily. This reduces the website’s server load and speeds up your scraping.
  • Use sessions and cookies carefully: If you’re scraping a site that requires login, handle sessions and cookies in a way that does not abuse login systems.
  • Data handling: Once you’ve scraped data, handle it responsibly. If you’re storing or processing personal data, comply with relevant data protection laws like GDPR.
  • Concurrency and asynchronicity: Use Playwright’s support for concurrency to scrape efficiently, but be mindful not to overload the website. Use asynchronous features of Python, like asyncio, to handle concurrent tasks.
  • Browser contexts: Use browser contexts to simulate different sessions. This can be helpful if you need to scrape from multiple accounts or prevent tracking across different scraping tasks.
  • Avoid detection: Some websites implement measures to block bots. Playwright has tools to help avoid detection, like the ability to emulate different devices or to add random delays between actions to mimic human behavior.

Final Thoughts

conclusion on playwright

Playwright provides an efficient, powerful tool for web scraping. However, you’ll still need to deal with CAPTCHAs, proxy management, and other anti-scraping measures when using it. If you want to cut straight to collecting valuable metadata without the hassle, Scraping Robot provides a code-free alternative to Playwright web scraping.

Scraping Robot was built for developers who have the skill to program their own scrapers but don’t want to be bothered with the endless minutiae of managing them. We handle all the grunt work so you can focus on the tasks that move your business forward. Sign up today to get started for free.

The information contained within this article, including information posted by official staff, guest-submitted material, message board postings, or other third-party material is presented solely for the purposes of education and furtherance of the knowledge of the reader. All trademarks used in this publication are hereby acknowledged as the property of their respective owners.