CloakHQ
58ccdb683c
fix(humanize): use shared deadline for timeout budget in frame and ElementHandle methods ( #307 )
...
Frame-level methods (click, dblclick, hover, dragAndDrop) passed the raw
timeout to each sequential operation independently, causing 3x actual
wait time when elements don't exist. ElementHandle methods had a similar
2x issue between actionability and pointer-events checks.
Port the deadline + remainingMs() pattern already used by page-level
methods. Also fix bot detection test selector after site added a hidden
duplicate submit button.
2026-05-24 23:12:07 +02:00
Cloak-HQ and GitHub
b0ea580cba
feat(humanize): add Playwright-style actionability checks ( #228 )
...
* feat(humanize): add Playwright-style actionability checks to all interaction methods
Humanized locator/page methods now perform pre-action validation matching
Playwright's native behavior: attached, visible, enabled, editable, stable,
and receives-pointer-events checks with retry loop and backoff.
- New error hierarchy: ActionabilityError base with ElementNotAttachedError,
ElementNotVisibleError, ElementNotStableError, ElementNotEnabledError,
ElementNotEditableError, ElementNotReceivingEventsError
- force=True parameter skips all actionability checks (matches Playwright)
- Shared deadline across all steps (checks + scroll + stable + pointer)
- Post-scroll stability check only runs when scroll actually happened
- Chained methods (type/fill/check/uncheck/press) skip inner click checks
but still run pointer-events check at actual click coordinates
- Frame methods now forward kwargs (force, timeout, human_config)
- Locator patches forward force via _forward_kwargs
- Python sync + async, JS/TS implementation
* fix(humanize): forward human_config in all chained methods, use evaluate args in handle pointer checks
- Add human_config=kwargs.get("human_config") to check/uncheck/select_option/press inner calls (sync+async+JS)
- Convert check_pointer_events_handle from f-string interpolation to evaluate args pattern (sync+async+JS)
* fix(humanize): strip custom kwargs before forwarding to Playwright select_option
originals.select_option(**kwargs) passes human_config/force to Playwright
which rejects unknown kwargs with TypeError.
2026-05-15 20:57:17 +02:00
CloakHQ
0d41a4f023
refactor(js): extract HumanActionOptions type, fix frame check/uncheck error handling, align SOCKS5 log level
...
- Extract HumanActionOptions type alias to replace ~40 inline copies
- Frame check/uncheck: let isChecked errors propagate instead of silently clicking non-checkbox elements
- SOCKS5 credential log: console.debug → console.info (parity with Python logger.info)
- Add contributors to README
2026-05-11 00:23:31 +02:00
Eternal and CloakHQ
80d9f7c14e
feat(js): add types to humanized method options ( #205 )
...
Replace `any` with proper TypeScript types on all humanized method options
(Playwright, Puppeteer, ElementHandle, Frame). Support flat per-call config
overrides alongside existing `human_config` style. Internalize `humanIdle`
duration computation with backward-compatible overloads.
Co-authored-by: Eternal <chasezou09@gmail.com >
2026-05-10 23:50:01 +02:00
114b3c826b
fix(js): preserve iframe scope in humanized frame actions ( #201 )
...
fix(js): preserve iframe scope in humanized frame actions
Frame actions (click, type, fill, etc.) now resolve selectors through frame.locator() instead of delegating to page.* methods, fixing iframe-scoped interactions.
Closes #184
Co-authored-by: manaskarra <manas.karra@gmail.com >
2026-05-10 18:13:29 +02:00
lilos and GitHub
661b873dad
feat: per-call human_config, timeout forwarding, humanized scrollIntoViewIfNeeded ( #183 )
2026-04-28 20:34:17 +02:00
lilos and GitHub
2be8cdcc03
feat(humanize): add Playwright ElementHandle support and fix async tests ( #133 )
2026-04-10 22:18:14 +02:00
lilos and GitHub
7afe59435e
feat: Add Puppeteer humanize support and fix Playwright humanize gaps ( #129 )
...
- Add full Puppeteer humanize implementation (page, frame, element handle patching)
- Fix critical Playwright gaps: page.pressSequentially, page.tap, page.clear
- Fix frame-level patching: frame.pressSequentially, frame.tap
- Add comprehensive stealth tests for Puppeteer
- Update SLOW test suite to use correct humanize: true API
- Add 4 new tests validating fixed Playwright methods
2026-04-09 20:49:20 +02:00
lilos
ccda93669e
feat(humanize): implement CDP Isolated Worlds and trusted keyboard events ( fixes #110 )
2026-04-06 01:43:46 +02:00
lilos
7bf8836683
feat: add human-like behavioral layer (humanize option)
...
Bezier mouse curves, per-character typing with mistype simulation,
smooth micro-step scrolling, idle micro-movements between actions.
Supports both sync and async Playwright APIs. Patches page, frame,
context, browser, and Locator class methods.
Two presets: 'default' (normal speed) and 'careful' (slower, deliberate).
Configurable via HumanConfig dataclass / interface with full override support.
Bug fixes (from PR review):
- fill()/clear(): platform-aware select-all (Meta+a on macOS, Control+a elsewhere)
- sync Locator check()/uncheck(): wrap mouse_move in RawMouse-compatible object
- resolve_config(): raise error on unknown preset name
- Lazy-load human.config via __getattr__ in __init__.py
- humanPreset typed as 'default' | 'careful' literal union
- browser.newPage() patches implicit context
Tests: Python 36/36, JS Vitest 34/34, visual Python 17/17, JS 13/13
2026-03-08 12:49:42 +03:00