fake-useragent


Namefake-useragent JSON
Version 2.0.3 PyPI version JSON
download
home_pageNone
SummaryUp-to-date simple useragent faker with real world database
upload_time2024-12-10 20:00:38
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords user agent user agent useragent fake fake useragent fake user agent
VCS
bugtrack_url
requirements attrs black build cachetools chardet click colorama coverage distlib exceptiongroup fastjsonschema filelock importlib-resources iniconfig isort mypy-extensions packaging pathspec pep517 platformdirs pluggy py pyparsing pyproject-api pyproject_hooks pytest pytest-cov ruff six tomli tox typing_extensions validate-pyproject virtualenv zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![Test & Deploy fake-useragent](https://github.com/fake-useragent/fake-useragent/actions/workflows/action.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/action.yml?query=branch%3Amain)
[![Ruff linter](https://github.com/fake-useragent/fake-useragent/actions/workflows/ruff.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/ruff.yml?query=branch%3Amain)
[![CodeQL](https://github.com/fake-useragent/fake-useragent/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/codeql.yml?query=branch%3Amain)

# fake-useragent

Up-to-date simple useragent faker with real world database.

## Features

- Data is pre-downloaded & post-processed from [Intoli LLC](https://github.com/intoli/user-agents/tree/main/src) and the data is part of the package itself
- The data consists of a wide range of browser agents and various browsers
- Retrieves user-agent strings (both of type: `desktop`, `tablet` and/or `mobile` UAs)
- Retrieve user-agent Python dictionary (aka object), with fields like `useragent`, `percent`, `type`, `device_brand`, `browser`, `browser_version`, `os`, `os_version` and `platform`
- Supports Python 3.x

### Installation

```sh
pip install fake-useragent
```

Or if you have multiple Python / pip versions installed, use `pip3`:

```sh
pip3 install fake-useragent
```

### Usage

Simple usage examples below, see also next chapters in this readme for more advanced usages:

```py
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.0
```

#### Additional usage

Additional 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:

```py
from fake_useragent import UserAgent
ua = UserAgent(browsers=['Edge', 'Chrome'])
ua.random
```

_Note:_ 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:

```py
from fake_useragent import UserAgent
ua = UserAgent(os='Linux')
ua.random
```

_Note:_ 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:

```py
from fake_useragent import UserAgent
ua = UserAgent(platforms='desktop')
ua.random
```

---

If 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:

```py
from fake_useragent import UserAgent
ua = UserAgent(min_version=120.0)
ua.random
```

---

For 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!

#### User-agent Python Dictionary

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.random` or alike as mentioned above, if you want to use a stable interface.

```py
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')
```

### Notes

You can override the fallback string using the `fallback` parameter, in very rare cases something failed:

```py
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:

```py
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.0
```

If 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 fake*useragent with `injections <https://github.com/tailhook/injections>`* you need to:

```py
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.

### Experiencing issues?

Make sure that you using latest version!

```sh
pip install --upgrade fake-useragent
```

Or if that isn't working, try to install the latest package version like this (`2.0.1` is an example, check what the [latest version is on PyPi](https://pypi.org/project/fake-useragent/#history)):

```sh
pip install fake-useragent==2.0.1
```

Check version via the Python console:

```py
import fake_useragent

print(fake_useragent.__version__)
```

And you are always welcome to post [issues](https://github.com/fake-useragent/fake-useragent/issues).

Please do not forget to mention the version that you are using.

### For Developers

#### User-agent Data

The user-agent data we retrieve from [user-agents.net](https://user-agents.net). Data is stored in [JSONlines](https://jsonlines.org/) format. File is located in the: `src/fake_useragent/data` directory.

We are currently working on a new automation script (see issue [#333](https://github.com/fake-useragent/fake-useragent/issues/333)) to fetch user-agent scripts from user-agents.net and up date the user-agents once in a while.

The data JSON file is part of the Python package, see [pyproject.toml](pyproject.toml). Read more about [Data files support](https://setuptools.pypa.io/en/latest/userguide/datafiles.html).

#### Python Virtual Environment

We encourage to use Python virtual environment before installing Pip packages, like so:

```sh
python -m virtualenv env
source env/bin/activate
```

#### Local Install

```sh
pip install -e .
```

#### Tests

```sh
pip install -r requirements.txt
tox
```

#### Linting

To fix imports using ruff:

```sh
pip install -r requirements.txt
ruff check --select="I" --fix .
```

Fix black code formatting errors:

```sh
pip install -r requirements.txt
black .
```

_Note:_ When ruff v1.0 releases, we most likely move fully towards `ruff` instead of `black`.

### Changelog

- 2.0.1

  - Add requires-python to toml config

- 2.0.0 December 4, 2024

  - Switch to new data source (again again)
  - Possible browser options: `"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"`
  - Possible OS options: `"Windows", "Linux", "Ubuntu", "Chrome OS", "Mac OS X", "Android", "iOS"`
  - Possible type options: `"desktop", "mobile", "tablet"`
  - Update fake.py to handle the new data key/value objects
  - Updated the README
  - Renamed browsers.json to browsers.jsonl. And other refactors.

- 1.5.1 March 16, 2024

  - Remove trailing spaces in user agent strings

- 1.5.0 March 8, 2024

  - Migrated to new user-agent data source (thanks @BoudewijnZwart), backwards compatible API.
  - Update all pip package dependencies to latest stable versions

- 1.4.0 November 24, 2023

  - Update all PIP packages
  - Support Python 3.12 (thanks @vladkens)
  - Fix package conflict in cache scraper
  - Improve ruff CLI calls

- 1.3.0 October 2, 2023

  - Introducing new `ua.getRandom`, `ua.getFirefox`, `ua.getChrome`, `ua.getSafari`. And a generic method: `ua.getBrowser(..)` (eg. `getBrowser('firefox')`)
    - These new properties above allows you to retrieve the whole raw Python dictionary, instead of only the UA string.
    - These properties might return different key/values pairs in the future!
  - Fix the `os` argument 'windows' to check for both `win10`and `win7` values (previously only checking on `win10`), thus returning more UAs
  - Improved user-agent scraper (now also containing Safari browser again)
  - Updated browsers.json data file

- 1.2.1 August 2, 2023

  - Small improvements in the `min_percentage` check
  - Update all Pip package dependencies

- 1.2.0 August 2, 2023

  - Updated browser useragent data
  - Allow filters on browser, OS and usage percentage
  - Update the cache scraper to scape the new data source for user-agent strings
  - Adapted the code to work with the new JSON data format
  - Parameter `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

  - Update dependencies

- 1.1.2 February 8, 2023

  - Security fixes

- 1.1.1 December 4, 2022

  - Remove whitespaces from user agent strings, this is a patch release

- 1.1.0 November 26, 2022

  - Add `pkg_resource` as fallback mechanism in trying to retrieve the local JSON data file

- 1.0.1 November 10, 2022

  - Add `importlib-metadata` & `importlib-resources` as dependencies
  - Check on specific Python version regarding the importlib resources (python v3.10 or higher) in order to have `files()` working
  - `importlib_metadata` should now also work on Python version before 3.8
  - Remove obsolete `MANIFEST.in` file

- 1.0.0 November 17, 2022

  - Make the JSON Lines data file part of the Python package, data is retrieved locally
    - Extend the `myproject.toml` file with `package-data` support
  - Remove centralized caching server implementation
  - Make real unit-tests which should run reliable, fast, independent and without Internet connection

- 0.1.14 November 5, 2022

  - Improve code quality standards using modern Python >=3.7 syntax
  - Migrated to `pyproject.toml` build system format + syntax check
  - Add additional classifiers to the toml file
  - Improved `tox.ini` file
  - Improved GitHub Actions job using pip cache
  - And various small fixes

- 0.1.13 October 21, 2022

  - Implement `browsers` argument, allowing you to override the browser names you want to use
  - Fix browser listing of Internet Explorer and Edge
  - Don't depend on w3schools.com anymore
  - Clean-up data (temp) file format
  - Update fallback cache server URL / use JSON Lines as file format
  - Move to GitHub Actions instead of Travis
  - Using [`black`](https://pypi.org/project/black/) Python formatter in favour of Flake

- 0.1.12 March 31, 2022

  - forked

- 0.1.11 October 4, 2018

  - moved `s3 + cloudfront` fallback to `heroku.com`, cuz someone from Florida did ~25M requests last month

- 0.1.10 February 11, 2018

  - Minor fix docs `cloudfront` url

- 0.1.9 February 11, 2018

  - fix `w3schools.com` renamed `IE/Edge` to `Edge/IE`
  - moved `heroku.com` fallback to `s3 + cloudfront`
  - stop testing Python3.3 and pypy

- 0.1.8 November 2, 2017

  - fix `useragentstring.com` `Can't connect to local MySQL server through socket`

- 0.1.7 April 2, 2017

  - fix broken README.rst

- 0.1.6 April 2, 2017

  - fixes bug `use_cache_server` do not affected anything
  - `w3schools.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

  - added `ua.edge` alias to Internet Explorer
  - w3schools.com starts displaying `Edge` statistic
  - Python 2.6 is not tested anymore
  - `use_cache_server` option added
  - Increased `fake_useragent.settings.HTTP_TIMEOUT` to 5 seconds

- 0.1.4 December 14, 2016

  - Added custom data file location support
  - Added `fallback` browser support, in case of unavailable data sources
  - Added alias `fake_useragent.FakeUserAgent` for `fake_useragent.UserAgent`
  - Added alias `fake_useragent.UserAgentError` for `fake_useragent.FakeUserAgentError`
  - Reduced `fake_useragent.settings.HTTP_TIMEOUT` to 3 seconds
  - Started migration to new data file format
  - Simplified a lot 4+ years out of date code
  - Better thread/greenlet safety
  - Added verbose logging
  - Added `safe_attrs` for prevent overriding by `__getattr__`

- 0.1.3 November 24, 2016

  - Added hosted data file, when remote services is unavailable
  - Raises `fake_useragent.errors.FakeUserAgentError` in case when there is not way to download data
  - Raises `fake_useragent.errors.FakeUserAgentError` instead of `None` in case of unknown browser
  - Added `gevent.sleep` support in `gevent` patched environment when trying to download data

- X.X.X xxxxxxx xx, xxxx
  - xxxxx ?????

### Authors

You can visit [authors page](https://github.com/fake-useragent/fake-useragent/blob/main/AUTHORS).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fake-useragent",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "user, agent, user agent, useragent, fake, fake useragent, fake user agent",
    "author": null,
    "author_email": "Melroy van den Berg <melroy@melroy.org>, Victor Kovtun <hellysmile@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/d6/a4/f8d204c20e7879c2c1fd1719095673f447a3111282bfe09c0a74a5ed5000/fake_useragent-2.0.3.tar.gz",
    "platform": null,
    "description": "[![Test & Deploy fake-useragent](https://github.com/fake-useragent/fake-useragent/actions/workflows/action.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/action.yml?query=branch%3Amain)\n[![Ruff linter](https://github.com/fake-useragent/fake-useragent/actions/workflows/ruff.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/ruff.yml?query=branch%3Amain)\n[![CodeQL](https://github.com/fake-useragent/fake-useragent/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/fake-useragent/fake-useragent/actions/workflows/codeql.yml?query=branch%3Amain)\n\n# fake-useragent\n\nUp-to-date simple useragent faker with real world database.\n\n## Features\n\n- Data is pre-downloaded & post-processed from [Intoli LLC](https://github.com/intoli/user-agents/tree/main/src) and the data is part of the package itself\n- The data consists of a wide range of browser agents and various browsers\n- Retrieves user-agent strings (both of type: `desktop`, `tablet` and/or `mobile` UAs)\n- Retrieve user-agent Python dictionary (aka object), with fields like `useragent`, `percent`, `type`, `device_brand`, `browser`, `browser_version`, `os`, `os_version` and `platform`\n- Supports Python 3.x\n\n### Installation\n\n```sh\npip install fake-useragent\n```\n\nOr if you have multiple Python / pip versions installed, use `pip3`:\n\n```sh\npip3 install fake-useragent\n```\n\n### Usage\n\nSimple usage examples below, see also next chapters in this readme for more advanced usages:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent()\n\n# Get a random browser user-agent string\nprint(ua.random)\n# Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0\n\n# Or get user-agent string from a specific browser\nprint(ua.chrome)\n# Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\nprint(ua.google)\n# 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\nprint(ua['Chrome'])\n# 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\nprint(ua.firefox)\n# Mozilla/5.0 (Android 14; Mobile; rv:133.0) Gecko/133.0 Firefox/133.0\nprint(ua.ff)\n# Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0\nprint(ua.safari)\n# 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\nprint(ua.opera)\n# 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\nprint(ua.edge)\n# 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.0\n```\n\n#### Additional usage\n\nAdditional features that fake-useragent now offers since v1.2.0.\n\nIf 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\"]`).  \nThis example will only return random user-agents from Edge and Chrome:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent(browsers=['Edge', 'Chrome'])\nua.random\n```\n\n_Note:_ 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).  \n_Note #2:_ Since fakeuser-agent v2.0.0 the browser names are case-sensitive!\n\n---\n\nIf 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\"]`).  \nIn this example you will only get Linux user-agents back:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent(os='Linux')\nua.random\n```\n\n_Note:_ Since fakeuser-agent v2.0.0 the OS names are case-sensitive!\n\n---\n\nYou can also specify the type of platforms you want to use, you can do that via the `platforms` argument (default is `[\"desktop\", \"mobile\", \"tablet\"]`.\nThis example will only return random user-agents from a mobile device:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent(platforms='desktop')\nua.random\n```\n\n---\n\nIf 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).  \nIn this example you get only user agents that have a minimum version of 120.0:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent(min_version=120.0)\nua.random\n```\n\n---\n\nFor backwards compatibility, a minimum usage percentage can still be specified with the `min_percentage` argument. However, the current list of user agents does\nnot contain this statistic. Therefore all of the user-agents will match.\n\n---\n\n_Hint:_ Of-course you can **combine all those arguments** to you liking!\n\n#### User-agent Python Dictionary\n\nSince 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:\n\n> **Warning**\n> Raw JSON objects (in a Python dictionaries) are returned \"as is\".\n> Meaning, this data structure could change in the future!\n>\n> Be aware that these \"get\" properties below might not return the same key/value pairs in the future.\n> Use `ua.random` or alike as mentioned above, if you want to use a stable interface.\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent()\n\n# Random user-agent dictionary (object)\nua.getRandom\n# {'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'}\n\n# More get properties:\nua.getFirefox\n# {'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'}\nua.getChrome\nua.getSafari\nua.getEdge\n\n# And a method with an argument.\n# This is exactly the same as using: ua.getFirefox\nua.getBrowser('firefox')\n```\n\n### Notes\n\nYou can override the fallback string using the `fallback` parameter, in very rare cases something failed:\n\n```py\nfrom fake_useragent import UserAgent\n\nua = UserAgent(fallback='your favorite Browser')\n# in case if something went wrong, one more time it is REALLY!!! rare case\nua.random == 'your favorite Browser'\n```\n\nIf you will try to get unknown browser:\n\n```py\nfrom fake_useragent import UserAgent\nua = UserAgent()\nprint(ua.unknown)\n#Error occurred during getting browser: randm, but was suppressed with fallback.\n#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.0\n```\n\nIf you need to safe some attributes from overriding them in UserAgent by `__getattr__` method\nuse `safe_attrs` you can pass there attributes names.\nAt least this will prevent you from raising FakeUserAgentError when attribute not found.\n\nFor example, when using fake*useragent with `injections <https://github.com/tailhook/injections>`* you need to:\n\n```py\nfrom fake_useragent import UserAgent\n\nua = UserAgent(safe_attrs=('__injections__',))\n```\n\nPlease, do not use if you don't understand why you need this.\nThis is magic for rarely extreme case.\n\n### Experiencing issues?\n\nMake sure that you using latest version!\n\n```sh\npip install --upgrade fake-useragent\n```\n\nOr if that isn't working, try to install the latest package version like this (`2.0.1` is an example, check what the [latest version is on PyPi](https://pypi.org/project/fake-useragent/#history)):\n\n```sh\npip install fake-useragent==2.0.1\n```\n\nCheck version via the Python console:\n\n```py\nimport fake_useragent\n\nprint(fake_useragent.__version__)\n```\n\nAnd you are always welcome to post [issues](https://github.com/fake-useragent/fake-useragent/issues).\n\nPlease do not forget to mention the version that you are using.\n\n### For Developers\n\n#### User-agent Data\n\nThe user-agent data we retrieve from [user-agents.net](https://user-agents.net). Data is stored in [JSONlines](https://jsonlines.org/) format. File is located in the: `src/fake_useragent/data` directory.\n\nWe are currently working on a new automation script (see issue [#333](https://github.com/fake-useragent/fake-useragent/issues/333)) to fetch user-agent scripts from user-agents.net and up date the user-agents once in a while.\n\nThe data JSON file is part of the Python package, see [pyproject.toml](pyproject.toml). Read more about [Data files support](https://setuptools.pypa.io/en/latest/userguide/datafiles.html).\n\n#### Python Virtual Environment\n\nWe encourage to use Python virtual environment before installing Pip packages, like so:\n\n```sh\npython -m virtualenv env\nsource env/bin/activate\n```\n\n#### Local Install\n\n```sh\npip install -e .\n```\n\n#### Tests\n\n```sh\npip install -r requirements.txt\ntox\n```\n\n#### Linting\n\nTo fix imports using ruff:\n\n```sh\npip install -r requirements.txt\nruff check --select=\"I\" --fix .\n```\n\nFix black code formatting errors:\n\n```sh\npip install -r requirements.txt\nblack .\n```\n\n_Note:_ When ruff v1.0 releases, we most likely move fully towards `ruff` instead of `black`.\n\n### Changelog\n\n- 2.0.1\n\n  - Add requires-python to toml config\n\n- 2.0.0 December 4, 2024\n\n  - Switch to new data source (again again)\n  - Possible browser options: `\"Google\", \"Chrome\", \"Firefox\", \"Edge\", \"Opera\",\" Safari\", \"Android\", \"Yandex Browser\", \"Samsung Internet\", \"Opera Mobile\",\n\"Mobile Safari\", \"Firefox Mobile\", \"Firefox iOS\", \"Chrome Mobile\", \"Chrome Mobile iOS\", \"Mobile Safari UI/WKWebView\",\n\"Edge Mobile\", \"DuckDuckGo Mobile\", \"MiuiBrowser\", \"Whale\", \"Twitter\", \"Facebook\", \"Amazon Silk\"`\n  - Possible OS options: `\"Windows\", \"Linux\", \"Ubuntu\", \"Chrome OS\", \"Mac OS X\", \"Android\", \"iOS\"`\n  - Possible type options: `\"desktop\", \"mobile\", \"tablet\"`\n  - Update fake.py to handle the new data key/value objects\n  - Updated the README\n  - Renamed browsers.json to browsers.jsonl. And other refactors.\n\n- 1.5.1 March 16, 2024\n\n  - Remove trailing spaces in user agent strings\n\n- 1.5.0 March 8, 2024\n\n  - Migrated to new user-agent data source (thanks @BoudewijnZwart), backwards compatible API.\n  - Update all pip package dependencies to latest stable versions\n\n- 1.4.0 November 24, 2023\n\n  - Update all PIP packages\n  - Support Python 3.12 (thanks @vladkens)\n  - Fix package conflict in cache scraper\n  - Improve ruff CLI calls\n\n- 1.3.0 October 2, 2023\n\n  - Introducing new `ua.getRandom`, `ua.getFirefox`, `ua.getChrome`, `ua.getSafari`. And a generic method: `ua.getBrowser(..)` (eg. `getBrowser('firefox')`)\n    - These new properties above allows you to retrieve the whole raw Python dictionary, instead of only the UA string.\n    - These properties might return different key/values pairs in the future!\n  - Fix the `os` argument 'windows' to check for both `win10`and `win7` values (previously only checking on `win10`), thus returning more UAs\n  - Improved user-agent scraper (now also containing Safari browser again)\n  - Updated browsers.json data file\n\n- 1.2.1 August 2, 2023\n\n  - Small improvements in the `min_percentage` check\n  - Update all Pip package dependencies\n\n- 1.2.0 August 2, 2023\n\n  - Updated browser useragent data\n  - Allow filters on browser, OS and usage percentage\n  - Update the cache scraper to scape the new data source for user-agent strings\n  - Adapted the code to work with the new JSON data format\n  - Parameter `use_external_data=True` and `verify_ssl` are **removed**. If you use those parameters, just remove it in your code!\n\n- 1.1.3 March 20, 2023\n\n  - Update dependencies\n\n- 1.1.2 February 8, 2023\n\n  - Security fixes\n\n- 1.1.1 December 4, 2022\n\n  - Remove whitespaces from user agent strings, this is a patch release\n\n- 1.1.0 November 26, 2022\n\n  - Add `pkg_resource` as fallback mechanism in trying to retrieve the local JSON data file\n\n- 1.0.1 November 10, 2022\n\n  - Add `importlib-metadata` & `importlib-resources` as dependencies\n  - Check on specific Python version regarding the importlib resources (python v3.10 or higher) in order to have `files()` working\n  - `importlib_metadata` should now also work on Python version before 3.8\n  - Remove obsolete `MANIFEST.in` file\n\n- 1.0.0 November 17, 2022\n\n  - Make the JSON Lines data file part of the Python package, data is retrieved locally\n    - Extend the `myproject.toml` file with `package-data` support\n  - Remove centralized caching server implementation\n  - Make real unit-tests which should run reliable, fast, independent and without Internet connection\n\n- 0.1.14 November 5, 2022\n\n  - Improve code quality standards using modern Python >=3.7 syntax\n  - Migrated to `pyproject.toml` build system format + syntax check\n  - Add additional classifiers to the toml file\n  - Improved `tox.ini` file\n  - Improved GitHub Actions job using pip cache\n  - And various small fixes\n\n- 0.1.13 October 21, 2022\n\n  - Implement `browsers` argument, allowing you to override the browser names you want to use\n  - Fix browser listing of Internet Explorer and Edge\n  - Don't depend on w3schools.com anymore\n  - Clean-up data (temp) file format\n  - Update fallback cache server URL / use JSON Lines as file format\n  - Move to GitHub Actions instead of Travis\n  - Using [`black`](https://pypi.org/project/black/) Python formatter in favour of Flake\n\n- 0.1.12 March 31, 2022\n\n  - forked\n\n- 0.1.11 October 4, 2018\n\n  - moved `s3 + cloudfront` fallback to `heroku.com`, cuz someone from Florida did ~25M requests last month\n\n- 0.1.10 February 11, 2018\n\n  - Minor fix docs `cloudfront` url\n\n- 0.1.9 February 11, 2018\n\n  - fix `w3schools.com` renamed `IE/Edge` to `Edge/IE`\n  - moved `heroku.com` fallback to `s3 + cloudfront`\n  - stop testing Python3.3 and pypy\n\n- 0.1.8 November 2, 2017\n\n  - fix `useragentstring.com` `Can't connect to local MySQL server through socket`\n\n- 0.1.7 April 2, 2017\n\n  - fix broken README.rst\n\n- 0.1.6 April 2, 2017\n\n  - fixes bug `use_cache_server` do not affected anything\n  - `w3schools.com <https://www.w3schools.com/browsers/browsers_stats.asp>`\\_ moved to `https`\n  - `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)\n\n- 0.1.5 February 28, 2017\n\n  - added `ua.edge` alias to Internet Explorer\n  - w3schools.com starts displaying `Edge` statistic\n  - Python 2.6 is not tested anymore\n  - `use_cache_server` option added\n  - Increased `fake_useragent.settings.HTTP_TIMEOUT` to 5 seconds\n\n- 0.1.4 December 14, 2016\n\n  - Added custom data file location support\n  - Added `fallback` browser support, in case of unavailable data sources\n  - Added alias `fake_useragent.FakeUserAgent` for `fake_useragent.UserAgent`\n  - Added alias `fake_useragent.UserAgentError` for `fake_useragent.FakeUserAgentError`\n  - Reduced `fake_useragent.settings.HTTP_TIMEOUT` to 3 seconds\n  - Started migration to new data file format\n  - Simplified a lot 4+ years out of date code\n  - Better thread/greenlet safety\n  - Added verbose logging\n  - Added `safe_attrs` for prevent overriding by `__getattr__`\n\n- 0.1.3 November 24, 2016\n\n  - Added hosted data file, when remote services is unavailable\n  - Raises `fake_useragent.errors.FakeUserAgentError` in case when there is not way to download data\n  - Raises `fake_useragent.errors.FakeUserAgentError` instead of `None` in case of unknown browser\n  - Added `gevent.sleep` support in `gevent` patched environment when trying to download data\n\n- X.X.X xxxxxxx xx, xxxx\n  - xxxxx ?????\n\n### Authors\n\nYou can visit [authors page](https://github.com/fake-useragent/fake-useragent/blob/main/AUTHORS).\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Up-to-date simple useragent faker with real world database",
    "version": "2.0.3",
    "project_urls": {
        "Homepage": "https://github.com/fake-useragent/fake-useragent"
    },
    "split_keywords": [
        "user",
        " agent",
        " user agent",
        " useragent",
        " fake",
        " fake useragent",
        " fake user agent"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "114fa639b1dbdc557241e702eefb931ba24ba235c84f8fffdca3e272f096c6af",
                "md5": "68712d82a61cffd9f29b56a9e1654ee6",
                "sha256": "8bae50abb72c309a5b3ae2f01a0b82426613fd5c4e2a04dca9332399ec44daa1"
            },
            "downloads": -1,
            "filename": "fake_useragent-2.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "68712d82a61cffd9f29b56a9e1654ee6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 201110,
            "upload_time": "2024-12-10T20:00:36",
            "upload_time_iso_8601": "2024-12-10T20:00:36.622407Z",
            "url": "https://files.pythonhosted.org/packages/11/4f/a639b1dbdc557241e702eefb931ba24ba235c84f8fffdca3e272f096c6af/fake_useragent-2.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d6a4f8d204c20e7879c2c1fd1719095673f447a3111282bfe09c0a74a5ed5000",
                "md5": "aee20424f9133ec4394e7f5475ad5655",
                "sha256": "af86a26ef8229efece8fed529b4aeb5b73747d889b60f01cd477b6f301df46e6"
            },
            "downloads": -1,
            "filename": "fake_useragent-2.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "aee20424f9133ec4394e7f5475ad5655",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 194741,
            "upload_time": "2024-12-10T20:00:38",
            "upload_time_iso_8601": "2024-12-10T20:00:38.030840Z",
            "url": "https://files.pythonhosted.org/packages/d6/a4/f8d204c20e7879c2c1fd1719095673f447a3111282bfe09c0a74a5ed5000/fake_useragent-2.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-10 20:00:38",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "fake-useragent",
    "github_project": "fake-useragent",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "24.2.0"
                ]
            ]
        },
        {
            "name": "black",
            "specs": [
                [
                    "==",
                    "24.10.0"
                ]
            ]
        },
        {
            "name": "build",
            "specs": [
                [
                    "==",
                    "1.2.2.post1"
                ]
            ]
        },
        {
            "name": "cachetools",
            "specs": [
                [
                    "==",
                    "5.5.0"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.1.7"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "coverage",
            "specs": [
                [
                    "==",
                    "7.6.8"
                ]
            ]
        },
        {
            "name": "distlib",
            "specs": [
                [
                    "==",
                    "0.3.9"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.2.2"
                ]
            ]
        },
        {
            "name": "fastjsonschema",
            "specs": [
                [
                    "==",
                    "2.20.0"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.16.1"
                ]
            ]
        },
        {
            "name": "importlib-resources",
            "specs": [
                [
                    "==",
                    "6.4.5"
                ]
            ]
        },
        {
            "name": "iniconfig",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "isort",
            "specs": [
                [
                    "==",
                    "5.13.2"
                ]
            ]
        },
        {
            "name": "mypy-extensions",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.2"
                ]
            ]
        },
        {
            "name": "pathspec",
            "specs": [
                [
                    "==",
                    "0.12.1"
                ]
            ]
        },
        {
            "name": "pep517",
            "specs": [
                [
                    "==",
                    "0.13.1"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "4.3.6"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "py",
            "specs": [
                [
                    "==",
                    "1.11.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "pyproject-api",
            "specs": [
                [
                    "==",
                    "1.6.1"
                ]
            ]
        },
        {
            "name": "pyproject_hooks",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "8.3.3"
                ]
            ]
        },
        {
            "name": "pytest-cov",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "ruff",
            "specs": [
                [
                    "==",
                    "0.8.1"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "tomli",
            "specs": [
                [
                    "==",
                    "2.2.1"
                ]
            ]
        },
        {
            "name": "tox",
            "specs": [
                [
                    "==",
                    "4.14.1"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    "==",
                    "4.12.2"
                ]
            ]
        },
        {
            "name": "validate-pyproject",
            "specs": [
                [
                    "==",
                    "0.23"
                ]
            ]
        },
        {
            "name": "virtualenv",
            "specs": [
                [
                    "==",
                    "20.25.1"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.21.0"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "fake-useragent"
}
        
Elapsed time: 0.40815s