Skip to main content

Async Python SDK for Salamoonder's anti-bot and captcha bypass API. Support for Akamai, Kasada, DataDome, and more.

Project description

Salamoonder SDK

A straightforward Python wrapper for Salamoonder's API, designed for easy integration and async usage. Perfect for solving captchas and bypassing bot detection on various platforms.

PyPI version Python 3.8+ License: MIT

Features

  • Simple and intuitive async API
  • Support for multiple captcha types:
    • Akamai Web Sensor
    • Akamai SBSD (Sensor Based Script Detection)
    • Kasada protection bypass
    • DataDome (Slider & Interstitial)
    • Incapsula/Imperva
    • Twitch Public Integrity
  • Fully async with async/await patterns
  • Comprehensive error handling and logging
  • Modern Python with full type hints
  • Production-ready with proper resource management

Installation

pip install salamoonder

Requirements

  • Python >= 3.8

Quick Start

import asyncio
from salamoonder import Salamoonder

async def main():
    async with Salamoonder('YOUR_API_KEY') as client:
        # Create and solve a Kasada captcha task
        task_id = await client.task.createTask('KasadaCaptchaSolver', 
            pjs_url='https://example.com/script.js',
            cd_only="false"
        )
        
        # Poll for the result
        solution = await client.task.getTaskResult(task_id)
        print('Solution:', solution)

asyncio.run(main())

Usage Examples

Akamai Web Sensor

async with Salamoonder('YOUR_API_KEY') as client:
    task_id = await client.task.createTask('AkamaiWebSensorSolver',
        url='https://example.com',
        abck='abck_cookie_value',
        bmsz='bmsz_cookie_value', 
        script='sensor_script_content',
        sensor_url='https://sensor.example.com/sensor.js',
        count=0,
        data='sensor_data',
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
    )
    
    result = await client.task.getTaskResult(task_id, interval=2)  # Poll every 2 seconds
    print('Result:', result)

Kasada

async with Salamoonder('YOUR_API_KEY') as client:
    # Kasada Captcha  
    captcha_task_id = await client.task.createTask('KasadaCaptchaSolver',
        pjs_url='https://example.com/script.js',
        cd_only="false"
    )
    captcha_result = await client.task.getTaskResult(captcha_task_id)
    
    # Kasada Payload
    payload_task_id = await client.task.createTask('KasadaPayloadSolver',
        url='https://example.com',
        script_content='script_content_here',
        script_url='https://example.com/script.js'
    )
    payload_result = await client.task.getTaskResult(payload_task_id)

DataDome

async with Salamoonder('YOUR_API_KEY') as client:
    # Slider captcha
    slider_task_id = await client.task.createTask('DataDomeSliderSolver',
        captcha_url='https://captcha.example.com/slider',
        country_code='US',
        user_agent='Mozilla/5.0...'
    )
    slider_result = await client.task.getTaskResult(slider_task_id)
    
    # Interstitial captcha  
    interstitial_task_id = await client.task.createTask('DataDomeInterstitialSolver',
        captcha_url='https://captcha.example.com/interstitial',
        country_code='US'
    )
    interstitial_result = await client.task.getTaskResult(interstitial_task_id)

Direct Client Methods

For custom HTTP requests with TLS client impersonation:

async with Salamoonder('YOUR_API_KEY') as client:
    # GET request
    response = await client.get('https://example.com', 
        headers={'User-Agent': 'Custom UA'},
        proxy='http://proxy:port'
    )
    
    # POST request
    post_response = await client.post('https://example.com/api',
        json={'key': 'value'},
        headers={'Content-Type': 'application/json'}
    )

API Reference

Salamoonder Class

Main entry point for the library.

async with Salamoonder(api_key, base_url=None, impersonate=None) as client:
    # Your code here
    pass

Parameters:

  • api_key (str) - Your Salamoonder API key (required)
  • base_url (str) - API base URL (default: https://salamoonder.com/api)
  • impersonate (str) - Browser to impersonate (default: chrome133a)

Properties:

  • task - Tasks API instance (recommended for solving captchas)
  • akamai, akamai_sbsd, datadome, kasada - Low-level solver instances (advanced use only)
  • session - Session information and cookies

Methods:

  • get(url, **kwargs) - Make a GET request
  • post(url, **kwargs) - Make a POST request

Supported Anti-Bot Solutions

🔒 Kasada

  • Script extraction and parsing
  • Payload solving
  • Challenge submission

🛡️ Akamai Bot Manager

  • Web sensor data extraction
  • SBSD (Sensor Based Script Detection) support
  • Cookie management

🔐 DataDome

  • Slider captcha URL parsing
  • Interstitial challenge support

Supported Captcha Types

  • KasadaCaptchaSolver
  • KasadaPayloadSolver
  • AkamaiWebSensorSolver
  • AkamaiSBSDSolver
  • DataDomeSliderSolver
  • DataDomeInterstitialSolver
  • IncapsulaReese84Solver
  • IncapsulaUTMVCSolver
  • Twitch_PublicIntegrity

Module Exports

You can import individual modules if needed:

# Main class and main exports
from salamoonder import Salamoonder
from salamoonder.tasks import Tasks
from salamoonder.client import Client

# Error classes
from salamoonder.client import APIError, MissingAPIKeyError

# For advanced/low-level operations only
from salamoonder.utils.akamai import AkamaiWeb, AkamaiSBSD
from salamoonder.utils.datadome import Datadome
from salamoonder.utils.kasada import Kasada

Note: The utility classes (AkamaiWeb, AkamaiSBSD, Datadome, Kasada) are for low-level operations. For most use cases, use the Tasks API through the main client.

Error Handling

import asyncio
from salamoonder import Salamoonder
from salamoonder.client import APIError, MissingAPIKeyError

async def main():
    try:
        async with Salamoonder('YOUR_API_KEY') as client:
            task_id = await client.task.createTask('KasadaCaptchaSolver',
                pjs_url='https://example.com/script.js',
                cd_only="false"
            )
            result = await client.task.getTaskResult(task_id)
    except MissingAPIKeyError:
        print('API key is required')
    except APIError as error:
        print('API error:', error)
    except Exception as error:
        print('Unexpected error:', error)

asyncio.run(main())

Configuration

Custom Base URL

async with Salamoonder(
    api_key='your_key',
    base_url='https://custom-api.salamoonder.com/api'
) as client:
    pass

Browser Impersonation

async with Salamoonder(
    api_key='your_key', 
    impersonate='chrome133a'  # or firefox, safari
) as client:
    # Requests will impersonate the specified browser
    pass

Proxy Support

# All methods support proxy parameter
result = await client.akamai.fetch_and_extract(
    website_url='https://example.com',
    user_agent='Mozilla/5.0...',
    proxy='http://username:password@proxy.example.com:8080'
)

Logging

Enable debug logging to see detailed information:

import logging
logging.basicConfig(level=logging.DEBUG)

# Now all salamoonder operations will show debug info
async with Salamoonder(api_key='key') as client:
    # Debug logs will show HTTP requests, responses, etc.
    await client.task.createTask(...)

Performance Tips

  • Use async context managers (async with) for automatic resource cleanup
  • Reuse the same client instance for multiple operations
  • Process multiple tasks concurrently with asyncio.gather()
# Good: Reuse client for multiple operations
async with Salamoonder(api_key='key') as client:
    task1 = await client.task.createTask(...)
    task2 = await client.task.createTask(...)
    
    # Wait for both results concurrently
    results = await asyncio.gather(
        client.task.getTaskResult(task1),
        client.task.getTaskResult(task2)
    )

License

MIT - See LICENSE file for details

Support

For issues, feature requests, or questions, please visit:

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

salamoonder-1.0.2.tar.gz (20.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

salamoonder-1.0.2-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file salamoonder-1.0.2.tar.gz.

File metadata

  • Download URL: salamoonder-1.0.2.tar.gz
  • Upload date:
  • Size: 20.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for salamoonder-1.0.2.tar.gz
Algorithm Hash digest
SHA256 39736cb54c4e80a3d641dd0a4575a0c4799f6777bd98e87bd02d8e3c80cbc0e5
MD5 68ce7e24d719dfdddc8a47847afd1f85
BLAKE2b-256 b045ebc9df541a08a029760816c83bc88a8538b919b30c6c08c0b8a69b29d3c4

See more details on using hashes here.

File details

Details for the file salamoonder-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: salamoonder-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 19.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for salamoonder-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 786d66e4a42d03082c96ec74ef69896f70a9c92a3e2a0ee38347aed0b5d2c311
MD5 7e0920cb057f1ec41fe60a3b56c3d752
BLAKE2b-256 ece7349f37da3080c165e5c42ca99dafef928712f7d57aaaa8793a2e08ec280f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page