Skip to main content

A random user-agent generator

Project description

ua-generator

A random user-agent generator for Python >= 3.9

Features

  • No external user-agent list. No downloads.
  • Templates are hardcoded into the code.
  • Platform and browser versions are based on real releases.
  • Client Hints (Sec-CH-UA fields).
  • Easy to integrate into HTTP libraries.

Installing

pip3 install -U ua-generator

Basic usage

import ua_generator

ua = ua_generator.generate()
print(ua) # Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.2 Safari/604.1.38

Customization

It takes three different parameters to customize the user-agent.

device = ('desktop', 'mobile')
platform = ('windows', 'macos', 'ios', 'linux', 'android')
browser = ('chrome', 'edge', 'firefox', 'safari')

All parameters are optional and multiple types can be specified using a list (or tuple).

Customized user-agent generation:

import ua_generator

# Example 1:
ua = ua_generator.generate(device='desktop', browser=('chrome', 'edge'))
print(ua.text) # Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.145 Safari/537.36
print(ua.platform) # windows
print(ua.browser) # chrome
print(ua.ch.brands) # "Not A(Brand";v="99", "Chromium";v="108", "Google Chrome";v="108"
print(ua.ch.mobile) # ?0
print(ua.ch.platform) # "Windows"
print(ua.ch.platform_version) # "13.0.0"
print(ua.ch.bitness) # "64"
print(ua.ch.architecture) # "x86"

# Example 2:
ua = ua_generator.generate(platform=('ios', 'macos'), browser='chrome')
print(ua.text) # Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) CriOS/119.0.6045.176 Mobile/15E148 Safari/537.36
print(ua.platform) # ios
print(ua.browser) # chrome
print(ua.ch.brands) # "Not A(Brand";v="99", "Chromium";v="119", "Google Chrome";v="119"
print(ua.ch.mobile) # ?1
print(ua.ch.platform) # "iOS"
print(ua.ch.platform_version) # "17.0.2"
print(ua.ch.bitness) # "64"
print(ua.ch.architecture) # "arm"

Headers

ua = ua_generator.generate(browser=('chrome', 'edge'))

# This will return a dictionary containing the generated user-agent:
print(ua.headers.get())
{
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.43 Safari/537.36',
    'sec-ch-ua': '"Not A(Brand";v="99", "Chromium";v="103", "Google Chrome";v="103"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"'
}

# Extending the "Client Hints" by a value of the "Accept-CH" header:
ua.headers.accept_ch('Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List')
print(ua.headers.get())
{
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.94 Safari/537.36',
    'sec-ch-ua': '"Not A(Brand";v="99", "Chromium";v="122", "Google Chrome";v="122"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
    'sec-ch-ua-platform-version': '"14.1.0"',
    'sec-ch-ua-full-version-list': '"Not A(Brand";v="99.0.0.0", "Chromium";v="122.0.6261.94", "Google Chrome";v="122.0.6261.94"'
}

Integrating into the requests:

import requests
import ua_generator

ua = ua_generator.generate(browser=('chrome', 'edge'))
r = requests.get('https://httpbin.org/get', headers=ua.headers.get())


# or, usage with requests.Session():
ua = ua_generator.generate(browser=('chrome', 'edge'))
s = requests.Session()
s.headers.update(ua.headers.get())
r = s.get('https://httpbin.org/get')

Integrating into the httpx:

import httpx
import ua_generator

ua = ua_generator.generate(browser=('chrome', 'edge'))
r = httpx.get('https://httpbin.org/get', headers=ua.headers.get())


# or, usage with httpx.Client():
ua = ua_generator.generate(browser=('chrome', 'edge'))
c = httpx.Client(headers=ua.headers.get())
r = c.get('https://httpbin.org/get')

Integrating into the urllib:

import urllib.request
import ua_generator

ua = ua_generator.generate(browser=('chrome', 'edge'))
request = urllib.request.Request('https://httpbin.org/get', headers=ua.headers.get())
handler = urllib.request.urlopen(request)
response = handler.read().decode('utf-8')

Options

You can define options using the "options" parameter for further customization.

weighted_versions

To increase the probability of the latest versions being chosen. Default is False.

import ua_generator
from ua_generator.options import Options

# Enabling weighted versions
options = Options()
options.weighted_versions = True
ua = ua_generator.generate(browser=('chrome', 'edge'), options=options)

version_ranges

To choose only versions within specified ranges. Default is None.

import ua_generator
from ua_generator.options import Options
from ua_generator.data.version import VersionRange

# Choosing only versions within specified ranges
options = Options()
options.version_ranges = {
    'chrome': VersionRange(125, 129),  # Choose version between 125 and 129
    'edge': VersionRange(min_version=120),  # Choose version 120 minimum
}
ua = ua_generator.generate(browser='chrome', options=options)

Issues

You can create an issue from here if you are experiencing a problem.

Contributing

Pull requests are welcome. Don't forget to run tests.

Contributors

Ekin Karadeniz (@iamdual) and the GitHub community.

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

ua_generator-2.0.9.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

ua_generator-2.0.9-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file ua_generator-2.0.9.tar.gz.

File metadata

  • Download URL: ua_generator-2.0.9.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ua_generator-2.0.9.tar.gz
Algorithm Hash digest
SHA256 b16b5e656611dc6405420298b32779ffc04ecd91d23349bb4c69f53894ec2f3e
MD5 7a37f4dc3023bdcc45e067d5d04a6bf6
BLAKE2b-256 e95bb65a8f4b857d73be44f3810528bed98d9182ce2a17615a89d1f733febad1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ua_generator-2.0.9.tar.gz:

Publisher: release.yml on iamdual/ua-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ua_generator-2.0.9-py3-none-any.whl.

File metadata

  • Download URL: ua_generator-2.0.9-py3-none-any.whl
  • Upload date:
  • Size: 30.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ua_generator-2.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 7d4b76fb84d6511d14949e2910d4b58155c5733802654529e86aac0bd17687fe
MD5 dc5abd203e31d17a8fc31c3d0d11b3bd
BLAKE2b-256 49d05360af618abe78f3d4b64f45f5e0f0373a2b6bed0c4d2341bd5fd9d12009

See more details on using hashes here.

Provenance

The following attestation bundles were made for ua_generator-2.0.9-py3-none-any.whl:

Publisher: release.yml on iamdual/ua-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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