{"_id":"playwright-extra","_rev":"23-d29a8efdd9381a8af220afce826a43c9","name":"playwright-extra","dist-tags":{"latest":"4.3.6"},"versions":{"1.0.0":{"name":"playwright-extra","version":"1.0.0","main":"dist/index.js","typings":"src/index.ts","repository":{"type":"git","url":"https://github.com/shirshak55"},"license":"MIT","scripts":{"build":"tsc"},"devDependencies":{"playwright":"^1.6.1","typescript":"^4.0.5"},"description":"It is simple replacement of puppeteer extra but for playwright.","_id":"playwright-extra@1.0.0","dist":{"shasum":"0ae356c1c1c3e66236743c2dfacfde18dc9c90f9","integrity":"sha512-is+6C54z3+BTQgih3QsJ4w7NpZU6ITqhoNxbUovnPzg2985nyWXFtWIJXZiY6AF+Omx0bgL6NEhB8VZ5Uza2sw==","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-1.0.0.tgz","fileCount":14,"unpackedSize":141999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsYP7CRA9TVsSAnZWagAAeWcP/24XCa6aWlOhULXdAPM8\nf7Y+u9rxtzCUccjSBrSuMvTJzyrVoLQAdvBqoyUD05sMjQ362ShrR/OMgSJu\nQ0LCEwFpolOFDcdFBTs7pbK01ijPVf53YtNMN8tBoMYpTJpfuyuhAujRjQAZ\nmZAhyDVHBqgwc6wuz+stmFm8xHEY1W6q6/32CRTeN1csBrdpa+XTvm74icBr\no5cKKxF4KuhoM4Zu3qed6A0Mv+GFgZkt9K5itWdo7aHUZGc7TDlaNVCl+eZn\nQTI0S8xyALJjBuIEixTani7DPZDDeSahR3WP0ksHNHmgPQh0s/qH+hIXNpPE\nUaFANF/V67A0eEPKuqX/oKiQ4RQZDTy9A6+yEOa9ipOVMm3u9tzbZjuXIc4K\nNHT9ELyYuw4m7Nzj/Tiv97TgcsLKlBXzyJQYY0qm9G//iGw03D6vuKuuZ+tx\nwu9dNpFHImZb3CT+MPrlwA1LCGaHkJJq8W4w4lJMqJlp4w23VZJ5wwuGIbGH\nfg56YMIMiW6ZKCPzugVRHc5/Y7pKR7LOMiNiHZOH0MIixzigKK1oYpjP06nF\nODoSAJIq+mMMbAVve7E2ZagRQqdDXEcj/5C1jd3Y+vx+8Oac9cGNeGnetpyj\nRfyiTJYBQxD8xy8UXB//r4qQKJq2rTH12Xz7qDya5Y+FX9A+WABVbqI6/QE5\nHkH8\r\n=/7Mc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrtwhFOIVpYkVJwO7JvqOg2CGr69hec3ZPLnLFqZvxAQIgL2zh8rQQwuR1V6pzvfVecvl6JUFSHVb0Fdw8QCSnqWQ="}]},"_npmUser":{"name":"shirshak","email":"shirshak55@gmail.com"},"directories":{},"maintainers":[{"name":"shirshak","email":"shirshak55@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_1.0.0_1605469179147_0.6716964734829902"},"_hasShrinkwrap":false},"1.0.1":{"name":"playwright-extra","version":"1.0.1","main":"index.js","license":"MIT","description":"This is a placeholder package for the upcoming `playwright-extra`.","_id":"playwright-extra@1.0.1","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-VzVSagT6eu8dOxt6ocjiErK0vHLfOPzjGzwWGPNYNxNmZ+rVSqAF/WNXQ1mYBl1cz+sYmJlbyIWmCppEyUkJOQ==","shasum":"7c3161f16c301db151430df1927d2f9341ebc301","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-1.0.1.tgz","fileCount":3,"unpackedSize":396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsoHiCRA9TVsSAnZWagAAMZ0P/jx3k4J5F9v371GXTPfk\n+atCfo1Se+DiDab8oY9mx5pBhirRUBDEa67XIyB4Ma/00W0xuYsVJeAKZ7mn\n9MX7sYPfGIFRopv961rSFmDBmnSgQkQ8StknCpXLjngWeMQqHiLC5D2gKNMU\n/LNjT59zrF0IpYRDlQ8hx4T0EwFXV+rKdHQARB/3mZJBeA2aOGJNNrT2q/Vr\nYGAe9nNL8XU/3kNu/WReKAxNdWJ6Y/jIQIq0oLmS2u3gz528fvvvBPAA4iNq\nBLH/aG0BfNHHtdr4D1H+2h/llh7ViqCHltcu/kOW97NnJkTqZxUblJ+ea99l\nwZz8lvJIWI5F86sXGITW25DqovSA4w0sTOwQfYUdN6OZlSatOzWMqJ2QrOIl\nHFnBJqiCCDgU3jhGLG7sFOQA3bZnShbgZb4883rib8A0mD8xGmAAk8+VEINq\nGqtNFjCHIwz6gKmnjjsgQHkyQr7l0DmKTEK/C/Ry76x4VKZs3hsqW1LXlmnr\n2ZO7gjqZD79eJYzcHSPl/YWZFjHR4k7G2fKu1OOcMMWaZC2bwYTrSkwQTHpP\nigge8ASqIvezQxpGQMpnWJaqDbN0lalIhWaAnUVKuo8tjuB7upVI/KJMHzzr\nUkLxi5RvhTbyPlSGt8GGf27yPj2iMA2IjuZKIW/MEE+wAWZ3HHml6PEqT8DP\nU+xS\r\n=36/c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEcdVlhRaHBP14VbI5n7FE1SiSpTc+qF1wpA+LNmcAZwIhAIMIgvuWPIeC/TnWIJd75klkMlusSSQRazvPSa9cQZOL"}]},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_1.0.1_1605534178230_0.9118827299651069"},"_hasShrinkwrap":false},"4.2.1-next.587":{"name":"playwright-extra","version":"4.2.1-next.587","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.587+03bcc08","playwright-core":"1.8.0"},"gitHead":"03bcc0821d16e3f32190471e3e6e30b9f04d8710","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.587","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-LMrzjkjUPwBeBSBVazEusfmTgFYqWk6Yqi+UnxUjkmljFpzPCX/TnV8dyq0GFAOWY4Z1hO41hKML9TIGymt8Lg==","shasum":"b072b77b69f40f69a097d469fa69d4f577f0f2b8","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.587.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIUwBCRA9TVsSAnZWagAAw58QAIuzQCDjFNxn4TX4Lj3Z\n75Bnnsd3anWcNG58VlY9KZkQrLtdIhLR9e/FYoQDfrt5nDTPj8fiwK73JPtv\nWQOiIKPjGoXkYOctFmXenZ2bN2mAAyg2FSO3nvs9YtN8Yv7jU3mwJ0F7q/18\n0uwpj2kli/O7+E+oSLATYmgCJZu6snIqfosU0oQpDfG2nM+IOCdveRnRAlRt\n4MKvhxM+EzZUvR1X1nuIkxgUYRmuM3pRkQoGkxNw6cRoG37OnWIAm4DGAaN/\n2pwabc6VIFgviEQY5P6OAtajn0p0efVFVuqA0eEU0rSz6BLxgGJStrwPUrGM\nHzIhpkkW0kncvZb/vtOjF9wAxkcw9zbQ2jYfdCa/ounjpjqX5RceaxfIytLj\nlNtF7r6qyqoPsa9TSGK2qR2kNAWqbEGdiGkTDhzULLDvpw8GpsL4lH7FrxYX\nI0/AXgVt4ejgPhtgEMfWl3PbFamwlD9RjLDCCRNse7/K7FQosz9oy1TTMejq\nPY56SsAY4qp6mZX62Lytt0LXWsLmuZl0kKg0Fq1bZFNtFNakNUcMoDdt1ARC\nufOViKGqebyTT/udJ2gtnKKst+w9FTI0Vou4AU6oth1F6B347qyp+5D9k6cS\nvB++Iu0DvoEUtgpof4NSraO3bOvRwyswLrYZ+UPOyUBFVK5/+TAsVv4XCTjo\n3cbF\r\n=lytC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB2JG+xykKi+DbMcr7TxYBbFUQWW19mvfNEJSrlWirrQIhANu+lA8Yg7yMwYwulizykFtc1UrohOAMma73colO/j+B"}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.587_1612794881030_0.8288481771179494"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"4.2.1-next.588":{"name":"playwright-extra","version":"4.2.1-next.588","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.588+b071b3f","playwright-core":"1.8.0"},"gitHead":"b071b3fba1172b6cb435b4f438a0ba109a5dd937","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.588","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-gcxqsRZG+qa098OSxFq3fmGNH8DwxCVF/65D0WJBgYiQ5U8mjWGQGRCulESm6VSXJzAf3xc8ntBqTj7eUEf7Pg==","shasum":"f4a048f6165ac56f2ad39a4559e9db79a265e9a2","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.588.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIVpaCRA9TVsSAnZWagAAF+YP/0XhS4gWnnGL5kmBw4xi\n69xbwacwacULnK4U+5wU5UveaJgzpmYxjgHCgjtv1ZzFRbH4ir8NRmYzqpvj\nVARAJD3vHc3Aeu+RG8wb+LhTL2ahxNt2BALr2MNRBhZSOUOLNzcyS7N0OUFW\nDbCcY7OR55zcmUd9240l9NfhrQ2YUFTj+Vu1tZjai0uEgVzZJ4KzxBTIgHC8\nm1zAxoAVkPQJuN0NgtPu9ZKRnky5GHnLyJiWWRImfPIe0f+3CADP77tZ7it1\nmIJ8Mrh92RTISF8azTWeMs3DGm/+UP1I/djnAUpWCvwnCDEdbO7kQU2DDH75\nu+qVpJFyUhXHvP8RMl2a8z9qh3DBAcHfqgIaF538r1uomLUFVUd1tRR1ytFt\nXFg7j80pwnH1nDcPjoqqwJ7FPpHcmm9fZ3xJZfk6yRCn8vE+3//KJq04HmNj\nMjrIAlnzPDMA4TbKE6WHIvq7ZpcUOzN8VWfwbn1qkjizBf5hP7GmyB6t8YRm\nvXX5ECHMi4v4HnvVyHO1tTJ0XtAQxnUgCL+p9oiZddWgrw/9s5vH697sW9gR\n9/ByMbJRNsp6Dz5XcEgwBF/F5Fe/RgyrWvZVYmiF/qHFyAIv9q7r92Ku/nq2\nD3QyQr+cS0Bx8CtwWMvD+5/FtmEVJW0EVOJag1g5umS+1ug5tG73sbTrqLvN\nJ0QW\r\n=aIaJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGm+XXJpy818CnJuG4GqmlbQN703ErWZ5viWsA7UVCLUAiAJzBJ72Ze4jEc+Xt5gbVOYUSPUjFsjiBtzsxHjM37xpg=="}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.588_1612798554309_0.08740918165646927"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"4.2.1-next.589":{"name":"playwright-extra","version":"4.2.1-next.589","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.589+1025243","playwright-core":"1.8.0"},"gitHead":"102524307a6c14c938130932c3aeb5f1c105b96d","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.589","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-UFZnaQMZklwMT673/MH9GA3KWSF70+ZlwFIcEZ//9JlZtTW3Rco4hl8jOYL410Ltuy7lKFJpNH/VwJRkySok3w==","shasum":"0ecc0892cf1ec36ceb1f7ce483a8080c035a3ffd","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.589.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIVrVCRA9TVsSAnZWagAAPhUQAKGQhO6XzhlTo1bcRRMh\n4/r/4XgWL8FFuchK2LYRwRQLxMMMeSIZKb1eFJbaX9J8mKE0H2JPyIuGKbyb\ns+89oyzsHZ02LIkedVmJiB4OukWXRx5wzduiRWFuo+E4IpbzNMBg9SbhWzjR\ncz/Q7RLgEEzdvZ3QVr1qExl2iCd4cOe/+jNgHtjaqnzcDz8qgoeDyutYuylb\niwNnuveeE2fCv3z+VecP2Rifgb9RO21SraOqvsrbSuubqgCZ+0tsNzDWBsQq\nnF+CZZNEv+vV5cA7DgZhNc1mzS4Oas14vzB5ueLQX1Atxc3jdhTF4YPG923X\nVnF+mxdNaai5L08fOk7EmgkbCg6sX6ttAssaKrP6nIjkq5Ja7PTNZ6zAoZ3U\nj01QvstgeHEXDXpAUpDA1IrVxu5UX81UgZrzBq5e5ckivycegUvp7R3MW4nZ\nZlmVssFd/GZXwzdxlJ1hOsWNFZQ83+IusOwPxs9CnPAhj823ocFkDbFV6Hgr\nog+sYF0GFKkYHo9AbrfTAkpwgV5rkUNIuWU0hK82f73BU/c+AUy4ZfLngi2+\ngPG4tj9duXH1sAGPlWqy48b3WWpLPOSyIsRUUHAG/ntjDaepCaMfia1rWQLK\n3Xx8S51oVLSOy8N+4w6VFPxQFziWUM1sQrY9FPYeQvQJOYOsdRuXDTxjhhSj\nSDqn\r\n=dSuY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7aMJP76WN+kPa1Xwd37cY1FaGHLReN8m2/ZNVJx9JXAiALgCsX5USU4aQZTVqvb6c1+i2nc5kWjsSzYZCyQAT0YA=="}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.589_1612798676508_0.47383141581346466"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"4.2.1-next.590":{"name":"playwright-extra","version":"4.2.1-next.590","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.590+a6ed7c4","playwright-core":"1.8.0"},"gitHead":"a6ed7c43bd5650e2928316c19bb5de8a69778ddb","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.590","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-LBU/eS06iiApQKIj7W9LLP02Yg2NFB+Pn5HBbs/SuoxXN3V2vfupTrSjRvzoYwBr4av9cVUwZBA0PqkMzGOdFQ==","shasum":"46a5ed0b09db4f94467d20664d34cb302398f4c4","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.590.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIVwKCRA9TVsSAnZWagAAZ50P/1ugcNv9elA9U71VTmA+\n+d0uAOlafIbM7hxlym5+1sowMYeUkVu4AM9lriylYdA+UUWkSjzbmW7QmUpM\n6Rjy1tutGd6in0dM3hWDyWmisUYTt3dp+OIRlRrduaSyyV8bb0ereNoOAt8O\nNEDbTVuXHlFnie+C+lCmUTxwU9TIA6p7HHf5xgd9Z4Exw+QAOsXlhWs+IsFd\n5gWjosj0XNvfhi1BnuEvV5yF4rR3vYDe3TvF66/M6/Fd5iD/kcxKcKSmP86t\nqI2iO0rBkL9QtC/rX41FVWIzkZREaHvSeF9Ke3xYpNDg22LkwjH6DZOjs4yj\nA7O7MpWCK4bEdYiLdbszyT+CBuKQWUrW2WkOlukQnjAwJgHD64jRwL5zqQlb\nGBmAq2oJhbdYy4HSGByl0zvKy7Kn8tYWo+0YTMuv6HtG2NvRcxA8lwSV/7ck\nxyTl81rZj7S5TCOAtsraKQ7DxTvqsWoKR75WNwwm7fDsgpdhUg7MtIVmUY/u\nb7sn6nYvICC5sa4tPJ25Iz+PLJ3H20SUocMt8B9IHA3ATsqAZdHxpQs9fz2W\nXIfCUsVx6eISrwO4IiCSZFl37F5VIdYgngZXQNEY1ZxUKiX1bsR2zuMuAVrN\n/n3pjvLMbDXtqASgFfeVKe4//kYovnf6pqvryefxv1ub6bm5xB6goPr6tUbC\nvDhw\r\n=LBWt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN4fwCH34iDxqb4tMGTkuCJBJjiejCweqep/YPkYzwHAIhAKU0sEev1Njhfk23xrWOe7KLOHTO7GZSK0wij4qr0SNR"}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.590_1612798985912_0.3050951491358873"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"4.2.1-next.593":{"name":"playwright-extra","version":"4.2.1-next.593","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.593+35c62f3","playwright-core":"1.8.0"},"gitHead":"35c62f372672ee1a329492257766a6deaf292192","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.593","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-9Ovx7quPXR3VgvmJuu1A3b/8gIdi5NlfmN7RiaDGJSa5Kf4nPDim5Hg5elWt3OscfMx5VTyMf8TQQ8yjS9Llxg==","shasum":"82d23464b72ae0b535b18091e71c9398a1bec5a9","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.593.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIV3WCRA9TVsSAnZWagAAIdEP/RfdIaGx9nh4bM9I4ePC\nceWvlfYeHceK7CCG0/k8wSXDeNgYq/sAc2EDlhbIVQaS2ecfl5likxMkRoUu\nS8sRtjp/jcKVUx/kZLDEKTXVK8w4qeM4XrAiw+ZPoszvVH4ry8HzX8Z4GpHm\nzpNwKtPvCUpahctMc04Wy/niJYwPaEIJf0GX6dU68sbsbJ50kHI+nTq7kHEB\nAKrTCQjZByLCWfcpLUU1RtQXKveNX1PChvA6GS0EANhZEtbzXlkfZYqlKV1B\n+KFHf7IRfzufFN18xCKBEzjUZJKnr3qTzr3uE+UQyKqIdbKZMVFL84MsoB9N\nY7XIIUw9/QUetDpodu4bwhnU5vhi+YQdSMv6DOfAFvu+p+HXQiUiFPVEu5TP\nSfHx0mEhtTGYO0EApt5SgU49KG+igmmKe4jIesMKPAsv2A225GJU1/QuQljb\nnLtOF/2uz5mzg7wrH6N+KERV6IvIdtao+JYZo1D5h7LfIvB+qz21EP5VgNVs\nrwImeIEqAGsTH5X/47SADBIEbno3DdpNdcuExgqDn/kRHqyzRemZcDpPU/Ss\nuGT5/ecZsmMrmVMSJBVZQvmMiZIbRqLmDirQ877vR80L6xvhWbypQKdvccM8\nCMapLRa+l0UN5KBknOAy293euBnCZdEpcZgjeRFU1PtdjAPLK/SWEk710h8T\nYB2r\r\n=yZ6b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWIeB6oWG4pLsNqJcbD4u872H0fUgEYquBqhNAz37n1gIhANHHJXBztQb/IWuXlHGTRE9XNzzEUFB0qwagPLdNoV09"}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.593_1612799446453_0.4062713153223749"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"4.2.1-next.616":{"name":"playwright-extra","version":"4.2.1-next.616","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"documentation readme --quiet --shallow --github --markdown-theme transitivebs --readme-file readme.md --section API ./src/index.ts","postdocs":"npx prettier --write readme.md","test:ts":"ava -v --config ava.config-ts.js","test:js":"ava -v --serial --concurrency 1 --fail-fast","test":"run-s test:ts","test-ci":"run-s lint test","lint":"eslint src/ test/"},"keywords":["playwright","playwright-extra","puppeteer-extra","puppeteer","automation-extra"],"engines":{"node":">=8"},"devDependencies":{"@rollup/plugin-commonjs":"^16.0.0","@rollup/plugin-node-resolve":"^10.0.0","@typescript-eslint/eslint-plugin":"4","@typescript-eslint/parser":"4","ava":"3","documentation-markdown-themes":"13.1.2","eslint":"7","eslint-config-prettier":"6","eslint-config-standard-with-typescript":"19","eslint-plugin-import":"2","eslint-plugin-node":"11","eslint-plugin-promise":"4","eslint-plugin-standard":"4","npm-run-all":"^4.1.5","playwright":"1.8.0","rimraf":"^3.0.0","rollup":"^2.34.0","rollup-plugin-sourcemaps":"^0.6.3","rollup-plugin-typescript2":"^0.29.0","ts-node":"9","typescript":"4.1.2"},"dependencies":{"automation-extra":"^4.2.1-next.616+846b2f2","playwright-core":"1.8.0"},"gitHead":"846b2f283f7c0cae6dfac5a2a1761df117973e28","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/berstend/puppeteer-extra/Test/master)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](http://scraping-chat.cf) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n- v4.2\n  - Initial public release\n\n</details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\n// Note: Instead of chromium you can use firefox and webkit as well.\nconst { chromium } = require('playwright-extra')\n\n// import and configure the recaptcha plugin\nconst RecaptchaPlugin = require('@extra/recaptcha')\nconst recaptcha = RecaptchaPlugin({\n  provider: {\n    id: '2captcha',\n    token: 'XXXXXXX' // Replace this with your own 2captcha api key\n  }\n})\n\n// add the plugin to playwright\nchromium.use(recaptcha)\n\n// playwright usage as normal\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n  await page.goto('https://www.google.com/recaptcha/api2/demo')\n\n  // That's it, a single line of code to solve reCAPTCHAs and hCaptchas 🎉\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation(),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n  await page.screenshot({ path: 'response.png', fullPage: true })\n  await browser.close()\n})\n```\n\nThe above example uses the [`recaptcha`](/packages/plugin-recaptcha) plugin, which needs to be installed as well:\n\n```bash\nyarn add @extra/recaptcha\n# - or -\nnpm install @extra/recaptcha\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\nDEBUG=automation-extra,automation-extra-plugin:* node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\nimport { chromium } from 'playwright-extra'\n// if you need types as well:\nimport { chromium, Playwright } from 'playwright-extra'\n```\n\n</details>\n\n---\n\n## Plugins\n\n### 🏴 [`@extra/recaptcha`](/packages/plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- First plugin to support Playwright & Puppeteer, Chrome, Firefox and Webkit.\n\n**Note**\n\n_`playwright-extra` is brand new, we're in the process of porting over existing [`puppeteer-extra`] plugins with Firefox & Webkit support. If you depend on having a large list of pre-made plugins available we suggest you use [`puppeteer-extra`] for the moment. See also: [Playwright vs Puppeteer](https://github.com/berstend/puppeteer-extra/wiki/Playwright-vs-Puppeteer)_\n\n**Write your own plugin**\n\nMaking custom plugins which work with Playwright and Puppeteer is easy and fun. It might even make your own code base more maintainable and modular. Head over to the documentation here: [`automation-extra-plugin`](https://github.com/berstend/puppeteer-extra/tree/master/packages/automation-extra-plugin)\n\n---\n\n## API\n\n<!--\n    Documentation is auto-generated by a custom fork of documentation.js\n    More info: https://github.com/berstend/documentation-markdown-themes/wiki#documentationjs-with-markdown-theme-support\n    Update this documentation by updating the source code.\n-->\n\n#### Table of Contents\n\n- [addExtra(launcher)](#addextralauncher)\n- [chromium()](#chromium)\n- [firefox()](#firefox)\n- [webkit()](#webkit)\n- [errors()](#errors)\n- [selectors()](#selectors)\n- [devices()](#devices)\n\n### [addExtra(launcher)](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L23-L25)\n\n- `launcher` **PlaywrightBrowserLauncher** Playwright (or compatible) browser launcher\n\nReturns: **PlaywrightExtra**\n\nAugment the provided Playwright browser launcher with plugin functionality.\n\nUsing `addExtra` will always create a fresh PlaywrightExtra instance.\n\nExample:\n\n```javascript\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium = addExtra(playwright.chromium)\nchromium.use(plugin)\n```\n\n---\n\n### [chromium()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L55-L55)\n\nThis object can be used to launch or connect to Chromium, returning instances of ChromiumBrowser.\n\nThe **default exports** will behave exactly the same as the regular playwright\n(just with extra plugin functionality) and can be used as a drop-in replacement.\n\nBehind the scenes it will try to require either `playwright`\nor `playwright-core` from the installed dependencies.\n\nPlease note that due to imports being cached this will result in a single\nPlaywrightExtra instance, even when used in different files. If you need multiple\ninstances (e.g. different plugins) please use `addExtra`.\n\nExample:\n\n```javascript\n// javascript import\nconst { chromium } = require('playwright-extra')\n\n// typescript/es6 module import\nimport { chromium } from 'playwright-extra'\n\n// Add plugins\nchromium.use(...)\n```\n\n---\n\n### [firefox()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L57-L57)\n\nThis object can be used to launch or connect to Firefox, returning instances of FirefoxBrowser.\n\n---\n\n### [webkit()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L59-L59)\n\nThis object can be used to launch or connect to WebKit, returning instances of WebKitBrowser.\n\n---\n\n### [errors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L62-L62)\n\nReturns playwright specific errors\n\n---\n\n### [selectors()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L64-L64)\n\nSelectors can be used to install custom selector engines.\n\n---\n\n### [devices()](https://github.com/berstend/puppeteer-extra/blob/7a9082f9837f2403099e2181d639aa0065c51ba9/packages/playwright-extra/src/index.ts#L66-L66)\n\nReturns a list of devices to be used with browser.newContext([options]) or browser.newPage([options]).\n\n---\n\n## License\n\nCopyright © 2018 - 2021, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.2.1-next.616","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"dist":{"integrity":"sha512-NFxCvLSOkyXByFUfff0b4hwWRmHDTNB7YhUhXckWR2ct9p1OyvBZrHQfesv8eq43iAqNwALWulOGDtKxPvrTlA==","shasum":"8efdaa300243d0d5ad071de4bc30b9b519b67560","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.2.1-next.616.tgz","fileCount":10,"unpackedSize":72889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIkhRCRA9TVsSAnZWagAAUQMP/1Z9gHNILsKENJjxoHar\n+yg5+1TDeNyfg/LgfLY9YoZreoKChZPVQ6fce8SrVpXu+yTz6G6lU9uci+6/\nnRrurzPz2O30AFYPBXrV4jvqHsanCm4EGYkcvnkUJmbRnbs2Y7Wv9cWAhTs8\nisBgRTsDDNKOPAZPY/BHg5j9mO0Y0am8FbD5npEwkv0a1TPbp8Rtc2FDXN/G\nB9ZSZlNLepBtIE0gW6MpsWZSMWPRkpx38DQYQY4S9k8TGutJLh/Or8KGlLGn\njZDXycXr6EFoiVR2pAPs2zrblSIOLnwBwXpHL6TeBhAhfCivy2Ppds5sbs9b\nqKU08MF36YznXHkL6R/IMbeqMzGUZI/qmNdDeSJxn7U2KvDGV4St/q3sTMYs\nkCSXreoKt5fZFLSgX135AtHoLAGxOHUCV1LOd97MHqltTlUr/9hVcXkuMbj8\ncY4Zd/4xUF/E3sS1Xmqit3mBxOKQWicPZMF1tIq4xC0Oh2HMZ7rc4WhC7BVV\nR/7V6Vr60XbUZkttXPLFxcnef9rF4VM6DTWV586Zm80EIYlT2l2SfGcaVjab\n4Shl5foh27hMZ49E8FYFdAL5FeBSXrwWBBuxpHWJWgFJVXEk+EblOepLFFHq\nc31Kr6xdBQ2kM35uIXGqIpIEA0/du175grfqMj64IBAEeb4h+DkjdPdGX11s\nbJqG\r\n=9yig\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqDEIBU0puxuH0Chmqcna2Ydbh9PO5Zy7fc/R5+KmZYAiEA4Wt8pY8GTxRdNXoWJZoX5ZQW0pDDTHIsJ5eiLFHpNrw="}]},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.2.1-next.616_1612859473187_0.2548299199581068"},"_hasShrinkwrap":false,"deprecated":"please use @latest instead"},"3.3.2":{"name":"playwright-extra","version":"3.3.2","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=8"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"^1.22.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.0","puppeteer-extra-plugin-anonymize-ua":"^2.4.0","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"gitHead":"48e2996c3ecac75b85f4461267a1a51f954f3caf","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@3.3.2","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-MofCdHleTCXbluurCO5/ko6KsZcgylH1x1FJqfr68QwJKxHrdhczBSaDjX3GycGRyUFdxQBREUp0O9hpgzczSw==","shasum":"4232fc97ea9e3725b39f2158edfa0cc20aae851b","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-3.3.2.tgz","fileCount":26,"unpackedSize":317388,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8h6dLR6vHAuEAhEzBgjPJnQeVUjtfzTQ4ipcjSfGiUAiB6a+oEP0gGNXm7DGcd6S7+uWv9cmO0ECv5VYVMrIFDpQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwbY+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqxbw//Q4tHYW+ps1ZjrW0MxJBKemoNa5nSUkg60eNGl6DpDOiVNoQt\r\n8zoUokbRM+gy6d6QGv6mEUWkvi8/AtwXdyabAIbUiq5kcqvVHpAQSsaVfNvV\r\nwR6hiLnoSKDKq+qwUlgXPEZJ9GYIbVH2Vz69rqOWfATkXs+ljzc/e/Ww1D5s\r\nkRGkAUxDG91as2PQu1cw9bH/loKvOU/C67OVH6b8n5a4CQ6mH5XI1HeJc+Gt\r\nEN2CAUFdmRZb7EDVuUd31hPkkCmarVWCyF1FZf9NB88/Cnh7JXxbk2GrLHr9\r\nAryv2V1hSIQdG6MDGaKc+Co59mgZuAAey1ZhkfirwFFsRWOx5kxkhGxlEc8N\r\nRXeFlEUTDeVCKp0RR/MW7XM6fIt5E25bMv2hVRl1uznnY/mW4alxGpeg0w4A\r\ndhhGVTO6seQXkhkgGLSwRQL2KErQq9FxL9Hn7YsNi58B8T6P1uc6ufBckR/m\r\ndQryoU0kG0sNbEQTWYTsU7vt5sgWyomiMVkhT4fda4fDSMvMkH+v86F2Aa/r\r\n03HWlLvwOl3q7PzPSCr2VKirjEJpsK8HDNgiiyqsbAJ5az2Y2xd2HI1S69kZ\r\nyoG+KBeAADjAqyDiwDX0RtoAO8uxkg32NmB3OgwmpKZJm11bu8VHnu+wypOZ\r\n2s1jiqHWyUKCUk1PdSBzYKHLGg0nTSsawOI=\r\n=hZph\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_3.3.2_1656862270497_0.7864840992766358"},"_hasShrinkwrap":false},"4.3.0":{"name":"playwright-extra","version":"4.3.0","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=8"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"^1.22.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.0","puppeteer-extra-plugin-anonymize-ua":"^2.4.1","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"gitHead":"5b39abb432e3d86675a899f3a5ba351d11b7b7ba","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-/Hec3BmYMY/GznBo0ZPsSqm6IHil7jInxLz+9/UnBBC5Ozh2abVNnv+vYNJ+JKKRVtiKyHCrJpKRibJ9uribZw==","shasum":"f968c3a92d78a93d42898df55f46553476552107","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.0.tgz","fileCount":26,"unpackedSize":317466,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC8ou6yxFDGmT74ZJ7VcLU4S0tRbwGRLck+Hx82z6Y+GAiEA8n46uYz8MUOyrEFQaUiP1PO1TnHXTfnEx2pS/71ZQ9E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixPXaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrbFQ/+OjPTh2rADL79JvZhBcGgmvcf3flTinqW0CeRRj9BQrkxBjPr\r\nme1BuCLcQqGQ4DSR1ASi3KfMOoHzHwmNzV0qO6EhwvZDcHVB1SK3g9ukyCS4\r\nMHdsczKjisUF7yT2Yo+ZxbgTqbFrCIp5dvucQjjSuBZrvYeoj2RT/bn2uZ2D\r\n/0M/Ul+t+bCIbW/qZwgqcNZL/dF7JXdYBjc/CxzfMooUqd8J2M87jsj4vEaf\r\nEWvjhFifrdJ9w6ZW3qSAryz6yU3KMIhFuQnUY8xDpVkDpGAiRIE0w1pDXZGD\r\nXX3NCx7QWrkVDoJDm9qzhNUqhq/s5lX8vKFl2JYzTQ2wcvec2gjqvd19suW6\r\n/KitcMVy9Uit6VZihC7ai9nhSvbMjgjrnpcyJliacFTATRl9+ALbjebS2aqB\r\n856p4sxJXFVF4cY4MiYBpXLwMAWQrwH539Z+QwqzHsL+9sQjxQRvJ43eAOq/\r\n3xfkkC4AgpO6kTNWT3eFU59ppdIIDklWL29Ut3u+m1EBmdzP1FWtCh10WtYR\r\nQasxv5WAGQUBW3JvmqwPVV+CRg7ZiFk99TlctNy7SnrfJKLWLLYeXIghQ42Q\r\ndH37W7VcWe7aeH/kpEJfNMnaF+oJe6EyvinnL8L7SyklNI3b0/YWyJ6dt+L3\r\nmzqDkoVRC+bNXKbubA0Eoq+rnC9lE9bypRo=\r\n=RgAn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.0_1657075162275_0.4559377364856845"},"_hasShrinkwrap":false},"4.3.1":{"name":"playwright-extra","version":"4.3.1","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"^1.22.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.0","puppeteer-extra-plugin-anonymize-ua":"^2.4.2","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"gitHead":"3adeb3df2c204892be51aeb3cb18324fa3dbb93f","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.1","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-UAzmEjv3cG/glCz8Jk9cF9HYrTv9mJvs7Y6Qqq677Q5QQmi4SWE+kFT9bENLya1Ui9W8jFO437e8hkHf8c5l+g==","shasum":"055a7f66c313a1f2411f2b872c4ef647e43d23c2","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.1.tgz","fileCount":26,"unpackedSize":317467,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2sBuJ+UMIf22ENsAIKTEMKBIegvIiCWn72qpAW1HJWAiAg3o0cqnSI1O4olMk4dkSB05GetHnpYQIxATzPGAixaQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixwsvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqd0Q//fK8J562JbLV0wvdN3k7rh+gzaM3eCAZao+BYYo7lm28wlS7F\r\nE7vVRUJOywUynSPkv0dDBgNwdZEIXFkWJAdt/zQXlmYNn3N0ewUa5BJYoRd/\r\nJicCodGktuvNTdgioOn1WQvK1sovQy6UlNDw8tjEs9n8LcAnPt++DSewkMq2\r\num9A6LMIkPikX1wzmh7o7ukGT9EgBuMOY0r2iejQ2dMUTvA4E3DrhlpBtbbI\r\nY4DCa9HazQsbAR0zb1vtWEK2h+l+RAaTI+I4XXK8ds/B+anBWd1ZP8HQ4Wlz\r\nXq9O57PljI4BEqIdkySbyU8em+FcjBmrGLsyr6zOaDyPI8ptxD7nyF/PKOcb\r\nxmkxDn/pW+z230PrxrJ3h0VnAOwGdptkiADntwoQhY+1oFl03Cr1htP0SuCS\r\nvFQcFPbRmNPKCfDI6sdbkAcX5Gb2yEOBEO/MBAbw30ZSZWRIpTu3OQKaRPPh\r\nW4edod5m0pXLkO5AZOYbBGhfA3P2yn+Wk/a619jdw1hTcmg9dZGVPDj34njg\r\nFbUGJgl1G74do/umNYY5guqpqirSmYRl5iUa0uAWJuk9tHQKCv30zn1dF8Bu\r\nDsUEL77baXPgniAjALcqMWTWDbyrU+4v/o+BvQgfJmrTmadLDh4nWVX7Iqj0\r\n48JMH9c+cbosmTiU6HcqIf6vVa60asgtupk=\r\n=3COV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.1_1657211694833_0.42130334511302103"},"_hasShrinkwrap":false},"4.3.2":{"name":"playwright-extra","version":"4.3.2","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"^1.22.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.1","puppeteer-extra-plugin-anonymize-ua":"^2.4.3","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"peerDependencies":{"playwright":"*","playwright-core":"*"},"peerDependenciesMeta":{"playwright":{"optional":true},"playwright-core":{"optional":true}},"gitHead":"0ac255cd0b86c5da842bdf323f9979fa2fd3483a","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.2","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-MXygkzKNHMJqdtvYUyDoBJULJXOY0IxPcz+qOIG7QDgHH2d1wp7umPi7jMcS7Us+EAwCFtIo6ZDaw2U7837dDA==","shasum":"98a878613338ae28578c844ed5909e91c6b49d6d","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.2.tgz","fileCount":26,"unpackedSize":317683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZDPj6GRR0WYxaClXWIr8JvqoY22VcFpu+mQN0qIDMJAiAqRsmRxW6N1TSeJB9tMuS46pVD6mD3sZjROpFLStAwBA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixy2DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbWw//VASGkkNYs9yBZXmBKRIZ/i9rXB0+h7Uz/jqKAQS5G11T2cKZ\r\n/S61008wIsHhYx9gu8nTyQ2ftHDDhdXGML6ITA5zJDwwSqAjdNd9F+F/wqRT\r\nB4cD3LWAK9ezv7qowTJy/chMCQvNth5+q7npXpR4wTYk3H38YHDewEGzoIPk\r\nthPY19anSAVo8PSVMfcyTY98+JDUKTJ+C2qrVsEMyolPV4NWFXcUnWg47rC1\r\nof0mKo7De3nNTOZ1SVCl2BYSiABEsrXcFYtJydPJHnhLWAnD7d+sjmvHfSqr\r\nxaBZaNNF9/ZcSropOJrEtwQaafgKK0hnUoCYV6BjiLRHUH7SzIy8zQvX8Gh8\r\nSIb7aFkYm7HoyZ4+0kgdq1tJAZfDHh7HCdIvIoySJAcBeaNF6EH6/8azo6CL\r\nKTXKkqFe7ZEJ5dzkmUlmZwQ3uPSQBHkgHCwL1fQmpd2zJZeIv/Z6e3e7QrOz\r\nUT4V/R/nC218W1bU9dtXvaL9MBB/okiQiQ/Gx/7jujXEI4e8Z4W7/W/25Mmu\r\n43Vwj23/tdzcpDfyuXpc1CfSxKjambo3lpwjGNwmdUzgbzBzuQY66lwZgqNh\r\ni3V9g5NsH+nctPycIsd3UKkH4GbTs0cpLSRe9FSQlZ/+jbqpEFA3jjAC7dd7\r\n5uKlTyIcZd6m2lYiTuZudeBgPp6O/GWfti8=\r\n=X3+/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.2_1657220482694_0.21483766524281744"},"_hasShrinkwrap":false},"4.3.3":{"name":"playwright-extra","version":"4.3.3","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"^1.22.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.2","puppeteer-extra-plugin-anonymize-ua":"^2.4.4","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"peerDependencies":{"playwright":"*","playwright-core":"*"},"peerDependenciesMeta":{"playwright":{"optional":true},"playwright-core":{"optional":true}},"gitHead":"26f15d2111338d63651beda85acbedff57356d5f","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.3","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-FpFmgTrrdcJAeFNJspm2GHLDdufc4eLf8+GV3ms7z/z2zlL2t3VDg0jIEDWaQB/hdtthLrX36yOXTCqDQgDzhg==","shasum":"9bd2b66f5d55a9e53f8896a39a93f9bd94ad0bc4","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.3.tgz","fileCount":26,"unpackedSize":317683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXDPUT+7sUQQpnyr40nr5NHsXhG91mEYRfjBOp0Q0AiAiBzkteTRd/H7nohb0in4unZvJCTHCAsrm12ViyQKyvbtg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix2V1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcMA/8CjGP5AoMYtszOeg3pbzUWpdeejpK87YCKRKE3G7t6V3SBvY6\r\nXS15DlrpY4LpjV8TiHiIZP8V69kXI09At3Z+Rdkh6z/V0GRHiqd+vJlN4vqW\r\nZnRmcex0HZ6nwiABz57qL+NudiAKyPBj6VXuvn6nKn+rlC5o+ahzibyg2rAx\r\nYZO4GLRTn7LpNR8WFvlNSP8uENWaiYkNXOSlKaSl7ye8kv5FnIV/AzCg3wu/\r\nu7XfgVJ7EDtY6GehP/Jl4tMWu4XvBJS0Ioqduqbtd+R+C+yo8KqakNp7txTU\r\n7wHGiymSTavRgRXNE8azFnim2xp54wy3qQmjKudMy5lHeWjkGUQQrkyqee2d\r\ncrJEXdgtOh5ogAenWijgH+F6UkktKebUN6mGSVc14Yn3i1A+wcKw3ZbUt87L\r\ny2Tn6riN6lmNtUhTXIBoKfAAldEWzYRIqgEGtAe401MBZaqOzwvBoIAYfQTv\r\nnyCKzjBKABxE6O9xY31zirSNQUvaa1tbwpNjswaqeZBUYTyUNqd5Sp0fmViy\r\ndUTLvIavmw8FOKKoLgcrbUh8Fj8IWvbtI70bt34o0bGnKj5M5E1tYlbkqpUX\r\nQE3x3P+XQrkITtRdA8GL2avauaWmI704muNZHZ8OTVqYQtd6L3JdL0Qw9DCb\r\nhYlt3utUJCbnYdpqsaWsd8vVqhulKYf/I/c=\r\n=eWQa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.3_1657234805103_0.3818769142678822"},"_hasShrinkwrap":false},"4.3.4":{"name":"playwright-extra","version":"4.3.4","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"1.24.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.2","puppeteer-extra-plugin-anonymize-ua":"^2.4.4","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"peerDependencies":{"playwright":"*","playwright-core":"*"},"peerDependenciesMeta":{"playwright":{"optional":true},"playwright-core":{"optional":true}},"gitHead":"33206b0aa1d18e791047263ce654b806c45ba0ec","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.4","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-OEWGHksQdbZexUYmNwu90AMulYv0fZenG/rvqa1Ip0nxM8T2LuBzNVX+PZldJu5YAWJfulqz1XbhM37w2Ihpiw==","shasum":"c966a8bca94a02ebda3c456eab332d723e0f4b94","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.4.tgz","fileCount":26,"unpackedSize":317682,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtCXrqYn08eil4zcZJkJIVffv+LiWM/Ua8C/yNWASqlAIgV7JPiIVxdUXhMTeSlQLBVqFW13+qvt3+odQ+4KV7kFI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8Qp+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyShAAonXPa6WvJp4nI2HIhxjZ4DyZUQ9Mpawo3Bl9Va/22Xg/3xKU\r\nQlpM/xuY7llFpoSSdkbqsfkfiPABEgwLP2Ezx17ohKxLtvd/wqqupFlskAmm\r\nrTTMFdjiVqAQr7cxSQuf72EnolB98H8FTRpc7elNTmKJr6uvmETpbRPtNj1z\r\nha8fCePcCGxEMZ7CsoqtTEbXUiHgYdWZJaLQTVTPeHmSoiNhuLVRUgrXkw0Y\r\nTWWV0p3OMzb6rq4xn9xxheiZrU7w9qfgyyYKgQgLsFofVLU9cxvkFtudWl72\r\ndk7YXHd1Mko+mazHGqzXWj3y2pTR4C8ru0kwb+2IwsQyEt9gw2fEl8P8lfAl\r\nPM7yDdd+cFHlT7U1W+D16kJ948fcBGITo9//x1wCW4BX4BnPQc872R1mkBer\r\nJx2OODif2KOB8Chpgujk8SBYDUlPKlLSfptA8lboIQVx/RgHATXL8L29vADr\r\nJ/XSUgY+SctdfHY8+tMB6aNVB2t3roZisCBbHM7q/gib3RiQfXeOXRnwvTq4\r\nGEw4/PaNtx5uguzsY7j8hPJxvJ622oqzBlnIgWqK+bkYPXxQR7M2RgQUiZNQ\r\nnqhLOZ6+f61Y5gz63fHTZJpsNcIPme9xnLgVz3RNmyhECc+G4qD3MEvqjFN7\r\nquTUJU8Wkk02NbGkKE/+WC0vxGJ6dOSk8XI=\r\n=iOul\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.4_1659964030049_0.9197880430095327"},"_hasShrinkwrap":false},"4.3.5":{"name":"playwright-extra","version":"4.3.5","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"1.24.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.2","puppeteer-extra-plugin-anonymize-ua":"^2.4.4","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"peerDependencies":{"playwright":"*","playwright-core":"*"},"peerDependenciesMeta":{"playwright":{"optional":true},"playwright-core":{"optional":true}},"gitHead":"70cb704bb6f448c8c9a999d2dc2ac3a2e95a7af0","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.5","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-YPYsoJFK46h2FqNpD8//ucutSf3c84C0KVYX19gUr0rErajrWZcnfoNfm/okzc8z6/EfTWS3xWb76jDbYI8Qew==","shasum":"696512cc2c0750a5e2d420522152b8dd46ba9fbd","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.5.tgz","fileCount":26,"unpackedSize":318019,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDH5GExJ9fZX+HmItrq/B2SBVxz3TONGD4/sI7V+BbYvQIgDJANFiDENa/HZweVb6IQiG0I70lnbc4QuR3L9FvBcD8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8RcKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp02Q//aPhH4CiktkUUeyb5c7Gf897KD2UP+Dj48cTAII9e3a4SO8rf\r\nOM1q4xI/2MVwPPdmiRJyzizIGLcKO/OA2JtFzcRN3vTXeTlvMLupPNPlZegN\r\nGN43jXXjTYSVhP4TSx627KDK1CufuKEOeHVv9/PaDepmcn2oTjr+lvR0cCkF\r\nEp8NY1d5tlDScWb1/qtsIWx5vRXUNg60oS8ngbQoAtcRjl1zWPnoHLKGiLhm\r\nXSJzNLoMtgbJILBSPcNWCVniB4F+vW+Rd/aXMlDrgSy0m2m+Nma1eyAGMaB0\r\nTaq8Rped1I3C4Yb04/N4rvAEWP4KWxouBIHFDczP57m7+NDuhuquTGAoci7Y\r\naVSDmAmDF6cGpEG2eGBzYhZU0Xv5lfRE1MGuU1Rs0hgZNc/CNw40Xd7pctkt\r\nmiaEL6kIKXikpNVGTH6+2okCxQ6jmUko9iFxQInIPKcMUQKQdIpWNc7vgy3M\r\n8dBvuYUyBBjtAR5IT//hyhj7Z7Fh4QVorqICERCFsf8xF+2D6olEunzMeOon\r\nxxNyM+svPDY+/Q7ltICfr4rwmKvxtiJ8XcLxAH2Cnwu513Ausgy9R1FQQDlz\r\n92YAPd1Ep1e4bYgIKhB5Z8dmQhETaYgkjFQ8MPE2E8qwWcYdEf3OH8WyqH4R\r\nHBKwxCHJ3QX9MK0I7bosI4ov15Y52Mq4YsA=\r\n=Xuem\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.5_1659967241935_0.1485224773891105"},"_hasShrinkwrap":false},"4.3.6":{"name":"playwright-extra","version":"4.3.6","description":"Teach playwright new tricks through plugins.","repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","author":{"name":"berstend"},"license":"MIT","typings":"dist/index.d.ts","main":"dist/index.cjs.js","module":"dist/index.esm.js","scripts":{"clean":"rimraf dist/*","prebuild":"run-s clean","build":"run-s build:tsc build:rollup ambient-dts","build:tsc":"tsc --module commonjs","build:rollup":"rollup -c rollup.config.ts","docs":"echo \"No docs\"","test":"yarn playwright test --config test/playwright.config.ts","test-ci":"run-s test","ambient-dts":"run-s ambient-dts-copy ambient-dts-fix-path","ambient-dts-copy":"copyfiles -u 1 \"src/**/*.d.ts\" dist","ambient-dts-fix-path":"replace-in-files --string='/// <reference path=\"../src/' --replacement='/// <reference path=\"../dist/' 'dist/**/*.d.ts'"},"keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"engines":{"node":">=12"},"devDependencies":{"@playwright/test":"^1.23.1","@types/debug":"^4.1.7","@types/node":"^18.0.0","esbuild":"^0.14.47","esbuild-register":"^3.3.3","npm-run-all":"^4.1.5","playwright":"1.24.2","prettier":"^2.7.1","puppeteer-extra-plugin":"^3.2.3","puppeteer-extra-plugin-anonymize-ua":"^2.4.5","rimraf":"^3.0.0","rollup":"^1.27.5","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-sourcemaps":"^0.4.2","rollup-plugin-typescript2":"^0.25.2","typescript":"4.4.3"},"dependencies":{"debug":"^4.3.4"},"peerDependencies":{"playwright":"*","playwright-core":"*"},"peerDependenciesMeta":{"playwright":{"optional":true},"playwright-core":{"optional":true}},"gitHead":"2f4a357f233b35a7a20f16ce007f5ef3f62765b9","bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"},"_id":"playwright-extra@4.3.6","_nodeVersion":"18.12.1","_npmVersion":"lerna/3.22.1/node@v18.12.1+arm64 (darwin)","dist":{"integrity":"sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==","shasum":"3e132e88b88fd5e046b8a73f724b3f2712fb2c3f","tarball":"https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.6.tgz","fileCount":26,"unpackedSize":318049,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGCKimGvP4JyQVwQQdLRcU693Ip7YTSuvXZUu0MjQBaAAiAt77wLnZpmMeG1BpmxxcUl8RqEVld8gfjx66CHMgEqjQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/z/4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoUOw//So8x7kN4IaUROY16bXCdLbfmpyo4Zt7/AsjXKSSpJ/0FJ8VL\r\nVxNzCqHY3q7A5uiogZirk+kYQ3r+EUvLTm33sdKLHoUv8b6wU5jadJEsMyXI\r\nOgBzYf1Bne0iowq3X5qvEExh9EyDhqYVgv/jfAb998ptOlo7ZVjbo9WwSxlL\r\nLn9By5EVnFA5N0wTflcHSkcw3iypYABK3I3omPVAEXjeZQJSETpbVHOW3yCE\r\nAG2Yzcusn/PhPxPQ+PCELBnbIRJZQFyueuJj2lvlqqg/KkSGqxZA4EoxjNy3\r\nYyJjzM6ELt6zasj30hBEq+NUX/lJMN6HJg9e23//9/Sj8CcW31i1VmufyrAD\r\nOXAXjKMUFs2wjt+dPRYs6a5gIJNkmtxy9GahnHLiyFpTWZT7trOmMC1jEmix\r\nWK5hr8zbwC12gkTk/Hk8OieTVOtmmktkDrrS4WW8mvmUh3eHrhPd5Rtx8r/A\r\n2LWH3LHzboWL0Kjaiie5Qcp0sW1uDmkmhg1McZ8ZQY6yPFQJZjndqtSisulX\r\nXVAl1N2aLvcoDjqepkr/I0UVNC4QCpTh9SFZ1tof6zPfqKcjJ+LSrA1kNjEn\r\nE3glgvC6G2eIYgHQrrmeui11TEPWuWlHyBSmCp3jYedwtMnm8Oy/804gFrKD\r\nM4cL2MBMWXOiXERiAPVwocPamko65+t2WuE=\r\n=zZ/7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"berstend","email":"e.ndze.it@gmail.com"},"directories":{},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/playwright-extra_4.3.6_1677672440760_0.10511650437532327"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-15T19:39:39.146Z","1.0.0":"2020-11-15T19:39:39.473Z","modified":"2023-03-01T12:07:20.991Z","1.0.1":"2020-11-16T13:42:58.341Z","4.2.1-next.587":"2021-02-08T14:34:41.224Z","4.2.1-next.588":"2021-02-08T15:35:54.426Z","4.2.1-next.589":"2021-02-08T15:37:56.902Z","4.2.1-next.590":"2021-02-08T15:43:06.075Z","4.2.1-next.593":"2021-02-08T15:50:46.568Z","4.2.1-next.616":"2021-02-09T08:31:13.343Z","3.3.2":"2022-07-03T15:31:10.691Z","4.3.0":"2022-07-06T02:39:22.484Z","4.3.1":"2022-07-07T16:34:55.090Z","4.3.2":"2022-07-07T19:01:23.180Z","4.3.3":"2022-07-07T23:00:05.374Z","4.3.4":"2022-08-08T13:07:10.218Z","4.3.5":"2022-08-08T14:00:42.325Z","4.3.6":"2023-03-01T12:07:20.917Z"},"maintainers":[{"name":"berstend","email":"e.ndze.it@gmail.com"}],"description":"Teach playwright new tricks through plugins.","license":"MIT","readme":"# playwright-extra [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/berstend/puppeteer-extra/test.yml?branch=master&event=push)](https://github.com/berstend/puppeteer-extra/actions) [![Discord](https://img.shields.io/discord/737009125862408274)](https://extra.community) [![npm](https://img.shields.io/npm/v/playwright-extra.svg)](https://www.npmjs.com/package/playwright-extra)\n\n> A modular plugin framework for [playwright](https://github.com/microsoft/playwright) to enable cool [plugins](#plugins) through a clean interface.\n\n## Installation\n\n```bash\nyarn add playwright playwright-extra\n# - or -\nnpm install playwright playwright-extra\n```\n\n<details>\n <summary>Changelog</summary>\n\n> Please check the `announcements` channel in our [discord server](https://extra.community) until we've automated readme updates. :)\n\n- **v4.3**\n  - Rerelease due to versioning issues with previous beta packages\n- **v3.3**\n  - Initial public release\n  </details>\n\n## Quickstart\n\n```js\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\nconst { chromium } = require('playwright-extra')\n\n// Load the stealth plugin and use defaults (all tricks to hide playwright usage)\n// Note: playwright-extra is compatible with most puppeteer-extra plugins\nconst stealth = require('puppeteer-extra-plugin-stealth')()\n\n// Add the plugin to playwright (any number of plugins can be added)\nchromium.use(stealth)\n\n// That's it, the rest is playwright usage as normal 😊\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n\n  console.log('Testing the stealth plugin..')\n  await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' })\n  await page.screenshot({ path: 'stealth.png', fullPage: true })\n\n  console.log('All done, check the screenshot. ✨')\n  await browser.close()\n})\n```\n\nThe above example uses the compatible [`stealth`](/packages/puppeteer-extra-plugin-stealth) plugin from puppeteer-extra, that plugin needs to be installed as well:\n\n```bash\nyarn add puppeteer-extra-plugin-stealth\n# - or -\nnpm install puppeteer-extra-plugin-stealth\n```\n\nIf you'd like to see debug output just run your script like so:\n\n```bash\n# macOS/Linux (Bash)\nDEBUG=playwright-extra*,puppeteer-extra* node myscript.js\n\n# Windows (Powershell)\n$env:DEBUG='playwright-extra*,puppeteer-extra*';node myscript.js\n```\n\n### More examples\n\n<details>\n <summary><strong>TypeScript & ESM usage</strong></summary><br/>\n\n`playwright-extra` and most plugins are written in TS, so you get perfect type support out of the box. :)\n\n```ts\n// playwright-extra is a drop-in replacement for playwright,\n// it augments the installed playwright with plugin functionality\nimport { chromium } from 'playwright-extra'\n\n// Load the stealth plugin and use defaults (all tricks to hide playwright usage)\n// Note: playwright-extra is compatible with most puppeteer-extra plugins\nimport StealthPlugin from 'puppeteer-extra-plugin-stealth'\n\n// Add the plugin to playwright (any number of plugins can be added)\nchromium.use(StealthPlugin())\n\n// ...(the rest of the quickstart code example is the same)\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n\n  console.log('Testing the stealth plugin..')\n  await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' })\n  await page.screenshot({ path: 'stealth.png', fullPage: true })\n\n  console.log('All done, check the screenshot. ✨')\n  await browser.close()\n})\n```\n\nNew to Typescript? Here it is in 30 seconds or less 😄:\n\n```bash\n# Optional: If you don't have yarn yet\nnpm i --global yarn\n\n# Optional: Create new package.json if it's a new project\nyarn init -y\n\n# Add basic typescript dependencies\nyarn add --dev typescript @types/node esbuild esbuild-register\n\n# Bootstrap a tsconfig.json\nyarn tsc --init --target ES2020 --lib ES2020 --module commonjs --rootDir src --outDir dist\n\n# Add dependencies used in the quick start example\nyarn add playwright playwright-extra puppeteer-extra-plugin-stealth\n\n# Create source folder for the .ts files\nmkdir src\n\n# Now place the example code above in `src/index.ts`\n\n# Run the typescript code without the need of compiling it first\nnode -r esbuild-register src/index.ts\n\n# You can now add Typescript to your CV 🎉\n```\n\n</details>\n<details>\n <summary><strong>Using different browsers</strong></summary><br/>\n\n```ts\n// Any browser supported by playwright can be used with plugins\nimport { chromium, firefox, webkit } from 'playwright-extra'\n\nchromium.use(plugin)\nfirefox.use(plugin)\nwebkit.use(plugin)\n```\n\n</details>\n<details>\n <summary><strong>Multiple instances with different plugins</strong></summary><br/>\n\nNode.js imports are cached, therefore the default `chromium`, `firefox`, `webkit` export from `playwright-extra` will always return the same playwright instance.\n\n```ts\n// Use `addExtra` to create a fresh and independent instance\nimport playwright from 'playwright'\nimport { addExtra } from 'playwright-extra'\n\nconst chromium1 = addExtra(playwright.chromium)\nconst chromium2 = addExtra(playwright.chromium)\n\nchromium1.use(onePlugin)\nchromium2.use(anotherPlugin)\n// chromium1 and chromium2 are independent\n```\n\n</details>\n\n---\n\n## Plugins\n\nWe're currently in the process of making the existing [puppeteer-extra](/packages/puppeteer-extra) plugins compatible with playwright-extra, the following plugins have been successfully tested already:\n\n### 🔥 [`puppeteer-extra-plugin-stealth`](/packages/puppeteer-extra-plugin-stealth)\n\n- Applies various evasion techniques to make detection of an automated browser harder\n- Compatible with Puppeteer & Playwright and chromium based browsers\n\n<details>\n<summary>&nbsp;&nbsp;Example: Using stealth in Playwright with custom options</summary>\n\n```js\n// The stealth plugin is optimized for chromium based browsers currently\nimport { chromium } from 'playwright-extra'\n\nimport StealthPlugin from 'puppeteer-extra-plugin-stealth'\nchromium.use(StealthPlugin())\n\n// New way to overwrite the default options of stealth evasion plugins\n// https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/evasions\nchromium.plugins.setDependencyDefaults('stealth/evasions/webgl.vendor', {\n  vendor: 'Bob',\n  renderer: 'Alice'\n})\n\n// That's it, the rest is playwright usage as normal 😊\nchromium.launch({ headless: true }).then(async browser => {\n  const page = await browser.newPage()\n\n  console.log('Testing the webgl spoofing feature of the stealth plugin..')\n  await page.goto('https://webglreport.com', { waitUntil: 'networkidle' })\n  await page.screenshot({ path: 'webgl.png', fullPage: true })\n\n  console.log('All done, check the screenshot. ✨')\n  await browser.close()\n})\n```\n\n</details>\n\n### 🏴 [`puppeteer-extra-plugin-recaptcha`](/packages/puppeteer-extra-plugin-recaptcha)\n\n- Solves reCAPTCHAs and hCaptchas automatically, using a single line of code: `page.solveRecaptchas()`\n- Compatible with Puppeteer & Playwright and all browsers (chromium, firefox, webkit)\n<details>\n<summary>&nbsp;&nbsp;Example: Solving captchas in Playwright & Firefox</summary>\n\n```js\n// Any browser (chromium, webkit, firefox) can be used\nimport { firefox } from 'playwright-extra'\n\nimport RecaptchaPlugin from 'puppeteer-extra-plugin-recaptcha'\nfirefox.use(\n  RecaptchaPlugin({\n    provider: {\n      id: '2captcha',\n      token: process.env.TWOCAPTCHA_TOKEN || 'YOUR_API_KEY'\n    }\n  })\n)\n\n// Works in headless as well, just so you can see it in action\nfirefox.launch({ headless: false }).then(async browser => {\n  const context = await browser.newContext()\n  const page = await context.newPage()\n  const url = 'https://www.google.com/recaptcha/api2/demo'\n  await page.goto(url, { waitUntil: 'networkidle' })\n\n  console.log('Solving captchas..')\n  await page.solveRecaptchas()\n\n  await Promise.all([\n    page.waitForNavigation({ waitUntil: 'networkidle' }),\n    page.click(`#recaptcha-demo-submit`)\n  ])\n\n  const content = await page.content()\n  const isSuccess = content.includes('Verification Success')\n  console.log('Done', { isSuccess })\n  await browser.close()\n})\n```\n\n</details>\n\n### 🆕 [`plugin-proxy-router`](/packages/plugin-proxy-router)\n\n- Use multiple proxies dynamically with flexible per-host routing and more\n- Compatible with Puppeteer & Playwright and all browsers (chromium, firefox, webkit)\n\n**Notes**\n\n- If you're in need of adblocking use [this package](https://www.npmjs.com/package/@cliqz/adblocker-playwright) or [block resources natively](https://github.com/berstend/puppeteer-extra/wiki/Block-resources-without-request-interception)\n- We're focussing on compatiblity with existing plugins at the moment, more documentation on how to write your own playwright-extra plugins will follow\n\n---\n\n## Contributors\n\n<a href=\"https://github.com/berstend/puppeteer-extra/graphs/contributors\">\n  <img src=\"https://contributors-img.firebaseapp.com/image?repo=berstend/puppeteer-extra\" />\n</a>\n\n---\n\n## License\n\nCopyright © 2018 - 2023, [berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘](https://github.com/berstend). Released under the MIT License.\n\n<!--\n  Reference links\n-->\n\n[playwright-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra\n[puppeteer-extra]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n[`puppeteer-extra`]: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra\n","readmeFilename":"readme.md","homepage":"https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra#readme","keywords":["playwright","playwright-extra","stealth","recaptcha","user-preferences","chrome","headless","pupeteer"],"repository":{"type":"git","url":"git+https://github.com/berstend/puppeteer-extra.git"},"author":{"name":"berstend"},"bugs":{"url":"https://github.com/berstend/puppeteer-extra/issues"}}