{"adoption": {"forks": 433, "observed_at": "2026-08-28T04:08:57.150778+00:00", "stars": 4699}, "canonical_url": "https://ross.abutalabs.com/products/nodriver", "card": {"archived": false, "artifact_type": "library", "description": "Successor of Undetected-Chromedriver. Providing a blazing fast framework for web automation, webscraping, bots and any other creative ideas which are normally hindered by annoying anti bot systems like Captcha / CloudFlare / Imperva / hCaptcha ", "domain": ["crawlers", "web-development", "developer-tools"], "enriched": true, "function": ["web-scraping", "http-client", "developer-tools", "workflow-automation"], "health_score": 69, "homepage": null, "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ultrafunkamsterdam/nodriver"], "name": "ultrafunkamsterdam/nodriver", "platform": ["python", "cross-platform"], "pushed_at": "2026-05-13T13:58:15+00:00", "repo": "ultrafunkamsterdam/nodriver", "stars": 4699, "tags": ["browser-automation", "anti-detection", "cdp", "async", "undetected-chromedriver-successor", "chrome", "botting", "automation"], "topics": [], "urls": [], "use_cases": ["scrape websites protected by Cloudflare or other anti-bot systems", "automate browser tasks without selenium or chromedriver", "write async python bots that control chrome", "bypass captcha and WAF checks during web scraping", "automate logins and reuse saved cookies", "find and interact with page elements by text or CSS selector", "connect to an already running chrome debug session"], "what_it_is": "Nodriver is a fully asynchronous Python browser automation and web scraping library, and the official successor to Undetected-Chromedriver. It communicates directly with Chromium-based browsers via the Chrome DevTools Protocol without Selenium or chromedriver, optimizing for evasion of anti-bot systems like Cloudflare, Captcha, and Imperva.", "when_to_avoid": ["you need Firefox or Safari support (Chromium-based browsers only)", "you need a synchronous API", "your project cannot comply with the AGPL-3.0 license", "you need cross-browser testing infrastructure like Playwright or Selenium Grid"], "when_to_choose": ["you need undetected browser automation in Python against anti-bot-protected sites", "you want a lightweight async alternative to Selenium/Playwright for Chromium", "you are migrating from undetected-chromedriver", "you need direct CDP access with sensible defaults"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/nodriver", "repo": "ultrafunkamsterdam/nodriver", "role": "main", "score": 62}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:57.150778+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:19:13.798690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "357cf8789f6c77ca73c136bdaf285b696a517f17c9515378aaf778e39e55fd24", "fetched_at": "2026-08-28T04:08:57.150778+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ultrafunkamsterdam/nodriver"}, {"content_hash": "b23917688b2b590f2d14ae93d861df98ff922e6310261f0da2609125734dc20c", "fetched_at": "2026-08-29T09:03:07.872397+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodriver/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 82, "longevity": 66, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 925, "days_push": 112, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 62, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}