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,940 Stars
604 Commits
758 Forks
115 Watchers
5 Branches
49 Contributors
Updated on Jul 16, 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
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
detected GitHub workflow tokens with excessive permissions
Details
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-14
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