Skip to main content

A Python module for managing Selenium Chrome sessions across multiple Docker containers.

Project description

Docker Chrome Session Manager

A Python module for managing Selenium Chrome sessions across multiple Docker containers. It provides dynamic container selection, session configuration persistence, and safe concurrent access for browser automation tasks.

Features

  • Dynamic Container Management: Automatically selects available Selenium Chrome containers from a provided list.
  • Session Configuration: Supports customizable browser settings such as user agent, locale, screen resolution, timezone, and additional Chrome options.
  • Persistent Sessions: Stores session configurations in JSON files for reuse across sessions.
  • Concurrent Access: Uses file locking to ensure safe access to session configurations.
  • Logging: Comprehensive logging for debugging and monitoring session activities.
  • Extensible: Easily integrates with Dockerized Selenium Chrome instances and supports custom configurations.

Installation

Prerequisites

  • Python 3.9 or higher
  • Docker and Docker Compose
  • Poetry (optional, for dependency management)

Steps

Direct installation

Just use pip:

pip install docker-chrome-session-manager

Or Poetry:

poetry add docker-chrome-session-manager

Manual installation

  1. Clone the repository:

    git clone https://github.com/FINWAX/docker-chrome-session-manager.py.git
    cd docker-chrome-session-manager
    
  2. Install dependencies: Using Poetry (recommended):

    poetry install
    

    Alternatively, using pip:

    pip install -r requirements.txt
    
  3. Set up Docker containers: Start the Selenium Chrome containers using the provided docker-compose.yml:

    docker-compose up -d
    

    This will start two Selenium Chrome containers on ports 4444 and 4445, with session data stored in the ./sessions directory.

Usage

The docker_chrome_session_manager module provides a SessionManager class to manage browser sessions. Below is an example of how to use it:

import logging
from docker_chrome_session_manager import SessionManager

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# Initialize SessionManager with container URLs
container_paths = ["http://localhost:4444", "http://localhost:4445"]
manager = SessionManager(container_paths=container_paths)

# Create a session configuration
resource_id = "test-session-123"
config = manager.provide_session_config(
    resource_id=resource_id,
    locale="en-US",
    timezone="America/New_York",
    extra_chrome_options=["--disable-notifications"]
)

# Start a browser session
driver = manager.get_remote_driver(resource_id, config)
if driver:
    try:
        driver.get("https://example.com")
        print(f"Page title: {driver.title}")
    finally:
        driver.quit()
        manager.forget_session_config(resource_id)  # Clean up session

See the example/example.py file for a more detailed example that demonstrates multiple sessions with different configurations.

Configuration

The SessionManagerConfig dataclass provides global settings for the SessionManager. Key parameters include:

  • config_dir: Directory for storing session configuration files (default: config/sessions).
  • session_dir: Directory for browser session data (default: /sessions in Docker containers).
  • screen_resolutions: Available screen resolutions (e.g., (1920, 1080), (1280, 720)).
  • default_locale: Default browser locale (e.g., en-US).
  • user_agent_platforms: Platforms for generating user agents (e.g., desktop).
  • file_lock_timeout: Timeout for file locking (default: 10 seconds).
  • container_response_timeout: Timeout for container status checks (default: 3 seconds).

The SessionConfig dataclass allows customization of individual sessions, including:

  • user_agent: Custom user agent string.
  • locale: Browser locale (e.g., en-US, ru-RU).
  • resolution: Screen resolution as a tuple (e.g., (1920, 1080)).
  • timezone: Timezone ID (e.g., America/New_York).
  • extra_chrome_options: Additional Chrome command-line options.

Running the Example

To run the example script provided in example/example.py:

  1. Ensure Docker containers are running:

    docker-compose -f example/docker-compose.yml up -d
    
  2. Run the example script:

    poetry run python example/example.py
    

    or, if using pip:

    python example/example.py
    

The script will create two browser sessions with different configurations, navigate to specified URLs, and log session details.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docker_chrome_session_manager-1.0.4.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docker_chrome_session_manager-1.0.4-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file docker_chrome_session_manager-1.0.4.tar.gz.

File metadata

File hashes

Hashes for docker_chrome_session_manager-1.0.4.tar.gz
Algorithm Hash digest
SHA256 30736c14513f3b64643aaee6844e80e2a33db307da81fb99eedfb44ac2ecc952
MD5 57b9673850c06786cc2559c6100a44dd
BLAKE2b-256 b668ca36ece0e53c0626571cbda024d0f4c98b2f79ace573d710245147ce9383

See more details on using hashes here.

File details

Details for the file docker_chrome_session_manager-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for docker_chrome_session_manager-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 bd252761abacc36412a0da7ca7c20f3ad637cd2a8d6eb979e441ca7b5142d02f
MD5 b4167748a0f8a11cb296dd7828bf20c0
BLAKE2b-256 73f029950280d12206e117cc4dcf3e45c7f16e72d58e75d1cf957605eece33e3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page