mirror of
https://git.zavage.net/Zavage-Software/wabot.git
synced 2026-07-21 13:06:08 -06:00
52 lines
1.7 KiB
ReStructuredText
52 lines
1.7 KiB
ReStructuredText
Persistent sessions
|
|
===================
|
|
|
|
The flagship feature: a browser created with a ``session`` name survives
|
|
the Python process, and any later process can pick it up by name.
|
|
|
|
.. code-block:: python
|
|
|
|
import wabot
|
|
|
|
bot = wabot.browser(session="scraper1", browser="firefox")
|
|
bot.driver.get("https://example.com/login")
|
|
# ... log in, then the process exits; the browser stays open ...
|
|
|
|
# hours later, a different process:
|
|
bot = wabot.browser(session="scraper1", browser="firefox")
|
|
print(bot.driver.current_url) # still logged in
|
|
|
|
How it works
|
|
------------
|
|
|
|
A session is just ``(executor_url, session_id)`` stored as JSON in the
|
|
platform data dir. Nothing is pickled. The browser is hosted by a driver
|
|
service that outlives Python:
|
|
|
|
* **Managed (default):** wabot spawns chromedriver/geckodriver as a
|
|
detached process and records its port and pid.
|
|
* **External:** pass ``host="http://localhost:4444"`` to use a Selenium
|
|
Grid or standalone server you run yourself. wabot then never kills the
|
|
server — only the session.
|
|
|
|
Reattaching constructs a driver that *adopts* the saved session id
|
|
instead of creating a new session. Dead sessions (browser closed, server
|
|
gone, record older than 3 days) are pruned automatically and a fresh
|
|
browser is created instead.
|
|
|
|
Housekeeping
|
|
------------
|
|
|
|
.. code-block:: python
|
|
|
|
wabot.sessions() # ["scraper1", ...]
|
|
wabot.destroy("scraper1") # quit browser, stop managed service, forget
|
|
|
|
Selenium Grid caveat
|
|
--------------------
|
|
|
|
Grid 4 kills idle sessions after **5 minutes** by default. If your
|
|
process sleeps longer between reattaches, raise it::
|
|
|
|
java -jar selenium-server.jar standalone --session-timeout 86400
|