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
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 stringheadless: Run Chrome in headless mode (default: True)chrome_driver_path: Path to chromedriver executableadditional_args: List of extra Chrome argumentsremote_url: Use remote Selenium server if provided
Methods
get_driver(): Returns a Selenium WebDriver instancequit(): Quits the driver and cleans up user data
Running Tests
python -m unittest discover tests
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file headless_driver-0.1.2.tar.gz.
File metadata
- Download URL: headless_driver-0.1.2.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
917f4da2c84919d8c701a4b675cc18c5822ccb2dd851b9358ff5559bdc6c5a02
|
|
| MD5 |
20f5fc4551ab56374f477efc8f05436b
|
|
| BLAKE2b-256 |
3fa046c1722a0fe7d3d3ef0bad215cadce2369458d4e5cd7f4c0ec6c17e73723
|
File details
Details for the file headless_driver-0.1.2-py3-none-any.whl.
File metadata
- Download URL: headless_driver-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
140d88d1cc3976d9d70b39ab2bdd778655da2271803ea999e2d34319f1679000
|
|
| MD5 |
e4d1500c2056e2427b102ef73759e659
|
|
| BLAKE2b-256 |
2f46dbbf8ab65725fbd5d2d956528c8906985f8c1d946842ae318d605d8bde1f
|