Releases
v0.4.0
Compare
Sorry, something went wrong.
No results found
SaaS API
API Key management: create/validate/revoke with SHA-256 hashing (SQLite)
Tier-based rate limiting: per-second + daily quota (free=100, pro=5k, biz=50k)
Bearer token auth on all REST endpoints (opt-in via --with-auth)
CLI: ue key create/list/revoke + ue serve --with-auth
Auto-create default free key on first auth-enabled server start
Multi-Channel Captcha Voting
3-channel weighted voting: Grayscale (1.0) + Canny edge (2.0) + ddddocr ONNX (0.3)
_detect_ddddocr() with silent import/model-failure degradation
Expected single-shot recognition: 70% → ~90%
Scrapling Public API Migration
Migrated from private StealthySession to public StealthyFetcher.fetch()
Browser DOM, Canvas, CDP, screenshots all run inside page_action callback
Removed BrowserPool (StealthyFetcher manages its own lifecycle)
Net: -676 lines of code
Real-World Validation (19/20 URLs pass)
Fallback chain fix: >= → > prevents failed stages from blocking
Canvas Hook: injection moved to page_setup, uses page.add_init_script()
Canvas Hook: JS syntax fix, main-thread evaluate, pre-collected data check
Pipeline: don't break chain when pre-collected canvas/cdp data exists
StageContext.caps: unified capability dict normalization for 8 stages
Browser DOM: longest selector match + body fallback
README Repositioning
Hero tagline: Built for the pages other scrapers can't touch
First screen highlights 3 exclusive capabilities (Canvas, Font, Captcha)
Tests
275 → 363 tests, no regressions
You can’t perform that action at this time.