| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-04-13 | 5.7 kB | |
| Release v0.4.6 source code.tar.gz | 2026-04-13 | 2.3 MB | |
| Release v0.4.6 source code.zip | 2026-04-13 | 2.4 MB | |
| Totals: 3 Items | 4.6 MB | 0 | |
A focused update on browser stealth, privacy, and developer experience 🔒
🚀 New Stuff and quality of life changes
- Added built-in ad blocking for browser fetchers. Pass
block_ads=Trueto block requests to ~3,500 known ad and tracker domains at the route interception level -- no DNS, no TCP, instant abort. Can be combined withblocked_domainsfor custom lists. The MCP server and CLI--ai-targetedmode enable this automatically to save tokens and speed up page loads.python page = StealthyFetcher.fetch('https://example.com', block_ads=True) - Added DNS-over-HTTPS support to prevent DNS leaks when using proxies. Pass
dns_over_https=Trueto route DNS queries through Cloudflare's DoH, so your real location isn't exposed through DNS resolution even when your HTTP traffic goes through a proxy.python page = StealthyFetcher.fetch('https://example.com', proxy='http://proxy:8080', dns_over_https=True) -
Added
page_setupcallback for browser fetchers. A function that runs beforepage.goto(), letting you register event listeners, routes, or scripts that must be set up before the page navigates. Pairs withpage_action(which runs after navigation). (Solves #237) ```python def capture_websockets(page): page.on("websocket", lambda ws: print(f"WS: {ws.url}"))page = DynamicFetcher.fetch('https://example.com', page_setup=capture_websockets) ```
-
Added
--block-adsand--dns-over-httpsCLI options to bothfetchandstealthy-fetchcommands.
🐛 Bug Fixes
- Fixed
Secondstype alias rejecting float values. Passingwait=1.5ortimeout=500.0to browser fetchers would fail with a type error because the type alias incorrectly treatedfloatas metadata instead of a type. by @kuishou68 in #240 - Fixed duplicate ID segments in full-path selector generation. Elements with
idattributes had their selector appended twice when generating full CSS/XPath paths, producing selectors likebody > #main > #main > #target > #target. Also fixed full-path XPath emitting bare[@id='x']predicates (invalid XPath) instead of*[@id='x']. by @sjhddh in #241 - Fixed missing shell signature parameters. The interactive shell was missing
blocked_domains,block_ads,retries,retry_delay,capture_xhr,executable_path, anddns_over_httpsfrom its function signatures.
🙏 Special thanks to the community for all the continuous testing and feedback