| Vulnerabilities | |||||
|---|---|---|---|---|---|
| Version | Suggest | Low | Medium | High | Critical |
| 2.2.0 | 0 | 0 | 0 | 0 | 0 |
| 2.1.0 | 0 | 0 | 0 | 0 | 0 |
| 2.0.3 | 0 | 0 | 0 | 0 | 0 |
| 2.0.2 | 0 | 0 | 0 | 0 | 0 |
| 2.0.1 | 0 | 0 | 0 | 0 | 0 |
| 2.0.0 | 0 | 0 | 0 | 0 | 0 |
| 1.5.1 | 0 | 0 | 0 | 0 | 0 |
| 1.5.0 | 0 | 0 | 0 | 0 | 0 |
| 1.4.0 | 0 | 0 | 0 | 0 | 0 |
| 1.3.0 | 0 | 0 | 0 | 0 | 0 |
| 1.2.1 | 0 | 0 | 0 | 0 | 0 |
| 1.2.0 | 0 | 0 | 0 | 0 | 0 |
| 1.1.3 | 0 | 0 | 0 | 0 | 0 |
| 1.1.1 | 0 | 0 | 0 | 0 | 0 |
| 1.1.0 | 0 | 0 | 0 | 0 | 0 |
| 1.0.1 | 0 | 0 | 0 | 0 | 0 |
| 1.0.0 | 0 | 0 | 0 | 0 | 0 |
| 0.1.14 | 0 | 0 | 0 | 0 | 0 |
| 0.1.13 | 0 | 0 | 0 | 0 | 0 |
| 0.1.11 | 0 | 0 | 0 | 0 | 0 |
| 0.1.10 | 0 | 0 | 0 | 0 | 0 |
| 0.1.9 | 0 | 0 | 0 | 0 | 0 |
| 0.1.8 | 0 | 0 | 0 | 0 | 0 |
| 0.1.7 | 0 | 0 | 0 | 0 | 0 |
| 0.1.6 | 0 | 0 | 0 | 0 | 0 |
| 0.1.5 | 0 | 0 | 0 | 0 | 0 |
| 0.1.4 | 0 | 0 | 0 | 0 | 0 |
| 0.1.3 | 0 | 0 | 0 | 0 | 0 |
| 0.1.2 | 0 | 0 | 0 | 0 | 0 |
| 0.1.1 | 0 | 0 | 0 | 0 | 0 |
| 0.1.0 | 0 | 0 | 0 | 0 | 0 |
| 0.0.9 | 0 | 0 | 0 | 0 | 0 |
| 0.0.8 | 0 | 0 | 0 | 0 | 0 |
| 0.0.7 | 0 | 0 | 0 | 0 | 0 |
| 0.0.6 | 0 | 0 | 0 | 0 | 0 |
| 0.0.5 | 0 | 0 | 0 | 0 | 0 |
| 0.0.4 | 0 | 0 | 0 | 0 | 0 |
| 0.0.3 | 0 | 0 | 0 | 0 | 0 |
| 0.0.2 | 0 | 0 | 0 | 0 | 0 |
| 0.0.1 | 0 | 0 | 0 | 0 | 0 |
2.2.0 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform
Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.
Apache-2.0 - Apache License 2.0Up-to-date simple useragent faker with real world database.
desktop, tablet and/or mobile UAs)useragent, percent, type, device_brand, browser, browser_version, os, os_version and platform
pip install fake-useragentOr if you have multiple Python / pip versions installed, use pip3:
pip3 install fake-useragentSimple usage examples below, see also next chapters in this readme for more advanced usages:
from fake_useragent import UserAgent
ua = UserAgent()
# Get a random browser user-agent string
print(ua.random)
# Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
# Or get user-agent string from a specific browser
print(ua.chrome)
# Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
print(ua.google)
# Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/343.0.695551749 Mobile/15E148 Safari/604.1
print(ua['Chrome'])
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
print(ua.firefox)
# Mozilla/5.0 (Android 14; Mobile; rv:133.0) Gecko/133.0 Firefox/133.0
print(ua.ff)
# Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0
print(ua.safari)
# Mozilla/5.0 (iPhone; CPU iPhone OS 17_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Mobile/15E148 Safari/604.1 Ddg/17.6
print(ua.opera)
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0
print(ua.edge)
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0Additional features that fake-useragent now offers since v1.2.0.
If you want to specify your own browser list, you can do that via the browsers argument (default is: ["Google", "Chrome", "Firefox", "Edge", "Opera", "Safari", "Android", "Yandex Browser", "Samsung Internet", "Opera Mobile", "Mobile Safari", "Firefox Mobile", "Firefox iOS", "Chrome Mobile", "Chrome Mobile iOS", "Mobile Safari UI/WKWebView", "Edge Mobile", "DuckDuckGo Mobile", "MiuiBrowser", "Whale", "Twitter", "Facebook", "Amazon Silk"]).
This example will only return random user-agents from Edge and Chrome:
from fake_useragent import UserAgent
ua = UserAgent(browsers=['Edge', 'Chrome'])
ua.randomNote: Fakeuser-agent knowns about browsers: Chrome, Edge, Firefox, Safari, Opera, Android, Opera Mobile, Mobile Safari, Firefox Mobile, Firefox iOS, Chrome Mobile, Chrome Mobile iOS and more (see again full list above).
Note #2: Since fakeuser-agent v2.0.0 the browser names are case-sensitive!
If you want to specify your own operating systems, you can do that via the os argument (default is: ["Windows", "Linux", "Ubuntu", "Chrome OS", "Mac OS X", "Android", "iOS"]).
In this example you will only get Linux user-agents back:
from fake_useragent import UserAgent
ua = UserAgent(os='Linux')
ua.randomNote: Since fakeuser-agent v2.0.0 the OS names are case-sensitive!
You can also specify the type of platforms you want to use, you can do that via the platforms argument (default is ["desktop", "mobile", "tablet"]).
This example will only return random user-agents from a mobile device:
from fake_useragent import UserAgent
ua = UserAgent(platforms='mobile')
ua.randomAnd a random user-agent from a desktop device:
from fake_useragent import UserAgent
ua = UserAgent(platforms='desktop')
ua.randomIf you want to return more recent user-agent strings, you can play with the min_version argument (default is: 0.0, meaning all user agents will match).
In this example you get only user agents that have a minimum version of 120.0:
from fake_useragent import UserAgent
ua = UserAgent(min_version=120.0)
ua.randomFor backwards compatibility, a minimum usage percentage can still be specified with the min_percentage argument. However, the current list of user agents does
not contain this statistic. Therefore all of the user-agents will match.
Hint: Of-course you can combine all those arguments to you liking!
Since version 1.3.0 we now also offer you the following "get" properties which return the whole Python dictionary of the UA, instead of only the user-agent string:
Warning Raw JSON objects (in a Python dictionaries) are returned "as is". Meaning, this data structure could change in the future!
Be aware that these "get" properties below might not return the same key/value pairs in the future. Use
ua.randomor alike as mentioned above, if you want to use a stable interface.
from fake_useragent import UserAgent
ua = UserAgent()
# Random user-agent dictionary (object)
ua.getRandom
# {'percent': 0.8, 'useragent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76', 'system': 'Edge 116.0 Win10', 'browser': 'edge', 'version': 116.0, 'os': 'win10'}
# More get properties:
ua.getFirefox
# {'percent': 0.3, 'useragent': 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/118.0', 'system': 'Firefox 118.0 Win10', 'browser': 'firefox', 'version': 118.0, 'os': 'win10'}
ua.getChrome
ua.getSafari
ua.getEdge
# And a method with an argument.
# This is exactly the same as using: ua.getFirefox
ua.getBrowser('firefox')You can override the fallback string using the fallback parameter, in very rare cases something failed:
from fake_useragent import UserAgent
ua = UserAgent(fallback='your favorite Browser')
# in case if something went wrong, one more time it is REALLY!!! rare case
ua.random == 'your favorite Browser'If you will try to get unknown browser:
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.unknown)
#Error occurred during getting browser: randm, but was suppressed with fallback.
#Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0If you need to safe some attributes from overriding them in UserAgent by __getattr__ method
use safe_attrs you can pass there attributes names.
At least this will prevent you from raising FakeUserAgentError when attribute not found.
For example, when using fakeuseragent with injections <https://github.com/tailhook/injections> you need to:
from fake_useragent import UserAgent
ua = UserAgent(safe_attrs=('__injections__',))Please, do not use if you don't understand why you need this. This is magic for rarely extreme case.
Make sure that you using latest version!
pip install --upgrade fake-useragentOr if that isn't working, try to install the latest package version like this (2.0.3 is an example, check what the latest version is on PyPi):
pip install fake-useragent==2.0.3Check version via the Python console:
import fake_useragent
print(fake_useragent.__version__)And you are always welcome to post issues.
Please do not forget to mention the version that you are using.
The user-agent data we retrieve from user-agents.net. Data is stored in JSONlines format. File is located in the: src/fake_useragent/data directory.
The data JSON file is part of the Python package, see pyproject.toml. Read more about Data files support.
We encourage to use Python virtual environment before installing Pip packages, like so:
python -m virtualenv env
source env/bin/activatepip install -e .pip install -r requirements.txt
toxTo fix imports using ruff:
pip install -r requirements.txt
ruff check --select="I" --fix .Fix black code formatting errors:
pip install -r requirements.txt
black .Note: When ruff v1.0 releases, we most likely move fully towards ruff instead of black.
2.2.0 April 14, 2025
pyproject.toml file2.1.0 March 12, 2025
shape as safe attr by default (for IDE).2.0.2 & 2.0.3 December 10, 2024
2.0.1 December 7, 2024 (my birthday)
2.0.0 December 4, 2024
"Google", "Chrome", "Firefox", "Edge", "Opera", "Safari", "Android", "Yandex Browser", "Samsung Internet", "Opera Mobile", "Mobile Safari", "Firefox Mobile", "Firefox iOS", "Chrome Mobile", "Chrome Mobile iOS", "Mobile Safari UI/WKWebView", "Edge Mobile", "DuckDuckGo Mobile", "MiuiBrowser", "Whale", "Twitter", "Facebook", "Amazon Silk"
"Windows", "Linux", "Ubuntu", "Chrome OS", "Mac OS X", "Android", "iOS"
"desktop", "mobile", "tablet"
1.5.1 March 16, 2024
1.5.0 March 8, 2024
1.4.0 November 24, 2023
1.3.0 October 2, 2023
ua.getRandom, ua.getFirefox, ua.getChrome, ua.getSafari. And a generic method: ua.getBrowser(..) (eg. getBrowser('firefox'))
os argument 'windows' to check for both win10and win7 values (previously only checking on win10), thus returning more UAs1.2.1 August 2, 2023
min_percentage check1.2.0 August 2, 2023
use_external_data=True and verify_ssl are removed. If you use those parameters, just remove it in your code!1.1.3 March 20, 2023
1.1.2 February 8, 2023
1.1.1 December 4, 2022
1.1.0 November 26, 2022
pkg_resource as fallback mechanism in trying to retrieve the local JSON data file1.0.1 November 10, 2022
importlib-metadata & importlib-resources as dependenciesfiles() workingimportlib_metadata should now also work on Python version before 3.8MANIFEST.in file1.0.0 November 17, 2022
myproject.toml file with package-data support0.1.14 November 5, 2022
pyproject.toml build system format + syntax checktox.ini file0.1.13 October 21, 2022
browsers argument, allowing you to override the browser names you want to useblack Python formatter in favour of Flake0.1.12 March 31, 2022
0.1.11 October 4, 2018
s3 + cloudfront fallback to heroku.com, cuz someone from Florida did ~25M requests last month0.1.10 February 11, 2018
cloudfront url0.1.9 February 11, 2018
w3schools.com renamed IE/Edge to Edge/IE
heroku.com fallback to s3 + cloudfront
0.1.8 November 2, 2017
useragentstring.com Can't connect to local MySQL server through socket
0.1.7 April 2, 2017
0.1.6 April 2, 2017
use_cache_server do not affected anythingw3schools.com <https://www.w3schools.com/browsers/browsers_stats.asp>_ moved to https
verify_ssl options added, by default it is True (urllib.urlopen ssl context for Python 2.7.9- and 3.4.3- is not supported)0.1.5 February 28, 2017
ua.edge alias to Internet ExplorerEdge statisticuse_cache_server option addedfake_useragent.settings.HTTP_TIMEOUT to 5 seconds0.1.4 December 14, 2016
fallback browser support, in case of unavailable data sourcesfake_useragent.FakeUserAgent for fake_useragent.UserAgent
fake_useragent.UserAgentError for fake_useragent.FakeUserAgentError
fake_useragent.settings.HTTP_TIMEOUT to 3 secondssafe_attrs for prevent overriding by __getattr__
0.1.3 November 24, 2016
fake_useragent.errors.FakeUserAgentError in case when there is not way to download datafake_useragent.errors.FakeUserAgentError instead of None in case of unknown browsergevent.sleep support in gevent patched environment when trying to download dataX.X.X xxxxxxx xx, xxxx
You can visit authors page.