A random user-agent generator
Project description
ua-generator
A random user-agent generator for Python >= 3.6
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
There are three different parameters to the generate user-agent by the certain conditions.
device = ('desktop', 'mobile')
platform = ('windows', 'macos', 'ios', 'linux', 'android')
browser = ('chrome', 'edge', 'firefox', 'safari')
All of the parameters are optional, and the types can be set more than one by using a 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:
print(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.
import ua_generator
from ua_generator.options import Options
options = Options(weighted_versions=True)
ua = ua_generator.generate(browser=('chrome', 'edge'), options=options)
Parameters
- weighted_versions (bool): To increase the probability of the latest versions being chosen. Default is
False.
Issues
You can create an issue from here if you are experiencing a problem.
Author
Ekin Karadeniz (iamdual@icloud.com)
Project details
Release history Release notifications | RSS feed
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 ua_generator-1.0.0.tar.gz.
File metadata
- Download URL: ua_generator-1.0.0.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba00edb785d094e6e9dd4c8011fa557b67b8f13aeca359f5be6866c054566085
|
|
| MD5 |
555f5b96a48ec67f33577d65047ed8bd
|
|
| BLAKE2b-256 |
8025d2dd0d342fedd31c37ad9a7bb29c17769a7bfcb942af7c39e077612f6167
|
File details
Details for the file ua_generator-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ua_generator-1.0.0-py3-none-any.whl
- Upload date:
- Size: 26.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a8243c174d8f7d7fb5feddfffc5ce8f2a388c3136afa624b3e635bb3fa4064f
|
|
| MD5 |
dfef46b08e1a37544e0d604a487a85f8
|
|
| BLAKE2b-256 |
fc2532681a94c0fb936dddaa2ba3fb5e2f0d03897ebb08aeaa6e965d41b58c63
|