{"repo":"feder-cr/invisible_playwright","free":true,"listed":false,"github":"https://github.com/feder-cr/invisible_playwright","clone":"git clone https://github.com/feder-cr/invisible_playwright.git","description":"Free antidetect browser stealth for Playwright: undetected headless Firefox fingerprint. Python scraping, recaptcha and bot detection bypass. Open source","language":"Python","stars":1896,"topics":["anti-bot","anti-detect-browser","antidetect","automation","browser-automation","browser-fingerprinting","captcha","fingerprint","fingerprint-spoofing","fingerprintjs","firefox","headless-browser","playwright","python","recaptcha","recaptcha-bypass","scraping","stealth","undetected","web-scraping"],"license":"MIT","category":"scraper_infrastructure","readme_excerpt":"<p align=\"center\">\n  <a href=\"https://feder-cr.github.io/invisible_playwright/\"><img src=\"https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/scrapeorbit-banner.png\" alt=\"ScrapeOrbit - find and scrape any company on Earth\" width=\"760\"></a>\n</p>\n<p align=\"center\">\n  <b>Find and scrape any company on Earth.</b> No login, no signup. Just search and scrape.<br>\n  <a href=\"https://feder-cr.github.io/invisible_playwright/\">Open ScrapeOrbit</a>\n</p>\n\n<h2></h2>\n\n<div align=\"center\">\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-dark.png\">\n  <img src=\"https://raw.githubusercontent.com/feder-cr/invisible_playwright/main/docs/banner-light.png\" alt=\"invisible_playwright\" width=\"720\">\n</picture>\n<h3 align=\"center\">Free antidetect browser stealth for Playwright: undetected Firefox fingerprint, headless or headed.<br>\nPython web scraping and captcha bypass. Open source, and it passes every bot detection test.</h3>\n</div>\n\n![invisible_playwright - 5/5 detection suites passed](https://raw.githubusercontent.com/feder-cr/invisible_playwright/7a8693c6b4386e9a84dd93bedc479ca8654482e1/docs/screenshots/hero.gif)\n\n## How it works\n\nAnti-bots ask two questions, and reCAPTCHA, hCaptcha and Cloudflare Turnstile score the answers. invisible_playwright answers yes to both.\n\n**1. Is this a real browser?** Yes. It is Firefox, patched at the C++ source level.\n\n- The browser fingerprint is set inside the engine, not injected into the page: navigator, screen, GPU/WebGL, canvas, fonts, audio, WebRTC, timezone, network. Headless or headed, the same values either way.\n- No JS shim, no override, no seam to read.\n\n**2. Is a real person using it?** Yes. The actions are humanized in the driver.\n\n- Every click, hover and drag follows a natural mouse path with human timing, no teleporting cursor.\n- Each input is byte-identical to a real mouse: real input source, pressure, trusted events.\n\nDriven by the standard Playwright API. Full breakdown: [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch).\n\n---\n\n## Still seeing captchas or anti-bot? It's the proxy.\nOnce the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses.\n\n---\n\n## Install\n\n```bash\npip install invisible-playwright\npython -m invisible_playwright fetch      # one-time ~238 MB download (~544 MB unpacked), sha256-verified\n```\n\nSupported platforms: **Windows x86_64**, **Linux x86_64 / arm64**, **macOS arm64 / x86_64**. On macOS the app is ad-hoc signed (not notarized): if Gatekeeper complains, clear the quarantine flag once with `xattr -dr com.apple.quarantine` on the cached `Firefox.app`.\n\n---\n\n## Usage\n### Random fingerprint per session\n**100% Playwright-compatible** - sync and async, all methods, zero API changes. If you already use Playwright, switching is two lines:\n\n```diff\n- from playwright.sync_api import sync_playwright\n- with sync_playwright() as p:\n-     browser = p.firefox.launch()\n+ from invisible_playwright import InvisiblePlaywright\n+ with InvisiblePlaywright() as browser:\n```\n\nEvery session gets a distinct fingerprint (GPU, audio, fonts, screen, ~200 fields) and Bezier-curve mouse motion.\n\n**Sync**\n```python\nfrom invisible_playwright import InvisiblePlaywright\n\nwith InvisiblePlaywright(proxy={\"server\": \"socks5://...\", \"username\": \"u\", \"password\": \"p\"}) as browser:\n    page = browser.new_page()\n    page.goto(\"https://example.com\")\n    page.click(\"#submit\")   # mouse arcs to the button on a Bezier curve\n```\n\n**Async**\n```python\nfrom invisible_playwright.async_api import InvisiblePlaywright\n\nasync with InvisiblePlaywright(proxy={\"server\": \"socks5://...\", \"username\": \"u\", \"password\": \"p\"}) as browser:\n    page = await browser.new_page()\n    await page.goto(\"https://example.com\")\n    await page.click(\"#submit\")\n```\n\nThe `browser` object is a `playwright.sync_api.Browser` / `playwright.async_api.Browser` - every Playwright method works as-is.\n\nLog the seed to replay a run:\n\n```python\nsf = InvisiblePlaywright()\nwith sf as browser:\n    print(\"seed =\", sf.seed)\n    # ...\n```\n\n### Reproducible fingerprint\n\n```python\nwith InvisiblePlaywright(seed=42) as browser:\n    ...   # same GPU, same canvas hash, same audio context, every run\n```\n\n### Proxies\n\n```python\nproxy = {\n    \"server\": \"socks5://gate.example.com:1080\",\n    \"username\": \"user\",\n    \"password\": \"pass\",\n}\nwith InvisiblePlaywright(proxy=proxy) as browser:\n    ...\n```\n\nSchemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak.\n\n### Timezone\n\nThe browser timezone follows `timezone=`:\n\n```python\n# default: timezone is auto-derived from the egress IP (proxy egress if a\n# proxy is set, otherwise the host's own public IP)\nwith InvisiblePlaywright(proxy=proxy) as browser:\n    ...\n\n# explicit IANA zone always wins, the only way to force a specific zone\nwith InvisiblePlaywright(proxy=proxy, timezone=\"America/New_York\") as browser:\n    ...\n```\n\n### Pinning specific fingerprint fields\n\nBy default everything comes from `seed`. To force specific values while the rest stays seed-derived:\n\n```python\nwith InvisiblePlaywright(\n    seed=42,\n    pin={\n        \"gpu.renderer\": \"ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)\",\n        \"gpu.vendor\":   \"Google Inc. (NVIDIA)\",\n        \"screen.width\":  2560,\n        \"screen.height\": 1440,\n        \"hardware.concurrency\": 16,\n    },\n) as browser:\n    ...\n```\n\nFull list of pinnable keys, how pinning interacts with the Bayesian sampler, and common patterns are in **[docs/pinning.md](docs/pinning.md)**.\n\n---\n\n## CLI\n\nThe installed command is `invisible-playwright`, with a hyphen. `python -m\ninvisible_playwright` works identically and needs nothing on PATH.\n\n```bash\ninvisible-playwright fetch    # download the engine if missing, check every cached\n                              # one against the seal, print the path\ninvisible-playwright version  # wrapper, core and engine versions, and where the\n                              # engine is cached\n```\n\n## Documentation, guides and comparisons\n\nAll of it reads better, and is searchable, in\n**[the wiki](https://github.com/feder-cr/invisible_playwright/wiki)**,\norganised into four sections instead of one flat list:\n\n- **[Documentation](docs/documentation.md)** -\n  installation, the two-line switch from plain Playwright, proxy/timezone\n  configuration, pinning specific fields, the CLI.\n- **[Guides](docs/guides.md)** - how\n  detection actually works, in seven groups: browser identity, canvas/WebGL/fonts/\n  audio, network and WebRTC, the automation layer, AI agents, the detectors themselves\n  explained from source, and testing.\n- **[Comparisons](docs/comparisons.md)** -\n  against Camoufox, Patchright, nodriver and playwright-stealth, and the case for\n  Firefox over Chromium generally.\n- **[Integrations](docs/integrations/)** -\n  Scrapy, Crawlee, Robot Framework, CodeceptJS, test runners, Playwright MCP, and the\n  frameworks it does not fit, by name.\n\nIf you don't know where to start: [Three ways to make Playwright undetected](docs/playwright-stealth-levels.md)\nis the map most other pages link back to, [Playwright detected as a bot on one site](docs/playwright-detected-as-bot.md)\nis the troubleshooting order, and [navigator.webdriver is not the tell you think it is](docs/navigator-webdriver-explained.md)\nexplains the most famous property in this space and why patching it alone buys you\nalmost nothing.\n- [crawl4ai stealth and custom browser engines](docs/crawl4ai-stealth-custom-browser.md) - browser_type accepts firefox but there is no executable_path; where the adapter seam is\n- [Why headless browsers render different fonts](docs/headless-fonts-differ.md) - the three causes, the per-platform font sets, and why the fix is not installing more fonts\n- [How to make Linux and macOS report real Windows fonts](docs/bundled-fonts-cross-platform.md) - one manifest, three font backends convinced not to ask the host, and the four seams still open\n- [measureText and TextMetrics as a fingerprinting surface](docs/measuretext-textmetrics-fingerprinting.md) - ten-plus numbers from one call needing no permission prompt, and the two mistakes we made fixing it\n- [What privacy.resistFingerprinting really does](docs/resist-fingerprinting.md) - and why this project sets it to false on purpose\n- [The ChromeDriver cdc_ variable](docs/cdc-variable-explained.md) - why renaming it is not removing it, and what that generalises to\n- [What bot.sannysoft.com actually checks](docs/sannysoft-explained.md) - row by row, and the canvas-in-iframe test nobody reads\n- [How CreepJS decides you are lying](docs/creepjs-explained.md) - four detection techniques, and why blocking the probe is itself recorded\n- [Firefox preferences that silently do nothing](docs/firefox-prefs-not-applying.md) - five reasons, starting with the one that cost us a real bug\n- [What BotD actually detects](docs/botd-explained.md) - twenty detectors, and why most are not about bots at all\n- [Why a FingerprintJS visitor ID changes](docs/fingerprintjs-visitor-id.md) - it is a hash of 41 components, so one moving moves all of it\n\n## Related projects\n\nThe open-source neighbours, and what each one is for.\n\n**On the Firefox side**\n\n- **[Camoufox](https://github.com/daijro/camoufox)** - an anti-detect Firefox that also patches at the C++ level. It covers a wider surface and ships its own fingerprint database; this project derives a fingerprint from a seed with a Bayesian sampler, so one number reproduces one machine. [Full comparison](docs/vs-camoufox.md).\n- **[LibreWolf](https://librewolf.net)** - a Firefox fork with privacy defaults. It ships a configured binary f","default_branch":"main","files":459,"tree":[".gitattributes",".githooks/pre-push",".github/ISSUE_TEMPLATE/01-launch-failure.yml",".github/ISSUE_TEMPLATE/02-site-or-action-bug.yml",".github/ISSUE_TEMPLATE/03-stealth-detection.yml",".github/ISSUE_TEMPLATE/config.yml",".github/PULL_REQUEST_TEMPLATE.md",".github/workflows/core-on-index.yml",".github/workflows/e2e-hunt.yml",".github/workflows/e2e.yml",".github/workflows/firefox-launch-matrix.yml",".github/workflows/publish-wiki.yml",".github/workflows/publish.yml",".github/workflows/tests.yml",".github/workflows/user-install.yml",".github/workflows/webrtc-e2e.yml",".gitignore","CHANGELOG.md","CODE_OF_CONDUCT.md","CONTRIBUTING.md","LICENSE","PUBLISHED.json","README.md","SECURITY.md","docs/README.md","docs/about-webrtc-debug-ice-candidates.md","docs/accelerometer-gyroscope-desktop-leak.md","docs/accept-language-navigator-languages.md","docs/agent-retry-loops-rate-limits.md","docs/ai-agent-timing-signal.md","docs/ai-browser-agents-stealth.md","docs/asn-and-ip-reputation-in-bot-detection.md","docs/assets/fallback.json","docs/assets/scrapeorbit.css","docs/assets/scrapeorbit.js","docs/audiocontext-fingerprinting.md","docs/audiocontext-samplerate-latency-fingerprint.md","docs/automating-login-vs-session-reuse.md","docs/back-computer-use-agent-real-browser.md","docs/badges/firefox.svg","docs/badges/launches.svg","docs/badges/license.svg","docs/badges/linkedin.svg","docs/badges/python.svg","docs/badges/stars.svg","docs/badges/telegram.svg","docs/banner-dark.png","docs/banner-light.png","docs/battery-api-fingerprint-firefox.md","docs/bfcache-pageshow-persisted.md","docs/bidi-vs-cdp-detection.md","docs/block-images-speed-up-playwright-scraping-page-route.md","docs/botd-explained.md","docs/browser-extension-fingerprint.md","docs/browser-trust-score-explained.md","docs/browser-use-detection.md","docs/browserleaks-canvas-webgl-hash.md","docs/browserleaks-explained.md","docs/bundled-fonts-cross-platform.md","docs/can-a-website-detect-a-virtual-machine.md","docs/can-a-website-detect-clipboard-api-access.md","docs/can-a-website-tell-you-are-on-a-server.md","docs/can-i-use-my-real-browser-profile-playwright.md","docs/can-two-devices-share-a-browser-fingerprint.md","docs/can-websites-detect-a-datacenter-proxy-ip.md","docs/can-websites-detect-playwright.md","docs/can-you-be-fingerprinted-in-incognito-mode.md","docs/can-you-run-invisible-playwright-serverless.md","docs/can-you-run-playwright-without-being-detected.md","docs/canvas-fingerprint-changes-every-run.md","docs/canvas-fingerprint-noise.md","docs/canvas-webgl-cross-platform-consistency.md","docs/cdc-variable-explained.md","docs/chromium-is-not-chrome.md","docs/cli-reference.md","docs/client-hints-sec-fetch.md","docs/codec-fingerprinting.md","docs/color-gamut-hdr-media-query-fingerprint.md","docs/combine-invisible-playwright-with-httpx-for-speed.md","docs/comparisons.md","docs/computer-use-agents-browser-detection.md","docs/configuration.md","docs/crawl4ai-stealth-custom-browser.md","docs/creepjs-explained.md","docs/cross-origin-iframe-unreachable.md","docs/css-media-query-fingerprinting.md","docs/debugger-timing-detection.md","docs/detect-installed-fonts-javascript.md","docs/devicepixelratio-firefox-pref.md","docs/do-i-need-an-antidetect-browser.md","docs/do-websites-know-you-are-using-a-script.md","docs/documentation.md","docs/does-a-proxy-leak-dns-doh-explained.md","docs/does-a-vpn-stop-browser-fingerprinting.md","docs/does-chaining-two-proxies-help-detection.md","docs/does-clearing-cookies-stop-fingerprinting.md","docs/does-playwright-change-my-fingerprint.md","docs/does-playwright-get-detected-first-request.md","docs/does-playwright-leave-traces.md","docs/does-playwright-set-navigator-webdriver.md","docs/does-playwright-support-firefox-stealth.md","docs/does-playwright-trigger-recaptcha.md","docs/dom-reading-vs-screenshot-agents.md","docs/drag-and-drop-playwright-firefox-drag-to.md","docs/emoji-fingerprinting-cross-platform.md","docs/execution-context-destroyed.md","docs/fake-useragent-archived.md","docs/feed-invisible-playwright-pages-into-rag-index.md","docs/fingerprintjs-visitor-id.md","docs/firefox-prefs-not-applying.md","docs/firefox-vs-chromium-antidetect.md","docs/gamepad-api-fingerprint-bot-detection.md","docs/geolocation-api-vs-ip-location-consistency.md","docs/getclientrects-fingerprinting.md","docs/ghost-cursor-human-mouse.md","docs/guides-ai-agents.md","docs/guides-automation-layer.md","docs/guides-browser-identity.md","docs/guides-canvas-webgl-fonts-audio.md","docs/guides-detectors-explained.md","docs/guides-network-proxy-webrtc.md","docs/guides-scraping-with-playwright.md","docs/guides-testing-troubleshooting.md","docs/guides.md","docs/hardware-concurrency-device-memory.md","docs/headless-browser-agent-on-a-server.md","docs/headless-fonts-differ.md","docs/headless-vs-headful.md","docs/hover-mouse-movement-bug.md","docs/how-accurate-is-browser-fingerprinting.md","docs/how-do-websites-detect-bots.md","docs/how-to-avoid-bot-detection-playwright.md","docs/how-to-capture-xhr-api-responses-playwright.md","docs/how-to-check-proxy-ip-leak.md","docs/how-to-clean-scraped-prices-and-dates-playwright.md","docs/how-to-crawl-list-to-detail-pages-playwright.md","docs/how-to-download-files-playwright.md","docs/how-to-download-images-in-bulk-playwright.md","docs/how-to-export-scraped-data-to-excel-playwright.md","docs/how-to-extract-clean-article-text-playwright.md","docs/how-to-extract-data-from-canvas-charts-playwright.md","docs/how-to-extract-json-ld-structured-data-playwright.md","docs/how-to-extract-links-crawl-frontier-playwright.md","docs/how-to-extract-open-graph-metadata-playwright.md","docs/how-to-generate-pdf-with-playwright-firefox.md","docs/how-to-handle-403-429-backoff-mid-scrape-playwright.md","docs/how-to-handle-cookie-consent-banners-playwright.md","docs/how-to-handle-popups-and-modals-playwright.md","docs/how-to-rate-limit-your-scraper-playwright.md","docs/how-to-resume-an-interrupted-scrape-playwright.md","docs/how-to-retry-failed-requests-playwright.md","docs/how-to-rotate-proxies-playwright.md","docs/how-to-run-playwright-docker-undetected.md","docs/how-to-scrape-a-sitemap-playwright.md","docs/how-to-scrape-apartment-rentals-playwright.md","docs/how-to-scrape-autocomplete-typeahead-playwright.md","docs/how-to-scrape-behind-login-playwright.md","docs/how-to-scrape-business-directory-listings-playwright.md","docs/how-to-scrape-car-listings-playwright.md","docs/how-to-scrape-classifieds-listings-playwright.md","docs/how-to-scrape-cryptocurrency-prices-playwright.md","docs/how-to-scrape-date-picker-calendar-playwright.md","docs/how-to-scrape-deals-and-coupon-codes-playwright.md","docs/how-to-scrape-ecommerce-product-pages-playwright.md","docs/how-to-scrape-event-and-ticket-listings-playwright.md","docs/how-to-scrape-fare-calendars-playwright.md","docs/how-to-scrape-flight-prices-playwright.md","docs/how-to-scrape-forum-and-community-threads-playwright.md","docs/how-to-scrape-geotargeted-content-playwright.md","docs/how-to-scrape-headless-blocked.md","docs/how-to-scrape-hotel-prices-playwright.md","docs/how-to-scrape-html-tables-playwright.md","docs/how-to-scrape-iframe-content-playwright.md","docs/how-to-scrape-image-galleries-playwright.md","docs/how-to-scrape-infinite-scroll-playwright.md","docs/how-to-scrape-into-a-database-playwright.md","docs/how-to-scrape-into-a-pandas-dataframe-playwright.md","docs/how-to-scrape-job-postings-playwright.md","docs/how-to-scrape-lazy-loaded-images-playwright.md","docs/how-to-scrape-load-more-button-playwright.md","docs/how-to-scrape-local-store-prices-playwright.md","docs/how-to-scrape-map-based-local-results-playwright.md","docs/how-to-scrape-map-based-search-playwright.md","docs/how-to-scrape-multi-step-wizard-flow-playwright.md","docs/how-to-scrape-multiple-pages-in-parallel-playwright.md","docs/how-to-scrape-nested-pagination-playwright.md","docs/how-to-scrape-news-article-text-playwright.md","docs/how-to-scrape-only-new-items-incremental-playwright.md","docs/how-to-scrape-paginated-pages-playwright.md","docs/how-to-scrape-product-reviews-playwright.md","docs/how-to-scrape-real-estate-listings-playwright.md","docs/how-to-scrape-restaurant-menu-data-playwright.md","docs/how-to-scrape-reviews-and-ratings-playwright.md","docs/how-to-scrape-rss-atom-feeds-playwright.md","docs/how-to-scrape-search-results-form-playwright.md","docs/how-to-scrape-shadow-dom-playwright.md","docs/how-to-scrape-social-media-profiles-playwright.md","docs/how-to-scrape-spa-history-url-changes-playwright.md","docs/how-to-scrape-sports-scores-and-stats-playwright.md","docs/how-to-scrape-stock-and-financial-data-playwright.md","docs/how-to-scrape-to-csv-playwright.md","docs/how-to-scrape-to-json-lines-playwright.md","docs/how-to-scrape-vacation-rental-listings-playwright.md","docs/how-to-scrape-video-listings-and-metadata-playwright.md","docs/how-to-scrape-without-getting-blocked.md","docs/how-to-take-full-page-screenshots-playwright.md","docs/how-to-test-bot-detection.md","docs/how-to-track-product-prices-playwright.md","docs/how-to-track-product-stock-playwright.md","docs/how-to-upload-files-playwright.md","docs/how-to-use-invisible-playwright-in-docker.md","docs/how-to-wait-for-page-load-playwright.md","docs/http-basic-auth-playwright-http-credentials.md","docs/http-client-vs-real-browser.md","docs/http2-fingerprint-detection.md","docs/http3-quic-fingerprint-what-a-site-sees.md","docs/human-mouse-movement.md","docs/index.html","docs/index.md","docs/installation.md","docs/integrations/README.md","docs/integrations/codeceptjs.md","docs/integrations/crawlee-js.md","docs/integrations/crawlee-python.md","docs/integrations/other-languages.md","docs/integrations/playwright-mcp.md","docs/integrations/robot-framework.md","docs/integrations/scrapy-playwright.md","docs/integrations/test-runners.md","docs/intercept-and-mock-requests-page-route-playwright.md","docs/invisible_playwright-logo.png","docs/ipv6-vs-ipv4-which-does-your-proxy-use.md","docs/is-changing-user-agent-enough.md","docs/is-playwright-firefox-harder-to-detect-chromium.md","docs/is-playwright-headless-detectable.md","docs/is-webgpu-a-browser-fingerprint.md","docs/isolate-identities-browser-context-per-session.md","docs/ja3-ja4-tls-fingerprint.md","docs/juggler-missing-packaged-build.md","docs/keystroke-timing-detection-playwright.md","docs/langchain-agent-invisible-playwright-browser.md","docs/mcp-browser-server-stealth-firefox.md","docs/measuretext-textmetrics-fingerprinting.md","docs/migrate-puppeteer-to-playwright-stealth.md","docs/migrate-requests-beautifulsoup-to-browser.md","docs/migrate-selenium-to-playwright-stealth.md","docs/mouse-dynamics-behavioural-biometrics.md","docs/navigator-buildid-firefox-tell.md","docs/navigator-connection-network-information-firefox.md","docs/navigator-maxtouchpoints-pointer.md","docs/navigator-platform-oscpu-consistency.md","docs/navigator-vendor-productsub-firefox.md","docs/navigator-webdriver-explained.md","docs/notification-permission-detection.md","docs/offline-geoip-timezone-proxy.md","docs/orphaned-browser-process-windows.md","docs/parallel-browser-agents-distinct-fingerprints.md","docs/permissions-api-consistency.md","docs/persistent-logged-in-session-browser-agent.md","docs/persistent-profiles.md","docs/pinning.md","docs/playwright-bundled-firefox-detectable.md","docs/playwright-clicks-istrusted.md","docs/playwright-connect-over-cdp-firefox.md","docs/playwright-detected-as-bot.md","docs/playwright-dialog-popup-handling.md","docs/playwright-docker-detection.md","docs/playwright-download-files-firefox.md","docs/playwright-firefox-mobile-emulation.md","docs/playwright-new-page-vs-new-context.md","docs/playwright-protocol-drift.md","docs/playwright-proxy-per-context.md","docs/playwright-screenshot-returns-noise.md","docs/playwright-set-input-files-upload.md","docs/playwright-socks5-proxy-authentication.md","docs/playwright-stealth-levels.md","docs/playwright-targetclosederror-causes.md","docs/playwright-user-agent.md","docs/prefers-reduced-motion-os-setting-tells.md","docs/puppeteer-extra-stealth-unmaintained.md","docs/pyppeteer-unmaintained-playwright.md","docs/quickstart.md","docs/read-set-cookies-playwright-context.md","docs/recaptcha-v3-score.md","docs/record-playwright-trace-debug-scraper.md","docs/record-replay-http-traffic-har-playwright.md","docs/record-video-of-playwright-session.md","docs/renderer-string-vs-render.md","docs/reproducible-agent-browser-identity-seed.md","docs/residential-datacenter-mobile-proxies-explained.md","docs/resist-fingerprinting.md","docs/run-invisible-playwright-concurrently-asyncio.md","docs/run-invisible-playwright-headful-server-xvfb.md","docs/run-invisible-playwright-in-a-jupyter-notebook.md","docs/run-invisible-playwright-in-celery-workers.md","docs/run-invisible-playwright-in-github-actions.md","docs/sannysoft-explained.md","docs/save-reuse-login-storage-state-playwright.md","docs/schedule-invisible-playwright-scrapes-with-cron.md","docs/scrapeorbit-banner.png","docs/screen-size-headless-tells.md","docs/screenshots/creepjs.png","docs/screenshots/fingerprintpro.png","docs/screenshots/hero.gif","docs/screenshots/peet_ws.png","docs/screenshots/recaptcha_score.png","docs/screenshots/sannysoft.png","docs/screenshots/webrtc.png","docs/scrollbar-width-reveals-operating-system.md","docs/selenium-stealth-unmaintained.md","docs/service-workers-storage-partitioning.md","docs/set-geolocation-permissions-per-playwright-context.md","docs/slow-browser-launch-timeout-budget.md","docs/smolagents-invisible-playwright-tool.md","docs/socks5-vs-http-proxy-browser.md","docs/speech-synthesis-voices-fingerprint.md","docs/speech-synthesis-voices.md","docs/splash-unmaintained-qtwebkit.md","docs/stagehand-firefox-engine-fit.md","docs/stealth-playwright-tests-with-pytest-fixtures.md","docs/sticky-vs-rotating-proxy-sessions.md","docs/stock-playwright-patched-binary.md","docs/storage-quota-estimate-device-fingerprint.md","docs/timezone-proxy-mismatch.md","docs/tls-fingerprint-user-agent-mismatch.md","docs/tostring-native-code-detection.md","docs/use-beautifulsoup-with-invisible-playwright.md","docs/use-invisible-playwright-in-an-airflow-dag.md","docs/vs-botasaurus.md","docs/vs-camoufox.md","docs/vs-curl-cffi.md","docs/vs-drission-page.md","docs/vs-fingerprint-suite.md","docs/vs-hrequests.md","docs/vs-nodriver.md","docs/vs-patchright.md","docs/vs-playwright-extra-stealth.md","docs/vs-playwright-stealth.md","docs/vs-playwright-with-fingerprints.md","docs/vs-puppeteer-real-browser.md","docs/vs-pydoll.md","docs/vs-rebrowser-patches.md","docs/vs-scrapling.md","docs/vs-scrapy-playwright.md","docs/vs-selenium-driverless.md","docs/vs-seleniumbase-uc-mode.md","docs/vs-tls-client.md","docs/vs-ulixee-hero.md","docs/vs-undetected-chromedriver.md","docs/vs-undetected-playwright.md","docs/vs-zendriver.md","docs/wait-for-specific-api-response-playwright.md","docs/web-scraping-getting-blocked-proxies.md","docs/web-scraping-tls-fingerprint-requests-blocked.md","docs/web-workers-fingerprint.md","docs/webgl-parameters-are-identical.md","docs/webgl-renderer-strings.md","docs/webgl-shader-precision-fingerprint.md","docs/webrtc-ice-candidate-spoofing.md","docs/webrtc-ip-match-proxy-exit.md","docs/webrtc-ipv6-leak-proxy.md","docs/webrtc-leak-proxy.md","docs/webrtc-no-candidates-behind-proxy.md","docs/what-a-mobile-carrier-ip-looks-like.md","docs/what-data-websites-collect-about-your-browser.md","docs/what-is-a-browser-fingerprint.md","docs/why-blocked-with-a-clean-fingerprint.md","docs/why-does-my-playwright-script-get-blocked.md","docs/why-playwright-works-locally-fails-in-cloud.md","docs/wrap-invisible-playwright-in-a-fastapi-service.md","examples/basic.py","examples/with_proxy.py","pyproject.toml","scripts/audit_cpt_realism.py","scripts/build_wiki.py","scripts/ci_drive_gate.py","scripts/ci_font_gate.py","scripts/gen_release_notes.py","scripts/install_hooks.py","scripts/playwright_pin.txt","scripts/run_e2e.py","src/invisible_playwright/__init__.py","src/invisible_playwright/__main__.py","src/invisible_playwright/_behaviour.py","src/invisible_playwright/_cursor.py","src/invisible_playwright/_engine.py","src/invisible_playwright/_fpforge/__init__.py","src/invisible_playwright/_geo.py","src/invisible_playwright/_headless.py","src/invisible_playwright/_motion.py","src/invisible_playwright/_pin.py","src/invisible_playwright/_proxy.py","src/invisible_playwright/_reaper.py","src/invisible_playwright/_recaptcha_seed.py","src/invisible_playwright/_session.py","src/invisible_playwright/_webgl_personas.py","src/invisible_playwright/async_api.py","src/invisible_playwright/cli.py","src/invisible_playwright/config.py","src/invisible_playwright/constants.py"],"storefront":"/r/feder-cr","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/feder-cr/invisible_playwright/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}