Repository navigation
Releases: feder-cr/invisible_selenium
Releases · feder-cr/invisible_selenium
Release list
v0.3.1
Fixed
- Pointer actions answer once the page has handled the event. With the
firefox-39 engine, a press, a move or a release returns after the page's
listeners have run. Before, the next call could reach the page first: under
load a short drag-and-drop lost its drop, and a script read right after a
double click could count one click short.
Changed
- A click that opens
alert()is handled by the engine. The engine ends
its own wait when a dialog opens, so this package no longer carries a hook
for it.
v0.3.0
Changed
- The Juggler client comes from
invisible-core(38.34.0,
invisible_core.juggler), the one copy every invisible_ wrapper shares.
This package carried its own, taken from invisible-playwright on
2026-09-24, and it now has the fixes made there since:- typing into a field waits the moment a person takes after focusing it,
and longer while the field is still changing, so a page that writes into
the field when it gets the focus no longer overwrites what is typed; - a picked file reaches the input after the hesitation a person takes to
choose it; - an action that needs no point on the screen (setting the files of a
hidden<input type=file>behind a styled button, focusing or
dispatching an event on a hidden element) no longer waits for the element
to become visible until it times out; - every page of a session numbers its own clicks, fields and typed strings,
so two tabs never draw the same movement.
- typing into a field waits the moment a person takes after focusing it,
- A preference value that is not a bool, an int, a float or a string is
refused with aTypeErrornaming it, instead of being written as its
text. - The license is MIT only. The two files taken from Playwright's driver
(Apache-2.0) moved to invisible-core with the client.
v0.2.2
Changed
- The window a page reads is the one Windows Firefox draws. Through
invisible-core38.33.0 and the firefox-38 engine. A maximized window
answersscreenX-8 and anouterWidth16 wider thanscreen.availWidth
at 100%, as Windows Firefox does, where it answered 0 and the work area; its
content starts where retail's does at every display scale; a popup answers
its own size, frame and position, and one opened without a position is
placed where Windows Firefox places it.
Removed
- The pins
screen.chrome_w,screen.chrome_h,screen.window_xand
screen.window_y. The window followsscreen.dpr, which takes 1, 1.25,
1.5 or 2.
v0.2.1
Changed
- The screen a page reads is in CSS pixels. Through
invisible-core
37.33.0 and the firefox-37 engine. A 1920x1080 panel at 125% reports
screen.width1536 andscreen.height864, as Firefox on that monitor
does. Before, it reported the panel's device pixels. The default
viewport is derived the same way.
Fixed
- On Linux the virtual display keeps X access control on. The Xvfb
display opened for a headed session without a screen used to run with
access control off (-ac), so any local process could connect to it and
read or drive the browser window. It now gets a private session cookie,
handed only to the browser, and removed when the session stops.
v0.2.0
Changed
- The language of
locale="auto"is the real Firefox of the egress
country, by share. Throughinvisible-core36.33.0 (the required version
is exact, as before). A country used to map to one country tag (de-DE)
that no Firefox build has, so a German egress sentde-DE,de;q=0.9,...
where a German Firefox sendsde,en-US;q=0.9,en;q=0.8, and every session
of a country spoke the same language. Now each country carries the Firefox
builds people there run and their share, from Mozilla's Firefox Public
Data Report (Belgium: French 40%, Dutch 31%, US English 22%), and the egress
IP picks one: the same address always gets the same language, and the
addresses of a country spread over its builds as measured. - An explicit
localeisnavigator.language.locale="en-AU"reports
en-AU, en-US, en(it reporteden-US, en), and"fr-FR"reports
fr-FR, fr, en-US, en(it reportedfrfirst): the requested tag goes
first and Firefox's own table gives the tail.
v0.1.3
invisible-selenium 0.1.3 is on PyPI.
Artifacts and checksums: https://pypi.org/project/invisible-selenium/0.1.3/
v0.1.2
Changed
- Values a user picks are committed by Firefox itself.
Select, a click
on an<option>,send_keyson a file input andclear()on a date or time
field hand the choice to the engine's native input commands
(Page.selectOptions,Page.setUserInput,Page.setFileInputFiles), which
take the same paths as the dropdown, the date box and the file picker. The
page getsinputandchangewith the shape a user's pick gives, inside
shadow roots too, and nothing when the choice did not change. The command
this used to call,Page.dispatchTrustedInputEvents, is gone from the
engine, so this needs the engine that ships the new commands and lands with
the core pin that seals it.
Fixed
- A click lands where it was asked on a page with a saved zoom, and on
Linux behind a SOCKS proxy real sites see WebRTC working: both are fixes in
the firefox-35 engine.
Requires
invisible-core35.32.0, which seals the firefox-35 engine. This version
does not run on firefox-34, and earlier versions do not run on firefox-35.
v0.1.1
Fixed
clear()leaves the field, andchangecomes from Firefox, once. It
deleted the text and then asked the engine for achangewhile the field
still had focus: cancelable and composed, followed by Firefox's own at the
next blur, and sent even to a contenteditable, which never fires one. Inside
a shadow root that request failed andclear()raised after emptying the
field. It now runs Selenium's unfocusing step after the Delete, sochange
comes from the blur, as it does for a user.- On Linux, a headless session starts on its own virtual display. The
display counted as ready as soon as its lockfile existed, which Xvfb writes
before it opens its sockets, so sessions started together could land on
each other's display and the browser failed withcannot open display.
The display is also no longer reachable over TCP.
Requires
invisible-core34.32.0, which carries the display fix. Same engine
(firefox-34).
v0.1.0
First version: a replica of invisible_playwright 0.25.7 with Selenium's contract.
webdriver.Firefoxlaunches the same patched Firefox with the same profile,
proxy, geography and hidden-surface handling asInvisiblePlaywright, and
drives it over Juggler: no geckodriver, no Marionette,navigator.webdriver
stays false.- Selenium's public API:
WebDriver,WebElement,ShadowRoot,SwitchTo,
Alert,ActionChains,ScrollOrigin,By,Keys,WebDriverWait,
expected_conditions,Select,Timeoutsand the exception hierarchy. - Every click, hover and drag travels along a path drawn from the session seed;
keys carry the session's typing rhythm; input events are trusted. execute_scriptruns in the page's world and reads its result back through
the engine's Debugger, without running a serializer the page can observe.