Skip to main content

Lightweight Python library to manage Selenium Chrome WebDriver in headless mode with proxy, stealth, auto-driver installation, multi-driver management, download handling, and advanced search scraping utilities.

Project description

PyPI version License: MIT Python Versions Downloads

headless-driver

Lightweight Python pacakge to manage Selenium WebDriver in headless mode with proxy support, stealth tweaks, auto-driver installation, multi-driver management, download handling, and advanced search-scraping utilities

Features

  • Headless and non-headless Chrome management
  • Temporary or persistent user-data directories (profiles)
  • HTTP and SOCKS proxy support
  • Optional stealth mode (integrates with selenium-stealth when available)
  • Automatic ChromeDriver install (via webdriver-manager) as an optional dependency
  • Download folder management and automatic cleanup
  • Screenshot and PDF export via Chrome DevTools
  • Multi-driver manager to run many isolated browser instances
  • Advanced search scraper (DuckDuckGo default) with title, snippet, favicon, cached link, and batch search/export support

Installation

pip install headless-driver

Usage

from headless import Headless

hl = Headless()
driver = hl.get_driver()
driver.get("https://example.com")
print(driver.title)
hl.quit()

Or use as a context manager:

from headless import Headless

with Headless() as driver:
    driver.get("https://example.com")
    print(driver.title)

Search

from headless import SearchScraper, Headless

hl = Headless()
driver = hl.get_driver()

scraper = SearchScraper(driver=driver, max_results=5)

results = scraper.search("Nuhman PK github")
print(results)

Stealth

from headless import ExtendedHeadless

hl = ExtendedHeadless(stealth=True)

driver = hl.get_driver()
driver.get("https://example.com")

print(driver.title)

hl.quit()

Proxy

from headless import ExtendedHeadless

hl = ExtendedHeadless(proxy="socks5://127.0.0.1:9050")

driver = hl.get_driver()
driver.get("https://example.com")

print(driver.title)

hl.quit()

Take Screen / Export PDF

from headless import ExtendedHeadless

hl = ExtendedHeadless(download_dir="/tmp/hd_downloads")
d = hl.get_driver()

d.get("https://example.com")

hl.screenshot("/tmp/example.png")
hl.save_pdf("/tmp/example.pdf")

hl.quit()

Auto Install Driver

from headless import ExtendedHeadless

hl = ExtendedHeadless(auto_install=True)
d = hl.get_driver()

d.get("https://example.com")

hl.screenshot("/tmp/example.png")
hl.save_pdf("/tmp/example.pdf")

hl.quit()

Multi driver manager

from headless import MultiDriverManager

mgr = MultiDriverManager()
a = mgr.create("bot1", stealth=True, auto_install=True)
b = mgr.create("bot2", proxy="http://1.2.3.4:3128", download_dir="/tmp/d2", auto_install=True)
da = a.get_driver()
db = b.get_driver()
mgr.quit_all()

Advanced scraper

from headless import AdvancedSearchScraper

scr = AdvancedSearchScraper(headless_options={"headless": True}, max_results=5)

res = scr.search("python headless")

batch = scr.search_batch(["python headless", "selenium stealth"], max_workers=2)

scr.export("results.json")
scr.quit()

API Documentation

Headless class

Headless(
    user_data_dir: Optional[str] = None,
    window_size: Tuple[int, int] = (1920, 1080),
    user_agent: Optional[str] = None,
    headless: bool = True,
    chrome_driver_path: Optional[str] = '/opt/homebrew/bin/chromedriver',
    additional_args: Optional[List[str]] = None,
    remote_url: Optional[str] = None,
)
  • user_data_dir: Path for Chrome user data (temporary if not provided)
  • window_size: Browser window size (default: 1920x1080)
  • user_agent: Custom user agent string
  • headless: Run Chrome in headless mode (default: True)
  • chrome_driver_path: Path to chromedriver executable
  • additional_args: List of extra Chrome arguments
  • remote_url: Use remote Selenium server if provided

Methods

  • get_driver(): Returns a Selenium WebDriver instance
  • quit(): Quits the driver and cleans up user data

Running Tests

python -m unittest discover tests

Happy coding 🚀

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

headless_driver-0.1.3.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

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

headless_driver-0.1.3-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file headless_driver-0.1.3.tar.gz.

File metadata

  • Download URL: headless_driver-0.1.3.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for headless_driver-0.1.3.tar.gz
Algorithm Hash digest
SHA256 46c718cb644cb9ab4922056651eed9bc09565cf1eeb9443dd7de4fecedc9120e
MD5 f8c09c1da5809d4dde742de1aa48c1ed
BLAKE2b-256 b76a16d9aae24e5eaf0568c5cebc060d8aa93145d671da8b921203c185831792

See more details on using hashes here.

File details

Details for the file headless_driver-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for headless_driver-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 89422fd8e87544664be3ec030456d12bebe7efb5ea5e7fda9e4876f6214bc513
MD5 123fe220c82ff90aa74639674ae123ee
BLAKE2b-256 a6192f22f47d337ff01185c92f04402a04286d90051a5548976e0168cc9f88ce

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