Version: Next


Playwright allows overriding various parameters of the device where the browser is running:

  • viewport size, device scale factor, touch support
  • locale, timezone
  • color scheme
  • geolocation

Most of these parameters are configured during the browser context construction, but some of them such as viewport size can be changed for individual pages.


Playwright comes with a registry of device parameters for selected mobile devices. It can be used to simulate browser behavior on a mobile device:

from playwright.sync_api import sync_playwright
def run(playwright):
pixel_2 = playwright.devices['Pixel 2']
browser = playwright.webkit.launch(headless=False)
context = browser.new_context(
with sync_playwright() as playwright:

All pages created in the context above will share the same device parameters.

API reference#

User agent#

All pages created in the context above will share the user agent specified:

context = browser.new_context(
user_agent='My user agent'

API reference#


Create a context with custom viewport size:

# Create context with given viewport
context = browser.new_context(
viewport={ 'width': 1280, 'height': 1024 }
# Resize viewport for individual page
page.set_viewport_size(width=1600, height=1200)
# Emulate high-DPI
context = browser.new_context(
viewport={ 'width': 2560, 'height': 1440 },

API reference#

Locale & timezone#

# Emulate locale and time
context = browser.new_context(

API reference#


Allow all pages in the context to show system notifications:

context = browser.new_context(

Grant all pages in the existing context access to current location:


Grant notifications access from a specific domain:

context.grant_permissions(['notifications'], origin='')

Revoke all permissions:


API reference#


Create a context with "geolocation" permissions granted:

context = browser.new_context(
geolocation={"longitude": 48.858455, "latitude": 2.294474},

Change the location later:

context.set_geolocation({"longitude": 29.979097, "latitude": 31.134256})

Note you can only change geolocation for all pages in the context.

API reference#

Color scheme and media#

Create a context with dark or light mode. Pages created in this context will follow this color scheme preference.

# Create context with dark mode
context = browser.new_context(
color_scheme='dark' # or 'light'
# Create page with dark mode
page = browser.new_page(
color_scheme='dark' # or 'light'
# Change color scheme for the page
# Change media for page

API reference#