mirror of
https://github.com/feder-cr/invisible_playwright.git
synced 2026-06-07 08:35:12 +02:00
The Juggler JS in upstream Playwright calls win.windowUtils.jugglerSendMouseEvent at four sites, but when the Juggler was ported FF146 -> FF150 the matching C++ patch to nsIDOMWindowUtils.idl + nsDOMWindowUtils.cpp was dropped. Result: every page.mouse.*, page.click(selector), locator.click(), page.hover(), mouse.wheel() threw "win.windowUtils.jugglerSendMouseEvent is not a function" on first call. The fix is shipped in the patched Firefox source (feder-cr/firefox-stealth): six call sites in juggler/protocol/PageHandler.js and juggler/content/PageAgent.js were swapped to win.synthesizeMouseEvent — a Mozilla chrome-scope helper that is already present in FF150. scrollRectIntoViewIfNeeded was also guarded at the two PageHandler.js sites where it was called unconditionally on the FF150 _linkedBrowser, which no longer exposes that method. This invisible_playwright release adds the regression suite in tests/test_mouse.py (12 cases inspired by microsoft/playwright-python/tests/async/test_click.py), the CHANGELOG, and the version bump. The patched Firefox archive on GitHub Releases must be refreshed before users actually receive the fix; the BINARY_VERSION bump to firefox-2 will land with that asset. Reporter: @trob9 (issue #9) — provided ready-to-apply JS patches, 4-line minimal repro, and confirmed reCAPTCHA v3 = 0.90 holds after the swap.
3.2 KiB
3.2 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.1 - 2026-05-18
Fixed
- Critical: every
page.mouse.*,page.click(selector),locator.click(),page.hover(),mouse.wheel()failed on the patched Firefox 150 binary withwin.windowUtils.jugglerSendMouseEvent is not a function. The Juggler JS was porting calls to a Playwright-specific C++ method that was never landed in the FF146→FF150 port; replaced with the Mozilla chrome-scopewin.synthesizeMouseEventhelper which is present in FF150. Six call sites patched acrossjuggler/protocol/PageHandler.jsandjuggler/content/PageAgent.js. Reporter: @trob9 — #9. _linkedBrowser.scrollRectIntoViewIfNeeded()is now guarded at both call sites inPageHandler.js(dispatchMouseEventanddispatchWheelEvent) — the method is not present on the shipped FF150<browser>element, so the unguarded call threw before the mouse event was dispatched.
Added
tests/test_mouse.py: 12-case regression suite covering every patched code path (mouse.move/click/dblclick/right-click, modifiers, locator.click/hover, wheel, manual mousedown+up, off-viewport move, humanize intermediate moves, scroll-and-click on offscreen element). Test cases inspired bymicrosoft/playwright-python/tests/async/test_click.py.- Community standards:
CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,.github/ISSUE_TEMPLATE/*,.github/PULL_REQUEST_TEMPLATE.md.
Notes
- The Stealthfox humanize Bezier expansion continues to fire intermediate
mousemoveevents; the swap tosynthesizeMouseEventdoes not change the human-trajectory behavior (verified by test). - The reCAPTCHA v3 score (0.90) and FingerprintPro / CreepJS results documented in the README are unaffected —
synthesizeMouseEventis a legitimate Mozilla helper that does not increase the anti-detect surface. - A binary refresh of the patched Firefox archive on GitHub Releases is required for users to receive this fix (the Juggler JS is shipped inside the archive). The
BINARY_VERSIONwill be bumped tofirefox-2in that release.
0.1.0 - 2026-05-13
Added
- Initial public release.
InvisiblePlaywrightsync and async context managers — drop-in replacement forplaywright.sync_api.Browser/async_api.Browser.- StealthFox humanize hook: Bezier-curve mouse trajectories enabled by default.
_fpforgeBayesian fingerprint sampler with ~400 fields per session.- CLI:
invisible-playwright fetch | path | version | clear-cache. - Pinnable fingerprint fields via
pin={...}(seedocs/pinning.md). - SOCKS5 / SOCKS4 / HTTP / HTTPS proxy support with auth.
- Linux x86_64 and Windows x86_64 binary support.