mirror of
https://github.com/feder-cr/invisible_playwright.git
synced 2026-06-13 08:55:12 +02:00
fix: humanize pref namespace + async headless cloak
humanize: the wrapper wrote invisible_playwright.humanize[.maxTime], but the binary's Juggler reads stealthfox.humanize (PageHandler.js gates the Bezier mouse path on it). The old name was a dead no-op, so humanize never fired and every mouse.move teleported the cursor — an automation tell. Renamed across config.py, launcher.py and async_api.py; the mouse test now asserts the on/off contrast instead of a false-green moves>=1. headless (async): InvisiblePlaywright(headless=True) crashed on Windows/macOS. _resolve_headless called make_virtual_display().start() unconditionally, but on Win/macOS that returns None (the binary self-cloaks via DWMWA_CLOAK; only Linux spawns Xvfb), so it died with AttributeError. It also never injected cloak_prefs(), so the window wouldn't have hidden anyway. Mirror the sync launcher: guard `if vd is not None` + inject cloak_prefs() when headless on win32/darwin. Verified on FF150: headless=True loads, exits clean, window fully hidden (no MainWindowHandle / no taskbar entry).
This commit is contained in:
parent
090baa6155
commit
b34ecf2a21
5 changed files with 60 additions and 25 deletions
|
|
@ -29,8 +29,8 @@ def test_get_default_stealth_prefs_random_seed_returns_dict():
|
|||
assert isinstance(prefs, dict)
|
||||
assert len(prefs) > 0
|
||||
# humanize toggle is always set explicitly
|
||||
assert "invisible_playwright.humanize" in prefs
|
||||
assert prefs["invisible_playwright.humanize"] is True
|
||||
assert "stealthfox.humanize" in prefs
|
||||
assert prefs["stealthfox.humanize"] is True
|
||||
|
||||
|
||||
def test_get_default_stealth_prefs_seed_is_deterministic():
|
||||
|
|
@ -50,22 +50,22 @@ def test_get_default_stealth_prefs_different_seeds_differ():
|
|||
def test_humanize_false_disables_prefs():
|
||||
"""humanize=False removes the maxTime knob and flips the toggle to False."""
|
||||
prefs = get_default_stealth_prefs(seed=42, humanize=False)
|
||||
assert prefs["invisible_playwright.humanize"] is False
|
||||
assert "invisible_playwright.humanize.maxTime" not in prefs
|
||||
assert prefs["stealthfox.humanize"] is False
|
||||
assert "stealthfox.humanize.maxTime" not in prefs
|
||||
|
||||
|
||||
def test_humanize_default_sets_max_time_1_5():
|
||||
"""humanize=True -> default maxTime is 1.5s, stored as string."""
|
||||
prefs = get_default_stealth_prefs(seed=42, humanize=True)
|
||||
assert prefs["invisible_playwright.humanize"] is True
|
||||
assert prefs["invisible_playwright.humanize.maxTime"] == "1.5"
|
||||
assert prefs["stealthfox.humanize"] is True
|
||||
assert prefs["stealthfox.humanize.maxTime"] == "1.5"
|
||||
|
||||
|
||||
def test_humanize_float_overrides_max_time():
|
||||
"""Float for humanize is the explicit cap in seconds."""
|
||||
prefs = get_default_stealth_prefs(seed=42, humanize=3.0)
|
||||
assert prefs["invisible_playwright.humanize"] is True
|
||||
assert prefs["invisible_playwright.humanize.maxTime"] == "3.0"
|
||||
assert prefs["stealthfox.humanize"] is True
|
||||
assert prefs["stealthfox.humanize.maxTime"] == "3.0"
|
||||
|
||||
|
||||
def test_extra_prefs_overlay_takes_precedence():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue