Gathering detailed insights and metrics for playwright-extra
Gathering detailed insights and metrics for playwright-extra
Gathering detailed insights and metrics for playwright-extra
Gathering detailed insights and metrics for playwright-extra
@devoxa/playwright-extra
Extra utility functions for interacting with Playwright
playwright-extra-plugin-stealth
This is a placeholder package for the upcoming playwright-extra stealth plugin.
playwright-extra-stealth
This is a placeholder package for the upcoming playwright-extra stealth plugin.
@extra/proxy-router
A plugin for playwright & puppeteer to route proxies dynamically.
npm install playwright-extra
Typescript
Module System
Min. Node Version
Node Version
NPM Version
JavaScript (59.86%)
TypeScript (39.86%)
HTML (0.19%)
Shell (0.09%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
MIT License
6,938 Stars
604 Commits
758 Forks
115 Watchers
5 Branches
49 Contributors
Updated on Jul 15, 2025
Latest Version
4.3.6
Package Id
playwright-extra@4.3.6
Unpacked Size
310.59 kB
Size
66.59 kB
File Count
26
NPM Version
lerna/3.22.1/node@v18.12.1+arm64 (darwin)
Node Version
18.12.1
Published on
Mar 01, 2023
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
1
2
A modular plugin framework for playwright to enable cool plugins through a clean interface.
1yarn add playwright playwright-extra 2# - or - 3npm install playwright playwright-extra
Please check the
announcements
channel in our discord server until we've automated readme updates. :)
1// playwright-extra is a drop-in replacement for playwright, 2// it augments the installed playwright with plugin functionality 3const { chromium } = require('playwright-extra') 4 5// Load the stealth plugin and use defaults (all tricks to hide playwright usage) 6// Note: playwright-extra is compatible with most puppeteer-extra plugins 7const stealth = require('puppeteer-extra-plugin-stealth')() 8 9// Add the plugin to playwright (any number of plugins can be added) 10chromium.use(stealth) 11 12// That's it, the rest is playwright usage as normal 😊 13chromium.launch({ headless: true }).then(async browser => { 14 const page = await browser.newPage() 15 16 console.log('Testing the stealth plugin..') 17 await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' }) 18 await page.screenshot({ path: 'stealth.png', fullPage: true }) 19 20 console.log('All done, check the screenshot. ✨') 21 await browser.close() 22})
The above example uses the compatible stealth
plugin from puppeteer-extra, that plugin needs to be installed as well:
1yarn add puppeteer-extra-plugin-stealth 2# - or - 3npm install puppeteer-extra-plugin-stealth
If you'd like to see debug output just run your script like so:
1# macOS/Linux (Bash) 2DEBUG=playwright-extra*,puppeteer-extra* node myscript.js 3 4# Windows (Powershell) 5$env:DEBUG='playwright-extra*,puppeteer-extra*';node myscript.js
playwright-extra
and most plugins are written in TS, so you get perfect type support out of the box. :)
1// playwright-extra is a drop-in replacement for playwright, 2// it augments the installed playwright with plugin functionality 3import { chromium } from 'playwright-extra' 4 5// Load the stealth plugin and use defaults (all tricks to hide playwright usage) 6// Note: playwright-extra is compatible with most puppeteer-extra plugins 7import StealthPlugin from 'puppeteer-extra-plugin-stealth' 8 9// Add the plugin to playwright (any number of plugins can be added) 10chromium.use(StealthPlugin()) 11 12// ...(the rest of the quickstart code example is the same) 13chromium.launch({ headless: true }).then(async browser => { 14 const page = await browser.newPage() 15 16 console.log('Testing the stealth plugin..') 17 await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' }) 18 await page.screenshot({ path: 'stealth.png', fullPage: true }) 19 20 console.log('All done, check the screenshot. ✨') 21 await browser.close() 22})
New to Typescript? Here it is in 30 seconds or less 😄:
1# Optional: If you don't have yarn yet 2npm i --global yarn 3 4# Optional: Create new package.json if it's a new project 5yarn init -y 6 7# Add basic typescript dependencies 8yarn add --dev typescript @types/node esbuild esbuild-register 9 10# Bootstrap a tsconfig.json 11yarn tsc --init --target ES2020 --lib ES2020 --module commonjs --rootDir src --outDir dist 12 13# Add dependencies used in the quick start example 14yarn add playwright playwright-extra puppeteer-extra-plugin-stealth 15 16# Create source folder for the .ts files 17mkdir src 18 19# Now place the example code above in `src/index.ts` 20 21# Run the typescript code without the need of compiling it first 22node -r esbuild-register src/index.ts 23 24# You can now add Typescript to your CV 🎉
1// Any browser supported by playwright can be used with plugins 2import { chromium, firefox, webkit } from 'playwright-extra' 3 4chromium.use(plugin) 5firefox.use(plugin) 6webkit.use(plugin)
Node.js imports are cached, therefore the default chromium
, firefox
, webkit
export from playwright-extra
will always return the same playwright instance.
1// Use `addExtra` to create a fresh and independent instance 2import playwright from 'playwright' 3import { addExtra } from 'playwright-extra' 4 5const chromium1 = addExtra(playwright.chromium) 6const chromium2 = addExtra(playwright.chromium) 7 8chromium1.use(onePlugin) 9chromium2.use(anotherPlugin) 10// chromium1 and chromium2 are independent
We're currently in the process of making the existing puppeteer-extra plugins compatible with playwright-extra, the following plugins have been successfully tested already:
puppeteer-extra-plugin-stealth
1// The stealth plugin is optimized for chromium based browsers currently 2import { chromium } from 'playwright-extra' 3 4import StealthPlugin from 'puppeteer-extra-plugin-stealth' 5chromium.use(StealthPlugin()) 6 7// New way to overwrite the default options of stealth evasion plugins 8// https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/evasions 9chromium.plugins.setDependencyDefaults('stealth/evasions/webgl.vendor', { 10 vendor: 'Bob', 11 renderer: 'Alice' 12}) 13 14// That's it, the rest is playwright usage as normal 😊 15chromium.launch({ headless: true }).then(async browser => { 16 const page = await browser.newPage() 17 18 console.log('Testing the webgl spoofing feature of the stealth plugin..') 19 await page.goto('https://webglreport.com', { waitUntil: 'networkidle' }) 20 await page.screenshot({ path: 'webgl.png', fullPage: true }) 21 22 console.log('All done, check the screenshot. ✨') 23 await browser.close() 24})
puppeteer-extra-plugin-recaptcha
page.solveRecaptchas()
1// Any browser (chromium, webkit, firefox) can be used 2import { firefox } from 'playwright-extra' 3 4import RecaptchaPlugin from 'puppeteer-extra-plugin-recaptcha' 5firefox.use( 6 RecaptchaPlugin({ 7 provider: { 8 id: '2captcha', 9 token: process.env.TWOCAPTCHA_TOKEN || 'YOUR_API_KEY' 10 } 11 }) 12) 13 14// Works in headless as well, just so you can see it in action 15firefox.launch({ headless: false }).then(async browser => { 16 const context = await browser.newContext() 17 const page = await context.newPage() 18 const url = 'https://www.google.com/recaptcha/api2/demo' 19 await page.goto(url, { waitUntil: 'networkidle' }) 20 21 console.log('Solving captchas..') 22 await page.solveRecaptchas() 23 24 await Promise.all([ 25 page.waitForNavigation({ waitUntil: 'networkidle' }), 26 page.click(`#recaptcha-demo-submit`) 27 ]) 28 29 const content = await page.content() 30 const isSuccess = content.includes('Verification Success') 31 console.log('Done', { isSuccess }) 32 await browser.close() 33})
plugin-proxy-router
Notes
Copyright © 2018 - 2023, berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘. Released under the MIT License.
No vulnerabilities found.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 7/30 approved changesets -- score normalized to 2
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
Reason
project is not fuzzed
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Reason
63 existing vulnerabilities detected
Details
Score
Last Scanned on 2025-07-07
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More