{"id":37611444,"url":"https://github.com/fast-facts/puppeteer-pro","last_synced_at":"2026-04-11T11:09:15.688Z","repository":{"id":36960848,"uuid":"252849467","full_name":"fast-facts/puppeteer-pro","owner":"fast-facts","description":"A simple puppeteer wrapper to enable useful plugins with ease","archived":false,"fork":false,"pushed_at":"2026-01-13T15:54:11.000Z","size":4201,"stargazers_count":57,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-13T18:21:18.054Z","etag":null,"topics":["anonymize","automation","chrome","detection","plugin","puppeteer","stealth"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fast-facts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-04-03T21:50:51.000Z","updated_at":"2026-01-13T15:54:08.000Z","dependencies_parsed_at":"2024-03-17T01:13:16.260Z","dependency_job_id":"07134e91-3c99-4bba-96ad-2695e002a32d","html_url":"https://github.com/fast-facts/puppeteer-pro","commit_stats":{"total_commits":965,"total_committers":6,"mean_commits":"160.83333333333334","dds":"0.25077720207253884","last_synced_commit":"23a424d0aa89b3c0c5516823c5553cc967593c97"},"previous_names":["itzrabbs/puppeteer-pro"],"tags_count":92,"template":false,"template_full_name":null,"purl":"pkg:github/fast-facts/puppeteer-pro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fast-facts%2Fpuppeteer-pro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fast-facts%2Fpuppeteer-pro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fast-facts%2Fpuppeteer-pro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fast-facts%2Fpuppeteer-pro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fast-facts","download_url":"https://codeload.github.com/fast-facts/puppeteer-pro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fast-facts%2Fpuppeteer-pro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anonymize","automation","chrome","detection","plugin","puppeteer","stealth"],"created_at":"2026-01-16T10:22:38.222Z","updated_at":"2026-04-11T11:09:15.682Z","avatar_url":"https://github.com/fast-facts.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Puppeteer-Pro\r\n\r\nA simple [`puppeteer`](https://github.com/puppeteer/puppeteer) wrapper to enable useful plugins with ease\r\n\r\n## Installation\r\n\r\nRequires node v10 and higher\r\n\r\n```bash\r\nnpm install puppeteer-pro\r\n```\r\n\r\n## Quickstart\r\n\r\nPuppeteer-Pro can do all the same things as [`puppeteer`](https://github.com/puppeteer/puppeteer), just now with plugins!\r\n\r\n```js\r\n// Puppeteer-Pro is a drop-in replacement for puppeteer\r\nconst PuppeteerPro = require('puppeteer-pro');\r\n\r\n(async () =\u003e {\r\n  const browser = await PuppeteerPro.launch();\r\n\r\n  // Enable the 'avoidDetection' plugin to prevent headless detection\r\n  browser.avoidDetection();\r\n\r\n  // Enable the 'solveRecaptchas' plugin to solve Google's recaptchas (remember to provide a wit.api API access token)\r\n  const solver = await browser.solveRecaptchas('WIT_AI_ACCESS_TOKEN');\r\n\r\n  const page = await browser.newPage();\r\n  \r\n  console.log('Testing the 🐱‍👤 avoidDetection 🐱‍👤 plugin..')\r\n  await page.goto('https://arh.antoinevastel.com/bots/areyouheadless');\r\n  await page.screenshot({ path: 'are-you-headless.png' });\r\n  \r\n  console.log('Testing the recaptcha solver..')\r\n  await page.goto('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php');\r\n  await solver.waitForCaptcha(page); // Captcha script is deferred, so will load after page.goto completes\r\n  await solver.solveRecaptcha(page);\r\n  await page.screenshot({ path: 'is-recaptcha-solved.png' });\r\n\r\n  await browser.close();\r\n})();\r\n```\r\n\r\n## Passive Improvements\r\n\r\n- There can be multiple request interception handlers for the same request. In such cases, the resulting response will prioritize [`respond`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#httprequestrespondresponse), followed by [`abort`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#httprequestaborterrorcode), followed by [`continue`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#httprequestcontinueoverrides). For example:\r\n  - If amongst 5 handlers, respond is called 1 time, abort is called 2 times and continue is called 2 times, the result will be `respond`. This will occur after the first respond is called and not when all handlers are finished.\r\n  - If amongst 5 handlers, abort is called 1 time and continue is called 4 times, the result will be `abort`. This will occur after all handlers are finished.\r\n  - If amongst 5 handlers, all handlers call continue, the result will be `continue`. This will occur after all handlers are finished.\r\n- `page.waitAndClick` function that sequentially runs `page.waitForSelector` and `page.click`.\r\n- `page.waitAndType` function that sequentially runs `page.waitForSelector` and `page.type`.\r\n- `page.withLoader` function that wraps any function with waiting for a selector to appear and then disappear.\r\n\r\n## Optional Built-in Plugins\r\n\r\n### Anonymize User Agent\r\n\r\n- Anonymize the user-agent across all pages\r\n\r\n### Avoid Detection\r\n\r\n- Multiple techniques to combat headless browser detection\r\n\r\n### Block Resources\r\n\r\n- Block any [resource type](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#httprequestresourcetype) from loading\r\n- Can be used to speed up loading websites by blocking style sheets and images\r\n\r\n### Disable Dialogs\r\n\r\n- Block dialogs from popping up and stopping execution\r\n\r\n### Manage Cookies\r\n\r\n- Save and load cookies across sessions\r\n- Supports multiple profiles and switching between profiles\r\n\r\n### Manage Local Storage\r\n\r\n- Save and load local storage across sessions\r\n- Supports multiple profiles and switching between profiles\r\n\r\n### Solve Recaptcha\r\n\r\n- Solve Google's reCAPTCHA v2\r\n- Requires a FREE [wit.ai](https://wit.ai/apps) access token\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffast-facts%2Fpuppeteer-pro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffast-facts%2Fpuppeteer-pro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffast-facts%2Fpuppeteer-pro/lists"}