Automatic captcha solving using Camoufox
Project description
Camoufox Captcha
A Python library that extends Camoufox to automatically solve captcha challenges. Currently supports only Cloudflare challenges (interstitial and turnstile), with more captcha types planned.
📸 Demonstration (recorded in headless mode)
Cloudflare Click Interstitial
https://github.com/user-attachments/assets/10ced3fe-044b-4657-b371-155f1e943955
Cloudflare Click Turnstile
https://github.com/user-attachments/assets/90206e23-ac2f-4e45-a4c4-e1fd7e8f17e3
⚠️ LEGAL DISCLAIMER
THIS TOOL IS PROVIDED FOR EDUCATIONAL AND RESEARCH PURPOSES ONLY
This software is designed to demonstrate security concepts and should not be used to bypass protections on websites without explicit permission from the website owner. Using this tool against websites without authorization may violate:
- The Computer Fraud and Abuse Act (CFAA)
- Terms of Service agreements
- Various cybersecurity laws in your jurisdiction
The author takes no responsibility for any misuse of this software. Users are solely responsible for ensuring their use complies with all applicable laws and regulations.
✨ Features
- Closed Shadow DOM Traversal: Navigates complex closed Shadow DOM structures to find and interact with challenge elements
- Advanced Retry Logic: Implements retry mechanisms with configurable attempts and delays
- Verification Steps: Confirms successful solving through multiple validation methods
- Fully Tested: 100% code coverage with unit and integration tests
📖 Requirements
This package requires:
- Python 3.8+
- camoufox[geoip] 0.4.11 or higher (must be installed separately)
📦 Installation
From PyPI
# firstly make sure to have camoufox or install it
pip install "camoufox[geoip]>=0.4.11"
# install camoufox-captcha
pip install camoufox-captcha
Development Installation
git clone https://github.com/techinz/camoufox-captcha.git
cd camoufox-captcha
pip install -e ".[dev]"
👨💻 Usage
❗️ Important
When creating your Camoufox instance, make sure to include these parameters for the library to work:
AsyncCamoufox(
# other parameters...
config={'forceScopeAccess': True}, # required
disable_coop=True # required
)
These settings are essential for proper closed Shadow DOM traversal and browser security bypassing required by the captcha solving.
See usage examples in the /examples directory for ready-to-use scripts.
Basic Example (Cloudflare Interstitial)
import asyncio
from camoufox import AsyncCamoufox
from camoufox_captcha import solve_captcha # import it
async def main():
async with AsyncCamoufox(
headless=True,
geoip=True,
humanize=False,
i_know_what_im_doing=True,
config={'forceScopeAccess': True}, # add this when creating Camoufox instance
disable_coop=True # add this when creating Camoufox instance
) as browser:
page = await browser.new_page()
# navigate to a site with Cloudflare protection
await page.goto("https://example-with-cloudflare.com")
# solve using solve_captcha
success = await solve_captcha(page, captcha_type='cloudflare', challenge_type='interstitial')
if not success:
return print("Failed to solve captcha challenge")
print("Successfully solved captcha challenge!")
# continue with your automation...
if __name__ == "__main__":
asyncio.run(main())
Cloudflare Turnstile Example
Cloudflare Turnstile Example
import asyncio
from camoufox import AsyncCamoufox
from camoufox_captcha import solve_captcha # import it
async def main():
async with AsyncCamoufox(
headless=True,
geoip=True,
humanize=False,
i_know_what_im_doing=True,
config={'forceScopeAccess': True}, # add this when creating Camoufox instance
disable_coop=True # add this when creating Camoufox instance
) as browser:
page = await browser.new_page()
await page.goto("https://site-with-turnstile.com")
# locate the container with the Turnstile challenge
turnstile_container = await page.wait_for_selector('.turnstile_container')
# specify challenge type for Turnstile
success = await solve_captcha(
turnstile_container,
captcha_type="cloudflare",
challenge_type="turnstile"
)
if not success:
return print("Failed to solve captcha challenge")
print("Successfully solved captcha challenge!")
# continue with your automation...
if __name__ == "__main__":
asyncio.run(main())
With Content Verification
# specify a CSS selector that should appear after successful bypass
success = await solve_captcha(
page,
challenge_type="interstitial",
expected_content_selector="#super-protected-content"
)
📚 Configuration Options
The solve_captcha function provides a unified interface with multiple parameters:
await solve_captcha(
queryable, # Page, Frame or ElementHandle containing the captcha
captcha_type="cloudflare", # Type of captcha provider (currently only "cloudflare")
challenge_type="interstitial", # For Cloudflare: "interstitial" or "turnstile"
method=None, # Solving method (defaults to best available for the captcha type):
# Cloudflare: "click"
**kwargs # Additional parameters passed to the specific solver:
# Cloudflare click:
# expected_content_selector=None, # CSS selector to verify solving success
# solve_attempts=3, # Maximum attempts for solving
# solve_click_delay=2.0, # Delay after clicking checkbox in seconds
# checkbox_click_attempts=3, # Maximum attempts to click the checkbox
# wait_checkbox_attempts=5, # Maximum attempts to wait for checkbox readiness
# wait_checkbox_delay=1.0 # Delay between checkbox readiness checks
)
🧠 Solving Methods
Cloudflare Interstitial Click Method
Cloudflare Interstitial Click Method
This method handles Cloudflare's full-page interstitial challenge that appears before accessing protected content.
How it works:
- Detects the Cloudflare challenge page through specific DOM elements
- Finds all iframes in the page's Shadow DOM tree
- Searches for the checkbox inside security frames
- Simulates a user click on the verification checkbox
- Waits for the page to reload or challenge to disappear
- Verifies success by checking for expected content or absence of challenge
Cloudflare Turnstile Click Method
Cloudflare Turnstile Click Method
This method handles Cloudflare's Turnstile widget that appears embedded within forms or other page elements.
How it works:
- Targets the Turnstile widget container element
- Finds all iframes in the page's Shadow DOM tree
- Searches for the checkbox inside security frames
- Simulates a user click on the verification checkbox
- Monitors for completion by watching for success state elements
- Verifies success by checking for expected content or success element in the widget
🧪 Testing
The project has unit and integration tests:
# run all tests with coverage report
pytest --cov=camoufox_captcha --cov-report=html tests/
# run only unit tests
pytest tests/unit/
# run only integration tests
pytest tests/integration/
🔮 Future Development
- Support for additional captcha types (hCaptcha, reCAPTCHA)
- Integration with external solving services (2Captcha, Anti-Captcha, CapMonster)
- Advanced detection methods for various captcha types
- Image-based captcha solving
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Please ensure your code passes all tests and maintains or improves test coverage.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Remember: Use this tool responsibly and only on systems you have permission to test.
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
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 camoufox_captcha-0.1.3.tar.gz.
File metadata
- Download URL: camoufox_captcha-0.1.3.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79195f558473dca7c0342161d4c2eb0422ec62bb4a9ce02f992bf3cf8e0c834c
|
|
| MD5 |
9c1e1fbd0fa3f32bca2efa06164a1c1c
|
|
| BLAKE2b-256 |
25906539316dfbd5da49bb09afef1e1d6d940ad9dd061521a4d3b1f9c2be8042
|
File details
Details for the file camoufox_captcha-0.1.3-py3-none-any.whl.
File metadata
- Download URL: camoufox_captcha-0.1.3-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd9ecd4bd30a97b5e618055b78683232859014d48df0b900798b2c4bfa05a7ff
|
|
| MD5 |
5ea5ec20e900964c05f4d0f06a6b86a4
|
|
| BLAKE2b-256 |
dae69befc77f1e92af7c4cc131ee54b40591c91ac43523e4c572529e28141044
|