A library for human-like interactions in Playwright automation, uses Patchright to avoid bot detection and human-like cursors and typing interactions
Project description
Humanization-Playwright
A Python library for simulating human-like browser interactions (mouse movements, typing, clicking, etc.) in automation scripts. Built on top of Patchright, a patched and undetected version of Playwright, this library helps evade bot detection by adding randomness, Bezier curve-based mouse paths, variable delays, and other human-mimicking behaviors. Ideal for web scraping, testing, or automation tasks requiring stealth.
Features
- Human-like Mouse Movements: Uses cubic Bezier curves with jitter and pauses for natural paths.
- Typing and Backspacing: Variable speeds, pauses after spaces, and occasional hesitations.
- Clicking and Hovering: Supports left/right/middle clicks with delays.
- Scrolling and Dragging: Smooth, inertia-based scrolling and drag-and-drop.
- Stealth Integration: Leverages Patchright's patches for undetection (e.g., Runtime.enable leak fixes).
- Configurable: Adjust speed, humanization level, typing CPM, and stealth mode.
- Async Support: Fully asynchronous for efficient Playwright/Patchright usage.
- New Additions: Human waits, mouse overshoot corrections, and more for enhanced realism.
This library is designed as a drop-in enhancement for Patchright scripts, focusing on Chromium-based browsers (Firefox/Webkit not supported).
Installation
Install via PyPI:
pip install humanization-playwright
After installation, set up Patchright's browser for optimal undetection:
playwright install chrome # Recommended for better stealth than Chromium
Requirements:
- Python 3.8+
- Patchright (automatically installed as a dependency)
- Loguru (for logging, also a dependency)
No additional packages needed; avoid installing extras to maintain stealth.
Usage
Basic Example
Launch a stealthy browser and perform human-like actions:
import asyncio
from Humanization import Humanization, HumanizationConfig
async def main():
# Configure for slow, highly humanized actions with stealth
config = HumanizationConfig(
fast=False,
humanize=True,
characters_per_minute=400,
backspace_cpm=800,
timeout=10000,
stealth_mode=True
)
# Launch undetected context (uses Patchright recommendations)
Humanization = await Humanization.undetected_launch("/path/to/user_data_dir", config)
# Navigate to a site
await Humanization.page.goto("https://example.com")
# Locate an element
search_input = Humanization.page.locator("input#search")
# Human-like typing
await Humanization.type_at(search_input, "Hello, world!")
# Human-like click
submit_button = Humanization.page.locator("button#submit")
await Humanization.click_at(submit_button)
# Scroll down with inertia
await Humanization.scroll_to(delta_y=500)
# Drag-and-drop example
draggable = Humanization.page.locator("#draggable")
dropzone = Humanization.page.locator("#dropzone")
await Humanization.drag_to(draggable, dropzone)
# Random human pause
await Humanization.human_wait(min_sec=2, max_sec=5)
# Close the context
await Humanization.page.context.close()
asyncio.run(main())
Advanced Configuration
The HumanizationConfig dataclass allows fine-tuning:
fast: bool - Use fewer steps and shorter delays for quicker actions (default: True).humanize: bool - Add jitter, pauses, and hesitations (default: True).characters_per_minute: float - Typing speed (default: 600).backspace_cpm: float - Backspacing speed (default: 1200).timeout: float - Milliseconds for element visibility/focus checks (default: 5000).stealth_mode: bool - Apply Patchright's undetection defaults (default: True).
Pass custom params to methods, e.g.:
await Humanization.move_to(locator, offset_x=10, offset_y=20, input_mode=True)
Stealth Best Practices
- Always use
Humanization.undetected_launchfor persistent contexts. - Run headless=False and avoid custom user agents/headers.
- Combine with Patchright's Chrome channel for maximum undetection.
- Test on anti-bot sites to verify.
Logging
Uses Loguru for debug/info/error logs. Logs to Humanization.log by default (rotates at 100 MB).
Development and Contributing
- Clone the repo:
git clone https://github.com/saksham-personal/humanization-patchright.git - Install editable:
pip install -e . - Run tests:
pytest. - Build:
python -m build
Contributions welcome! Open issues/PRs on GitHub for bugs/features.
License
This project is licensed under the MIT License. See the LICENSE file for details.
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 humanization_playwright-0.1.2.tar.gz.
File metadata
- Download URL: humanization_playwright-0.1.2.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b05d5d7db5a283a8448d5e00f23626e367ccd370af30c286abee82e5e5bce7f
|
|
| MD5 |
b6e53cece53cb772f714c3069ee9bc16
|
|
| BLAKE2b-256 |
11190c37b9676bccb71df8d3f99c9fc9104f660b3bc99feb25f08c9076a73996
|
File details
Details for the file humanization_playwright-0.1.2-py3-none-any.whl.
File metadata
- Download URL: humanization_playwright-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d2a476c96f1276c88468245f10215582ec727916baf9a64729fc24480b71d42
|
|
| MD5 |
9e3d0d088e81886475db19a0bf274fa7
|
|
| BLAKE2b-256 |
33b5227fb68b1e6174c83f1175678373c2facfaabbce506458bc87ad1d05a484
|