3.3 KiB
Guide: Setting Up Playwright with a Local Chrome Executable
This guide explains how to configure Playwright to use a locally extracted Google Chrome browser. This is useful in environments where you don't have sudo permissions to install Chrome or its dependencies system-wide.
The Problem
When running a Playwright script, you might encounter an error like this:
playwright._impl._errors.Error: BrowserType.launch: Executable doesn't exist at ...
This means Playwright cannot find the Chrome browser executable in its default search paths.
The Solution: Local Extraction
The solution is to download the Chrome .deb package, extract the executable, and then point your Playwright script to it.
Step 0: pip install playwright
Before you begin, make sure you have Playwright installed. You can install it using pip:
pip install playwright
Step 1: Download the Chrome .deb Package
You can download the latest stable version of Google Chrome for Debian/Ubuntu-based systems using wget:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Step 2: Extract the Executable
Once you have the .deb file, you can extract its contents without installing it.
-
Extract the
.debarchive: Thearcommand extracts the contents of the.debfile.ar x google-chrome-stable_current_amd64.debThis will create several files, including
data.tar.xz. -
Extract the data archive: The
data.tar.xzfile contains the actual program files.tar -xf data.tar.xzThis will create an
optdirectory in your current location.
Step 3: Locate the Chrome Executable
The Chrome executable is now located at ./opt/google/chrome/chrome.
Step 4: Configure Your Playwright Script
In your Python script forum_functions.py, you need to tell Playwright where to find the Chrome executable by using the executable_path argument when launching the browser.
It is best practice to use an absolute path to avoid issues with the script's working directory. You can construct the absolute path by combining your project's root directory with the relative path to the executable.
Here is an example:
import os
from playwright.async_api import async_playwright
import asyncio
async def main():
# Get the absolute path to the executable
project_dir = os.getcwd() # Or specify your project's absolute path
executable_path = os.path.join(project_dir, 'opt/google/chrome/chrome')
async with async_playwright() as p:
browser = await p.chromium.launch(
executable_path=executable_path,
args=['--headless=new', '--no-sandbox']
)
page = await browser.new_page()
await page.goto('http://playwright.dev')
print(await page.title())
await browser.close()
if __name__ == '__main__':
asyncio.run(main())
By providing the absolute executable_path, you are explicitly telling Playwright where to find the browser, making your script more robust.
Alternative: playwright install
If you have sudo permissions, the recommended way to install the browsers for Playwright is to use the following command:
playwright install --with-deps
This will download the browser and also install all the necessary system dependencies.