- First script
- Record scripts
- With Pytest
- Interactive mode (REPL)
- Known issues
- System requirements
- Release notes
See system requirements.
pip install --upgrade pippip install playwrightplaywright install
conda config --add channels conda-forgeconda config --add channels microsoftconda install playwrightplaywright install
These commands download the Playwright package and install browser binaries for Chromium, Firefox and WebKit. To modify this behavior see installation parameters.
Once installed, you can
import Playwright in a Python script, and launch any of the 3 browsers (
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("http://playwright.dev") print(page.title()) browser.close()
Playwright supports two variations of the API: synchronous and asynchronous. If your modern project uses asyncio, you should use async API:
import asynciofrom playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto("http://playwright.dev") print(await page.title()) await browser.close() asyncio.run(main())
In our first script, we will navigate to
whatsmyuseragent.org and take a screenshot in WebKit.
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.webkit.launch() page = browser.new_page() page.goto("http://whatsmyuseragent.org/") page.screenshot(path="example.png") browser.close()
By default, Playwright runs the browsers in headless mode. To see the browser UI, pass the
headless=False flag while launching the browser. You can also use
slow_mo to slow down execution. Learn more in the debugging tools section.
Command line tools can be used to record user interactions and generate Python code.
playwright codegen wikipedia.org
See here for Pytest instructions and examples.
Blocking REPL, as in CLI via Python directly:
>>> from playwright.sync_api import sync_playwright>>> playwright = sync_playwright().start()# Use playwright.chromium, playwright.firefox or playwright.webkit# Pass headless=False to launch() to see the browser UI>>> browser = playwright.chromium.launch()>>> page = browser.new_page()>>> page.goto("http://whatsmyuseragent.org/")>>> page.screenshot(path="example.png")>>> browser.close()>>> playwright.stop()
Async REPL such as
python -m asyncio
>>> from playwright.async_api import async_playwright>>> playwright = await async_playwright().start()>>> browser = await playwright.chromium.launch()>>> page = await browser.new_page()>>> await page.goto("http://whatsmyuseragent.org/")>>> await page.screenshot(path="example.png")>>> await browser.close()>>> await playwright.stop()
You can use Playwright with Pyinstaller to create standalone executables.
# main.pyfrom playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("http://whatsmyuseragent.org/") page.screenshot(path="example.png") browser.close()
If you want to bundle browsers with the executables:
# Linux/macOSPLAYWRIGHT_BROWSERS_PATH=0 playwright install chromiumpyinstaller -F main.py # Windows with cmd.exeset PLAYWRIGHT_BROWSERS_PATH=0playwright install chromiumpyinstaller -F main.py # Windows with PowerShell$env:PLAYWRIGHT_BROWSERS_PATH="0"playwright install chromiumpyinstaller -F main.py
Bundling the browsers with the executables will generate bigger binaries. It is recommended to only bundle the browsers you use.
time.sleep() leads to outdated state#
You should use
page.wait_for_timeout(5000) instead of
time.sleep(5) and it is better to not wait for a timeout at all, but sometimes it is useful for debugging. In these cases, use our wait method instead of the
time module. This is because we internally rely on asynchronous operations and when using
time.sleep(5) they can't get processed correctly.
asyncio on Windows#
Playwright runs the driver in a subprocess, so it requires
asyncio on Windows because
SelectorEventLoop does not supports async subprocesses.
On Windows Python 3.7, Playwright sets the default event loop to
ProactorEventLoop as it is default on Python 3.8+.
Playwright requires Python 3.7 or above. The browser binaries for Chromium, Firefox and WebKit work across the 3 platforms (Windows, macOS, Linux):
Works with Windows and Windows Subsystem for Linux (WSL).
Requires 10.14 (Mojave) or above.
Depending on your Linux distribution, you might need to install additional dependencies to run the browsers.
Only Ubuntu 18.04 and Ubuntu 20.04 are officially supported.
See also in the Command line tools which has a command to install all necessary dependencies automatically for Ubuntu LTS releases.