Skip to main content

Python module for controlling Dolphin browser profiles using Selenium, Pyppeteer, and Playwright. Includes Dolphin API for profile management.

Project description

🐬 pyanty

Python module for controlling Dolphin browser profiles using Selenium, Pyppeteer, and Playwright. Includes Dolphin API for profile management.

⚠️ Warning!

Selenium and some features working only if Dolphin Anty is opened!!! (Local API wrapper must be launched!)

🚀 Quickstart

Selenium

import random
import pyanty as dolphin
from pyanty import DolphinAPI, STABLE_CHROME_VERSION

api = DolphinAPI(api_key='Your Api Key') # or just DolphinAPI() to use auto fetch token

response = api.get_profiles()
if response['data']:
    profile_id = response['data'][-1]['id']
    if profile_id:
        api.delete_profiles([profile_id])

fingerprint = []
while not fingerprint:
  fingerprint = api.generate_fingerprint(platform='windows', browser_version=f'{random.randint(136, STABLE_CHROME_VERSION)}')

data = api.fingerprint_to_profile(name='my superprofile', fingerprint=fingerprint)

profile_id = api.create_profile(data)['browserProfileId']

response = dolphin.run_profile(profile_id)
port = response['automation']['port']

driver = dolphin.get_driver(port=port)
driver.get('https://google.com/')
print(driver.title)
driver.quit()

dolphin.close_profile(profile_id)

Pyppeteer

import asyncio
import random
import pyanty as dolphin
from pyanty import DolphinAPI, STABLE_CHROME_VERSION

api = DolphinAPI(api_key='Your Api Key')

response = api.get_profiles()
if response['data']:
    profile_id = response['data'][-1]['id']
    if profile_id:
        api.delete_profiles([profile_id])

fingerprint = []
while not fingerprint:
  fingerprint = api.generate_fingerprint(platform='windows', browser_version=f'{random.randint(136, STABLE_CHROME_VERSION)}')

data = api.fingerprint_to_profile(name='my superprofile', fingerprint=fingerprint)

profile_id = api.create_profile(data)['browserProfileId']

response = dolphin.run_profile(profile_id)
port = response['automation']['port']
ws_endpoint = response['automation']['wsEndpoint']

async def main():
    browser = await dolphin.get_browser(ws_endpoint, port)
    pages = await browser.pages()
    page = pages[0]
    await page.goto('http://google.com/')
    await asyncio.sleep(5)
    await browser.disconnect()

asyncio.run(main())
dolphin.close_profile(profile_id)

Playwright/Patchright

import asyncio
import random
import pyanty as dolphin
from pyanty import DolphinAPI, STABLE_CHROME_VERSION

api = DolphinAPI(api_key='Your Api Key')

response = api.get_profiles()
if response['data']:
    profile_id = response['data'][-1]['id']
    if profile_id:
        api.delete_profiles([profile_id])

fingerprint = []
while not fingerprint:
  fingerprint = api.generate_fingerprint(platform='windows', browser_version=f'{random.randint(136, STABLE_CHROME_VERSION)}')

data = api.fingerprint_to_profile(name='my superprofile', fingerprint=fingerprint)

profile_id = api.create_profile(data)['browserProfileId']

response = dolphin.run_profile(profile_id)
port = response['automation']['port']
ws_endpoint = response['automation']['wsEndpoint']

async def main():
    browser = await dolphin.get_browser(ws_endpoint, port, core='playwright') # or core='patchright' for using undetectable version
    pages = await browser.pages()
    page = pages[0]
    await page.goto('http://google.com/')
    await asyncio.sleep(5)
    await browser.disconnect()

asyncio.run(main())
dolphin.close_profile(profile_id)

📝 Get profiles

from pyanty import DolphinAPI

api = DolphinAPI() # you can enter api_key='Your key' inside instance

You can get an API key here, but if the token is present in the logs, the module can automatically retrieve it.

response = api.get_profiles() 

print(response)

Pagination and limitation

response = api.get_profiles(page=1, limit=300) # default page - 1 limit - 50

🆕 Create profile

fingerprint = api.generate_fingerprint(platform='linux') # you can use platform windows/linux/macos, also you can use screen='1366x768' and browser_version='116' if you need

data = api.fingerprint_to_profile(name='my profile', fingerprint=fingerprint) # also you can add tags=['test', 'pyanty'] and other

response = api.create_profile(data)

print(response)

🔍 Bablosoft Fingerprints

The library now (from v1.1.0) supports advanced fingerprint generation using Bablosoft's fingerprinting service for more realistic browser profiles.

Generate Bablosoft fingerprint

from pyanty import DolphinAPI

api = DolphinAPI()

# Generate fingerprint with specific tags
fingerprint = []
while not 'ua' in fingerprint:
    fingerprint = api.generate_fb_fingerprint(tags=['Apple Mac'])

data = api.fingerprint_to_profile(name='my superprofile', fingerprint=fingerprint)
profile_id = api.create_profile(data)['browserProfileId']

print('Profile created with Bablosoft fingerprint!')

Available tags

You can use the following tags to customize your fingerprint generation:

  • Platforms: Desktop, Mobile
  • Operating Systems: Microsoft Windows, Apple Mac, Android, Linux, iPad, iPhone
  • Browsers: Edge, Chrome, Safari, Firefox, IE

Tags can be combined for more specific targeting:

# Example combinations
fingerprint = api.generate_fb_fingerprint(tags=['Desktop', 'Microsoft Windows', 'Chrome'])
fingerprint = api.generate_fb_fingerprint(tags=['Mobile', 'Android', 'Chrome'])
fingerprint = api.generate_fb_fingerprint(tags=['iPad', 'Safari'])

Testing fingerprints

You can test and validate your generated fingerprints using the Bablosoft testing tool: https://fp.bablosoft.com/#testing

📝 Custom data for profile

After this line:

data = api.fingerprint_to_profile(name='my profile', fingerprint=fingerprint)

Use for:

Geolocation 🗺️

data.update({'geolocation':{
  'mode': 'manual',
  'latitude': 33.4,
  'longitude': 55.2,
  'accuracy': 318
}})

Timezone ⏰

data.update({'timezone':{
  'mode':'manual',
  'value':'Pacific/Johnston'
}})

Locale 🌎

data.update({'locale':{
  'mode':'manual',
  'value':'af_ZA' 
}})

Proxy 🕸️

data.update({'proxy':{
  'name': 'http://37.19.220.129:8443',
  'host': '37.19.220.129',
  'port': '8443',
  'type': 'http' 
}})
# also you can add 'login' and 'password' args

and others...

✏️ Edit profile

from pyanty import DolphinAPI

api = DolphinAPI()

fingerprint = api.generate_fingerprint(platform='windows') 

data = api.fingerprint_to_profile(name='mega profile', fingerprint=fingerprint)

response = api.edit_profile(190438486, data)

print(response)

🗑️ Delete profile(s)

from pyanty import DolphinAPI

api = DolphinAPI()

response = api.delete_profiles([190438486]) # you need specify list ids of profiles  

print(response)

🧩 Using Extensions

Get extensions

response = api.get_extensions() 

print(response)

Pagination and limitation

response = api.get_extensions(page=1, limit=300) # default page - 1 limit - 50

🏪 Load from Chrome Extensions Store

response = api.load_extension_from_url('https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm')

print(response)

📦 Load from ZIP Archive

response = api.load_extension_from_zip(extension_name='Test', path='path/to/archive.zip')

print(response)

🗑️ Delete extension(s)

response = api.delete_extensions([63654]) # you need specify list ids of profiles  

print(response)

🔍 Other features

Proxy checker

response = api.check_proxy(host='37.19.220.129', port='8443', type='http')

print(response)

# also you can use other kwargs (login='username', password='password')

Response:

{"success": true, "country": "US", "region": "Virginia", "city": "Ashburn", "ip": "37.19.220.178", "timezone": "America/New_York"}

MAC Address generator

response = api.generate_mac()  

print(response) 

Response:

{"success": true, "macAddress": "8E:DD:48:08:F1:31"}

Conclusion

pyanty provides a straightforward way to control Dolphin browser profiles for automation testing using Selenium, Pyppeteer or Playwright 🤖. With the Dolphin API, you can easily create, customize, and manage profiles right from Python. Give it a try for your next web scraping or test automation project! 🐬

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

pyanty-1.1.0.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

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

pyanty-1.1.0-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file pyanty-1.1.0.tar.gz.

File metadata

  • Download URL: pyanty-1.1.0.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for pyanty-1.1.0.tar.gz
Algorithm Hash digest
SHA256 2ad4f28867fd14b0871819141e34e8fc59d451e50f8b88f081ed8cd0a4d849cf
MD5 439e12c802a3c38151447abfa6794c4f
BLAKE2b-256 d1a21da0311c25126849fc4c028a8ef86db3e87670108caf6b0c1eae6a7fbd18

See more details on using hashes here.

File details

Details for the file pyanty-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyanty-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for pyanty-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 caaa4ba6840eb8ae670ab210fc49635acf7af1bc1ba714bfd7d9b4febd00526b
MD5 4c3705f87669f74955a9a96c0793ffe6
BLAKE2b-256 b3aaa88e849a3bf722306fe50fe29dc5b32076f3a5ebea834b244ea61253634c

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