Name | browser-captcha-solver JSON |
Version |
1.0.3
JSON |
| download |
home_page | None |
Summary | A Python library for browser-based captcha solving |
upload_time | 2025-07-09 22:00:28 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT License
Copyright (c) 2025 Browser Captcha Solver
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
captcha
recaptcha
hcaptcha
browser
automation
solving
web-scraping
bot-protection
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Browser Captcha Solver
[](https://badge.fury.io/py/browser-captcha-solver)
[](https://pypi.org/project/browser-captcha-solver/)
[](https://opensource.org/licenses/MIT)
A robust Python library for solving captchas through browser automation, providing seamless integration between web captcha services and Python applications.
## Features
- **🌐 Browser Integration**: Automatically opens captchas in your browser for solving
- **🔄 Real-time Communication**: Handles browser-server communication seamlessly
- **🎯 Multiple Captcha Types**: Supports ReCaptcha v2, ReCaptcha v3, hCaptcha, and Cloudflare Turnstile
- **⚡ Threaded HTTP Server**: Non-blocking server for handling multiple requests
- **🛡️ Secure**: Local-only server with automatic cleanup
- **🎨 Easy API**: Simple, intuitive interface for developers
## Installation
```bash
pip install browser-captcha-solver
```
## Quick Start
### Basic Usage
```python
from browser_captcha_solver import CaptchaSolver
# Create solver and start server
with CaptchaSolver() as solver:
# Create a ReCaptcha challenge
challenge = solver.create_challenge(
challenge_type="RecaptchaV2Challenge",
site_key="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI", # Test key
site_domain="example.com",
host="example.com",
explain="Please solve this captcha to continue",
timeout=300
)
# Solve the challenge (opens browser automatically)
result = solver.solve_challenge(challenge, timeout=300)
if result:
print(f"Success! Token: {result}")
else:
print("Failed to solve captcha")
```
### ReCaptcha v3 Usage
ReCaptcha v3 provides invisible verification with risk scoring. This implementation requires explicit user interaction for security and compliance.
```python
from browser_captcha_solver import CaptchaSolver
with CaptchaSolver() as solver:
# Create a ReCaptcha v3 challenge
challenge = solver.create_challenge(
challenge_type="RecaptchaV3Challenge",
site_key="your-recaptcha-v3-site-key", # Get from Google reCAPTCHA Admin
site_domain="your-domain.com",
host="your-domain.com",
secure_token="homepage", # Action name (login, register, etc.)
timeout=300
)
# Solve the challenge - user clicks "Execute ReCaptcha v3" button
result = solver.solve_challenge(challenge, timeout=300)
if result:
print(f"reCAPTCHA v3 token: {result}")
# Use token for server-side verification to get risk score
else:
print("Failed to execute reCAPTCHA v3")
```
### Advanced Usage with Callbacks
```python
from browser_captcha_solver import CaptchaSolver
def on_captcha_solved(challenge):
print(f"Captcha {challenge.id} solved!")
print(f"Token: {challenge.result}")
with CaptchaSolver(port=8080) as solver:
challenge = solver.create_challenge(
challenge_type="HCaptchaChallenge",
site_key="10000000-ffff-ffff-ffff-000000000001", # Test key
site_domain="example.com",
host="example.com"
)
# Solve with callback
result = solver.solve_challenge(
challenge,
timeout=300,
callback=on_captcha_solved
)
```
### Command Line Interface
The package also provides CLI tools for testing:
```bash
# Test ReCaptcha v3 with your site key
python recaptcha_v3_cli.py --site-key YOUR_SITE_KEY --domain localhost --action test
# Run examples
python recaptcha_v3_example.py
# Quick functionality test
python test_recaptcha_v3.py
```
Traditional CLI (if available):
```bash
# Start the server
browser-captcha-solver start --port 8080
# Test ReCaptcha solving
browser-captcha-solver test --type recaptcha
```
## API Reference
### CaptchaSolver
Main class for managing captcha challenges and browser communication.
#### Constructor
```python
CaptchaSolver(port=0, browser_command=None)
```
- `port` (int): HTTP server port (0 for auto-select)
- `browser_command` (str, optional): Custom browser command
#### Methods
##### `create_challenge(challenge_type, site_key, site_domain, host, **kwargs)`
Creates a new captcha challenge.
**Parameters:**
- `challenge_type` (str): Type of captcha ("RecaptchaV2Challenge", "HCaptchaChallenge")
- `site_key` (str): Site key for the captcha service
- `site_domain` (str): Domain where the captcha will be solved
- `host` (str): Host identifier for the challenge
- `**kwargs`: Additional parameters (timeout, explain, type_id, etc.)
**Returns:** `CaptchaChallenge` object
##### `solve_challenge(challenge, timeout=None, callback=None)`
Solves a captcha challenge by opening it in the browser.
**Parameters:**
- `challenge` (CaptchaChallenge): The challenge to solve
- `timeout` (int, optional): Timeout in seconds
- `callback` (callable, optional): Callback function when solved
**Returns:** Solution token (str) or None if failed
##### `list_challenges()`
Returns a list of active challenges.
**Returns:** List of `CaptchaJob` objects
##### `cleanup_expired_challenges()`
Removes expired challenges from memory.
### CaptchaChallenge
Represents a captcha challenge.
#### Attributes
- `id` (str): Unique challenge identifier
- `challenge_type` (str): Type of captcha
- `site_key` (str): Site key for the captcha service
- `site_domain` (str): Domain for the challenge
- `host` (str): Host identifier
- `timeout` (int): Timeout in seconds
- `created` (datetime): Creation timestamp
- `solved` (bool): Whether the challenge is solved
- `result` (str): Solution token
#### Methods
- `get_remaining_timeout()`: Returns remaining timeout in seconds
- `is_expired()`: Returns True if the challenge has expired
## Architecture
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Application │◄──►│ CaptchaSolver │◄──►│ HTTP Server │
│ (Your Code) │ │ │ │ (Port 8080) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
▲ ▲
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Challenge Store │ │ Web Browser │
│ (In Memory) │ │ (User Opens) │
└─────────────────┘ └─────────────────┘
```
## Supported Captcha Types
### ReCaptcha v2
```python
challenge = solver.create_challenge(
challenge_type="RecaptchaV2Challenge",
site_key="your-recaptcha-site-key",
site_domain="example.com",
host="example.com"
)
```
### ReCaptcha v3
```python
challenge = solver.create_challenge(
challenge_type="RecaptchaV3Challenge",
site_key="your-recaptcha-v3-site-key",
site_domain="example.com",
host="example.com",
secure_token="homepage" # Action name for this challenge
)
```
**Note**: ReCaptcha v3 requires explicit user interaction in this implementation. The user needs to click a button to execute the challenge. The returned token contains a risk score (available only during server-side verification).
### hCaptcha
```python
challenge = solver.create_challenge(
challenge_type="HCaptchaChallenge",
site_key="your-hcaptcha-site-key",
site_domain="example.com",
host="example.com"
)
```
### Cloudflare Turnstile
```python
challenge = solver.create_challenge(
challenge_type="TurnstileChallenge",
site_key="your-turnstile-site-key",
site_domain="example.com",
host="example.com"
)
```
### Generic/Manual Captcha
```python
challenge = solver.create_challenge(
challenge_type="ManualChallenge",
site_key="",
site_domain="example.com",
host="example.com",
explain="Please solve the captcha shown in the image"
)
```
## Examples
### Web Scraping Integration
```python
from browser_captcha_solver import CaptchaSolver
import requests
def scrape_with_captcha():
session = requests.Session()
# Detect captcha on page
response = session.get("https://example.com/protected")
if "recaptcha" in response.text.lower():
# Extract site key from HTML
site_key = extract_site_key(response.text)
# Solve captcha
with CaptchaSolver() as solver:
challenge = solver.create_challenge(
challenge_type="RecaptchaV2Challenge",
site_key=site_key,
site_domain="example.com",
host="example.com"
)
token = solver.solve_challenge(challenge)
if token:
# Submit with captcha token
data = {"g-recaptcha-response": token}
response = session.post("https://example.com/submit", data=data)
return response
return None
```
### Batch Processing
```python
from browser_captcha_solver import CaptchaSolver
def process_multiple_captchas():
with CaptchaSolver() as solver:
challenges = []
# Create multiple challenges
for i in range(3):
challenge = solver.create_challenge(
challenge_type="RecaptchaV2Challenge",
site_key="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI",
site_domain="example.com",
host=f"host-{i}",
timeout=300
)
challenges.append(challenge)
# Solve them sequentially
results = []
for challenge in challenges:
result = solver.solve_challenge(challenge, timeout=120)
results.append(result)
return results
```
## Error Handling
```python
from browser_captcha_solver import CaptchaSolver
try:
with CaptchaSolver() as solver:
challenge = solver.create_challenge(
challenge_type="RecaptchaV2Challenge",
site_key="invalid-key",
site_domain="example.com",
host="example.com"
)
result = solver.solve_challenge(challenge, timeout=60)
if not result:
print("Captcha solving failed or timed out")
except Exception as e:
print(f"Error: {e}")
```
## Development
### Setting up for Development
```bash
# Clone the repository
git clone https://github.com/xAffan/browser-captcha-solver.git
cd browser-captcha-solver
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black .
# Type checking
mypy browser_captcha_solver/
```
### Building and Publishing
```bash
# Build the package
python -m build
# Upload to PyPI (requires authentication)
twine upload dist/*
```
## Requirements
- Python 3.8+
- requests >= 2.25.0
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## Support
If you encounter any issues or have questions, please file an issue on the [GitHub repository](https://github.com/xAffan/browser-captcha-solver/issues).
Raw data
{
"_id": null,
"home_page": null,
"name": "browser-captcha-solver",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "captcha, recaptcha, hcaptcha, browser, automation, solving, web-scraping, bot-protection",
"author": null,
"author_email": "xAffan <affanquddus1122@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/a5/c4/6fb50d216fe2d4637930a93207d8f1ac5194166585cdf96fdf3c66873e89/browser_captcha_solver-1.0.3.tar.gz",
"platform": null,
"description": "# Browser Captcha Solver\n\n[](https://badge.fury.io/py/browser-captcha-solver)\n[](https://pypi.org/project/browser-captcha-solver/)\n[](https://opensource.org/licenses/MIT)\n\nA robust Python library for solving captchas through browser automation, providing seamless integration between web captcha services and Python applications.\n\n## Features\n\n- **\ud83c\udf10 Browser Integration**: Automatically opens captchas in your browser for solving\n- **\ud83d\udd04 Real-time Communication**: Handles browser-server communication seamlessly \n- **\ud83c\udfaf Multiple Captcha Types**: Supports ReCaptcha v2, ReCaptcha v3, hCaptcha, and Cloudflare Turnstile\n- **\u26a1 Threaded HTTP Server**: Non-blocking server for handling multiple requests\n- **\ud83d\udee1\ufe0f Secure**: Local-only server with automatic cleanup\n- **\ud83c\udfa8 Easy API**: Simple, intuitive interface for developers\n\n## Installation\n\n```bash\npip install browser-captcha-solver\n```\n\n## Quick Start\n\n### Basic Usage\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\n\n# Create solver and start server\nwith CaptchaSolver() as solver:\n # Create a ReCaptcha challenge\n challenge = solver.create_challenge(\n challenge_type=\"RecaptchaV2Challenge\",\n site_key=\"6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI\", # Test key\n site_domain=\"example.com\",\n host=\"example.com\",\n explain=\"Please solve this captcha to continue\",\n timeout=300\n )\n \n # Solve the challenge (opens browser automatically)\n result = solver.solve_challenge(challenge, timeout=300)\n \n if result:\n print(f\"Success! Token: {result}\")\n else:\n print(\"Failed to solve captcha\")\n```\n\n### ReCaptcha v3 Usage\n\nReCaptcha v3 provides invisible verification with risk scoring. This implementation requires explicit user interaction for security and compliance.\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\n\nwith CaptchaSolver() as solver:\n # Create a ReCaptcha v3 challenge\n challenge = solver.create_challenge(\n challenge_type=\"RecaptchaV3Challenge\",\n site_key=\"your-recaptcha-v3-site-key\", # Get from Google reCAPTCHA Admin\n site_domain=\"your-domain.com\",\n host=\"your-domain.com\",\n secure_token=\"homepage\", # Action name (login, register, etc.)\n timeout=300\n )\n \n # Solve the challenge - user clicks \"Execute ReCaptcha v3\" button\n result = solver.solve_challenge(challenge, timeout=300)\n \n if result:\n print(f\"reCAPTCHA v3 token: {result}\")\n # Use token for server-side verification to get risk score\n else:\n print(\"Failed to execute reCAPTCHA v3\")\n```\n\n### Advanced Usage with Callbacks\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\n\ndef on_captcha_solved(challenge):\n print(f\"Captcha {challenge.id} solved!\")\n print(f\"Token: {challenge.result}\")\n\nwith CaptchaSolver(port=8080) as solver:\n challenge = solver.create_challenge(\n challenge_type=\"HCaptchaChallenge\", \n site_key=\"10000000-ffff-ffff-ffff-000000000001\", # Test key\n site_domain=\"example.com\",\n host=\"example.com\"\n )\n \n # Solve with callback\n result = solver.solve_challenge(\n challenge, \n timeout=300,\n callback=on_captcha_solved\n )\n```\n\n### Command Line Interface\n\nThe package also provides CLI tools for testing:\n\n```bash\n# Test ReCaptcha v3 with your site key\npython recaptcha_v3_cli.py --site-key YOUR_SITE_KEY --domain localhost --action test\n\n# Run examples\npython recaptcha_v3_example.py\n\n# Quick functionality test\npython test_recaptcha_v3.py\n```\n\nTraditional CLI (if available):\n```bash\n# Start the server\nbrowser-captcha-solver start --port 8080\n\n# Test ReCaptcha solving \nbrowser-captcha-solver test --type recaptcha\n```\n\n## API Reference\n\n### CaptchaSolver\n\nMain class for managing captcha challenges and browser communication.\n\n#### Constructor\n\n```python\nCaptchaSolver(port=0, browser_command=None)\n```\n\n- `port` (int): HTTP server port (0 for auto-select)\n- `browser_command` (str, optional): Custom browser command\n\n#### Methods\n\n##### `create_challenge(challenge_type, site_key, site_domain, host, **kwargs)`\n\nCreates a new captcha challenge.\n\n**Parameters:**\n- `challenge_type` (str): Type of captcha (\"RecaptchaV2Challenge\", \"HCaptchaChallenge\")\n- `site_key` (str): Site key for the captcha service\n- `site_domain` (str): Domain where the captcha will be solved\n- `host` (str): Host identifier for the challenge\n- `**kwargs`: Additional parameters (timeout, explain, type_id, etc.)\n\n**Returns:** `CaptchaChallenge` object\n\n##### `solve_challenge(challenge, timeout=None, callback=None)`\n\nSolves a captcha challenge by opening it in the browser.\n\n**Parameters:**\n- `challenge` (CaptchaChallenge): The challenge to solve\n- `timeout` (int, optional): Timeout in seconds\n- `callback` (callable, optional): Callback function when solved\n\n**Returns:** Solution token (str) or None if failed\n\n##### `list_challenges()`\n\nReturns a list of active challenges.\n\n**Returns:** List of `CaptchaJob` objects\n\n##### `cleanup_expired_challenges()`\n\nRemoves expired challenges from memory.\n\n### CaptchaChallenge\n\nRepresents a captcha challenge.\n\n#### Attributes\n\n- `id` (str): Unique challenge identifier\n- `challenge_type` (str): Type of captcha\n- `site_key` (str): Site key for the captcha service\n- `site_domain` (str): Domain for the challenge\n- `host` (str): Host identifier\n- `timeout` (int): Timeout in seconds\n- `created` (datetime): Creation timestamp\n- `solved` (bool): Whether the challenge is solved\n- `result` (str): Solution token\n\n#### Methods\n\n- `get_remaining_timeout()`: Returns remaining timeout in seconds\n- `is_expired()`: Returns True if the challenge has expired\n\n## Architecture\n\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Application \u2502\u25c4\u2500\u2500\u25ba\u2502 CaptchaSolver \u2502\u25c4\u2500\u2500\u25ba\u2502 HTTP Server \u2502\n\u2502 (Your Code) \u2502 \u2502 \u2502 \u2502 (Port 8080) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u25b2 \u25b2\n \u2502 \u2502\n \u25bc \u25bc\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Challenge Store \u2502 \u2502 Web Browser \u2502\n \u2502 (In Memory) \u2502 \u2502 (User Opens) \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Supported Captcha Types\n\n### ReCaptcha v2\n\n```python\nchallenge = solver.create_challenge(\n challenge_type=\"RecaptchaV2Challenge\",\n site_key=\"your-recaptcha-site-key\",\n site_domain=\"example.com\",\n host=\"example.com\"\n)\n```\n\n### ReCaptcha v3\n\n```python\nchallenge = solver.create_challenge(\n challenge_type=\"RecaptchaV3Challenge\",\n site_key=\"your-recaptcha-v3-site-key\",\n site_domain=\"example.com\",\n host=\"example.com\",\n secure_token=\"homepage\" # Action name for this challenge\n)\n```\n\n**Note**: ReCaptcha v3 requires explicit user interaction in this implementation. The user needs to click a button to execute the challenge. The returned token contains a risk score (available only during server-side verification).\n\n### hCaptcha\n\n```python\nchallenge = solver.create_challenge(\n challenge_type=\"HCaptchaChallenge\", \n site_key=\"your-hcaptcha-site-key\",\n site_domain=\"example.com\",\n host=\"example.com\"\n)\n```\n\n### Cloudflare Turnstile\n\n```python\nchallenge = solver.create_challenge(\n challenge_type=\"TurnstileChallenge\",\n site_key=\"your-turnstile-site-key\",\n site_domain=\"example.com\",\n host=\"example.com\"\n)\n```\n\n### Generic/Manual Captcha\n\n```python\nchallenge = solver.create_challenge(\n challenge_type=\"ManualChallenge\",\n site_key=\"\",\n site_domain=\"example.com\", \n host=\"example.com\",\n explain=\"Please solve the captcha shown in the image\"\n)\n```\n\n## Examples\n\n### Web Scraping Integration\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\nimport requests\n\ndef scrape_with_captcha():\n session = requests.Session()\n \n # Detect captcha on page\n response = session.get(\"https://example.com/protected\")\n if \"recaptcha\" in response.text.lower():\n # Extract site key from HTML\n site_key = extract_site_key(response.text)\n \n # Solve captcha\n with CaptchaSolver() as solver:\n challenge = solver.create_challenge(\n challenge_type=\"RecaptchaV2Challenge\",\n site_key=site_key,\n site_domain=\"example.com\",\n host=\"example.com\"\n )\n \n token = solver.solve_challenge(challenge)\n \n if token:\n # Submit with captcha token\n data = {\"g-recaptcha-response\": token}\n response = session.post(\"https://example.com/submit\", data=data)\n return response\n \n return None\n```\n\n### Batch Processing\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\n\ndef process_multiple_captchas():\n with CaptchaSolver() as solver:\n challenges = []\n \n # Create multiple challenges\n for i in range(3):\n challenge = solver.create_challenge(\n challenge_type=\"RecaptchaV2Challenge\",\n site_key=\"6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI\",\n site_domain=\"example.com\",\n host=f\"host-{i}\",\n timeout=300\n )\n challenges.append(challenge)\n \n # Solve them sequentially\n results = []\n for challenge in challenges:\n result = solver.solve_challenge(challenge, timeout=120)\n results.append(result)\n \n return results\n```\n\n## Error Handling\n\n```python\nfrom browser_captcha_solver import CaptchaSolver\n\ntry:\n with CaptchaSolver() as solver:\n challenge = solver.create_challenge(\n challenge_type=\"RecaptchaV2Challenge\",\n site_key=\"invalid-key\",\n site_domain=\"example.com\",\n host=\"example.com\"\n )\n \n result = solver.solve_challenge(challenge, timeout=60)\n \n if not result:\n print(\"Captcha solving failed or timed out\")\n \nexcept Exception as e:\n print(f\"Error: {e}\")\n```\n\n## Development\n\n### Setting up for Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/xAffan/browser-captcha-solver.git\ncd browser-captcha-solver\n\n# Install in development mode\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Format code\nblack .\n\n# Type checking\nmypy browser_captcha_solver/\n```\n\n### Building and Publishing\n\n```bash\n# Build the package\npython -m build\n\n# Upload to PyPI (requires authentication)\ntwine upload dist/*\n```\n\n## Requirements\n\n- Python 3.8+\n- requests >= 2.25.0\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n\n## Support\n\nIf you encounter any issues or have questions, please file an issue on the [GitHub repository](https://github.com/xAffan/browser-captcha-solver/issues).\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 Browser Captcha Solver\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "A Python library for browser-based captcha solving",
"version": "1.0.3",
"project_urls": {
"Bug Tracker": "https://github.com/xAffan/browser-captcha-solver/issues",
"Documentation": "https://github.com/xAffan/browser-captcha-solver",
"Homepage": "https://github.com/xAffan/browser-captcha-solver",
"Source Code": "https://github.com/xAffan/browser-captcha-solver"
},
"split_keywords": [
"captcha",
" recaptcha",
" hcaptcha",
" browser",
" automation",
" solving",
" web-scraping",
" bot-protection"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "43e5d95de820505a1aa9032bdab0601002e9301834fecc38429990bc0176117b",
"md5": "8bd4aafd698b277d6c0586b603a2fdb6",
"sha256": "7f7d5c6ddbfd618a71320a2a3a3cf073dde414e31ef8cd85f473c0fe759b61f3"
},
"downloads": -1,
"filename": "browser_captcha_solver-1.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8bd4aafd698b277d6c0586b603a2fdb6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 17383,
"upload_time": "2025-07-09T22:00:27",
"upload_time_iso_8601": "2025-07-09T22:00:27.130406Z",
"url": "https://files.pythonhosted.org/packages/43/e5/d95de820505a1aa9032bdab0601002e9301834fecc38429990bc0176117b/browser_captcha_solver-1.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a5c46fb50d216fe2d4637930a93207d8f1ac5194166585cdf96fdf3c66873e89",
"md5": "c205294a2c46f70c472db68d964aabf5",
"sha256": "42ee14eebe3182ed90b0c5e8d605acec708f5b75ec835a6224065e1980ce09ec"
},
"downloads": -1,
"filename": "browser_captcha_solver-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "c205294a2c46f70c472db68d964aabf5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 20009,
"upload_time": "2025-07-09T22:00:28",
"upload_time_iso_8601": "2025-07-09T22:00:28.506697Z",
"url": "https://files.pythonhosted.org/packages/a5/c4/6fb50d216fe2d4637930a93207d8f1ac5194166585cdf96fdf3c66873e89/browser_captcha_solver-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 22:00:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "xAffan",
"github_project": "browser-captcha-solver",
"github_not_found": true,
"lcname": "browser-captcha-solver"
}