A simple and fast website screenshot tool - WebShotr
Project description
WebShotr 📸
A simple, fast, and elegant website screenshot tool built with Python and Playwright.
✨ Features
- 🚀 Fast and Reliable - Built on Playwright for robust browser automation
- 🌐 Multi-Browser Support - Chromium, Firefox, and WebKit
- 📱 Mobile Screenshots - Capture mobile viewport screenshots
- 📄 Full Page Capture - Take full-page screenshots beyond the viewport
- 🎯 Element Selection - Screenshot specific elements using CSS selectors
- 📁 Batch Processing - Process multiple URLs from command line or file
- ⚙️ Configurable - Extensive customization options
- 💻 CLI & API - Use from command line or integrate into Python projects
- 🎨 Beautiful CLI - Elegant command-line interface with colored output
🛠️ Installation
Prerequisites
- Python 3.7+
- pip
Install WebShotr
pip install webshotr
Install Playwright Browsers
After installing WebShotr, you need to install the browser binaries:
playwright install
🚀 Quick Start
Command Line Usage
Take a screenshot of a website:
webshotr https://example.com
See the beautiful banner and help:
webshotr
Python API Usage
from webshotr import WebShotr
# Create WebShotr instance
snap = WebShotr()
# Take a screenshot
snap.screenshot("https://example.com", "screenshot.png")
📖 Usage Examples
CLI Examples
Single Website
# Basic screenshot
webshotr https://example.com
# Custom output path
webshotr https://example.com --output my-screenshot.png
# Full page screenshot
webshotr https://example.com --full-page --output fullpage.png
Mobile Screenshots
# Mobile viewport
webshotr https://example.com --mobile --output mobile.png
# Custom mobile dimensions
webshotr https://example.com --width 375 --height 812 --output iphone.png
Multiple Websites
# Multiple URLs
webshotr https://google.com https://github.com --output screenshots/
# From file
webshotr --list-file urls.txt --output screenshots/
Advanced Options
# Custom browser, quality, and delay
webshotr https://example.com \
--browser firefox \
--quality 90 \
--delay 3 \
--timeout 30
# Screenshot specific element
webshotr https://example.com \
--element "#main-content" \
--output element.png
# Use configuration file
webshotr https://example.com --config config.json
Python API Examples
Basic Usage
from webshotr import WebShotr, screenshot
# Quick function
screenshot("https://example.com", "output.png")
# With options
screenshot("https://example.com", "output.png",
full_page=True, mobile=True)
Advanced Usage
from webshotr import WebShotr
# Create instance with custom settings
snap = WebShotr(
width=1920,
height=1080,
browser_type="firefox",
headless=True
)
# Take screenshots
snap.screenshot("https://example.com", "desktop.png")
snap.screenshot("https://example.com", "mobile.png", mobile=True)
# Multiple URLs
urls = ["https://google.com", "https://github.com"]
results = snap.screenshot_multiple(urls, "screenshots/")
print(f"Saved {len(results)} screenshots")
Async Usage
import asyncio
from webshotr import WebShotr
async def take_screenshots():
async with WebShotr() as snap:
# Async screenshot
result = await snap.screenshot_async(
"https://example.com",
"async-screenshot.png"
)
print(f"Screenshot saved: {result}")
# Run async function
asyncio.run(take_screenshots())
⚙️ Configuration
Command Line Options
| Option | Description | Default |
|---|---|---|
--output, -o |
Output file path or directory | Auto-generated |
--width, -w |
Viewport width | 1280 |
--height, -h |
Viewport height | 720 |
--full-page, -f |
Capture full page | False |
--mobile, -m |
Use mobile viewport | False |
--quality, -q |
JPEG quality (1-100) | Auto |
--delay, -d |
Delay before screenshot (seconds) | 0 |
--element, -e |
CSS selector for specific element | None |
--browser, -b |
Browser engine (chromium/firefox/webkit) | chromium |
--user-agent, -ua |
Custom user agent string | Auto |
--timeout, -t |
Page load timeout (seconds) | 30 |
--headless/--no-headless |
Run in headless mode | True |
--list-file, -l |
File containing list of URLs | None |
--config, -c |
JSON configuration file | None |
--verbose, -v |
Verbose output | False |
Configuration File
Create a config.json file:
{
"width": 1920,
"height": 1080,
"headless": true,
"timeout": 30000,
"browser_type": "chromium",
"user_agent": "Mozilla/5.0 (compatible; WebShotr/1.0)"
}
Use it with:
webshotr https://example.com --config config.json
URL List File
Create a urls.txt file:
https://example.com
https://google.com
# This is a comment
https://github.com
Use it with:
webshotr --list-file urls.txt --output screenshots/
🐍 API Reference
WebShotr Class
WebShotr(
width: int = 1280,
height: int = 720,
headless: bool = True,
timeout: int = 30000,
browser_type: str = "chromium",
user_agent: Optional[str] = None
)
Methods
screenshot(url, output=None, **kwargs)- Take a screenshotscreenshot_multiple(urls, output_dir="screenshots", **kwargs)- Multiple screenshotsscreenshot_async(url, output=None, **kwargs)- Async screenshotscreenshot_multiple_async(urls, output_dir="screenshots", **kwargs)- Async multiple
Convenience Functions
from webshotr import screenshot, screenshot_multiple
# Quick screenshot
screenshot("https://example.com", "output.png")
# Multiple screenshots
screenshot_multiple(urls, "screenshots/")
🔧 Development
Setup Development Environment
# Clone the repository
git clone https://github.com/abderrahimghazali/webshotr.git
cd webshotr
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in development mode
pip install -e .
# Install development dependencies
pip install pytest pytest-asyncio flake8
# Install Playwright browsers
playwright install
Running Tests
# Run all tests
pytest tests/ -v
# Run specific test file
pytest tests/test_cli.py -v
# Run with coverage
pytest tests/ --cov=webshotr
Code Style
# Check code style
flake8 webshotr/ tests/
# Format code (if you have black installed)
black webshotr/ tests/
📝 Requirements
- Python 3.7+
- playwright >= 1.40.0
- Pillow >= 9.0.0
- click >= 8.0.0
- aiofiles >= 22.0.0
🤝 Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
🙏 Acknowledgments
- Built with Playwright for reliable browser automation
- Inspired by the need for a simple, elegant screenshot tool
- Thanks to all contributors and users
📬 Support
Made with ❤️ by AbderrahimGHAZALI
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 webshotr-1.0.0.tar.gz.
File metadata
- Download URL: webshotr-1.0.0.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b53212db7574c534feacf8b6299ef06bcf8f57cf5525a94826773ddb5de7d1ad
|
|
| MD5 |
01dbaa745597e415f90e81d1fd1314a4
|
|
| BLAKE2b-256 |
6f2cec16b253e7d550d7a4c5256acc0a7876bd4afbf96b4f6bcbba87fcdc25e2
|
File details
Details for the file webshotr-1.0.0-py3-none-any.whl.
File metadata
- Download URL: webshotr-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d27d5c6b8399914637b57ea8c87dc85c5729575cc30ec5a3675ba163f3473fbe
|
|
| MD5 |
8e2c85946924dadd5dc2fc416ef1a216
|
|
| BLAKE2b-256 |
2d280ca7cace032916663e4974f166c239fd8233a51badd64cb964febb26b346
|