Skip to content

v0.4.0

Choose a tag to compare

@2913636 2913636 released this 06 Jul 14:17

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