--- id: chrome-extensions title: "Chrome Extensions" --- :::note Extensions only work in Chrome / Chromium in non-headless mode, launched with a persistent context. ::: The following is code for getting a handle to the [background page](https://developer.chrome.com/extensions/background_pages) of a [Manifest v2](https://developer.chrome.com/docs/extensions/mv2/) extension whose source is located in `./my-extension`: ```js const { chromium } = require('playwright'); (async () => { const pathToExtension = require('path').join(__dirname, 'my-extension'); const userDataDir = '/tmp/test-user-data-dir'; const browserContext = await chromium.launchPersistentContext(userDataDir,{ headless: false, args: [ `--disable-extensions-except=${pathToExtension}`, `--load-extension=${pathToExtension}` ] }); let [backgroundPage] = browserContext.backgroundPages(); if (!backgroundPage) backgroundPage = await browserContext.waitForEvent('backgroundpage'); // Test the background page as you would any other page. await browserContext.close(); })(); ``` ```python async import asyncio from playwright.async_api import async_playwright path_to_extension = "./my-extension" user_data_dir = "/tmp/test-user-data-dir" async def run(playwright): context = await playwright.chromium.launch_persistent_context( user_data_dir, headless=False, args=[ f"--disable-extensions-except={path_to_extension}", f"--load-extension={path_to_extension}", ], ) if len(context.background_pages) == 0: background_page = await context.wait_for_event('backgroundpage') else: background_page = context.background_pages[0] # Test the background page as you would any other page. await context.close() async def main(): async with async_playwright() as playwright: await run(playwright) asyncio.run(main()) ``` ```python sync from playwright.sync_api import sync_playwright path_to_extension = "./my-extension" user_data_dir = "/tmp/test-user-data-dir" def run(playwright): context = playwright.chromium.launch_persistent_context( user_data_dir, headless=False, args=[ f"--disable-extensions-except={path_to_extension}", f"--load-extension={path_to_extension}", ], ) if len(context.background_pages) == 0: background_page = context.wait_for_event('backgroundpage') else: background_page = context.background_pages[0] # Test the background page as you would any other page. context.close() with sync_playwright() as playwright: run(playwright) ```