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

fake-useragent, updated 🕥 2023-03-21 23:08:21

Test & Deploy fake-useragent

fake-useragent

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

Features

  • Data is pre-downloaded from useragentstring.com and the data is part of the package
  • Retrieves user-agent strings locally
  • Supports Python 3.x
  • Fallback to external resource (useragentstring.com)

Installation

sh pip install fake-useragent

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

sh pip3 install fake-useragent

Usage

```py from fake_useragent import UserAgent ua = UserAgent()

ua.ie

Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);

ua.msie

Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'

ua['Internet Explorer']

Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)

ua.opera

Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11

ua.chrome

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'

ua.google

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13

ua['google chrome']

Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11

ua.firefox

Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1

ua.ff

Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1

ua.safari

Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

and the best one, get a random browser user-agent string

ua.random ```

Notes

If you want to specify your own browser list, you can do that via the browsers argument (default is: ["chrome", "edge", "internet explorer", "firefox", "safari", "opera"]).

py from fake_useragent import UserAgent ua = UserAgent(browsers=['edge', 'chrome']) ua.random

You can add your own fallback string using the fallback parameter, in rare cases everything else failed:

```py import fake_useragent

ua = fake_useragent.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() ua.unknown

Traceback (most recent call last):

...

fake_useragent.errors.FakeUserAgentError: Error occurred during getting browser: unknown

```

By default fake-useragent will use it's local (browsers.json) data file as the data source.

If you don't want to use the local data, but use the external data source to retrieve the user-agents. Set use_external_data to True:

py from fake_useragent import UserAgent ua = UserAgent(use_external_data=True)

As a fallback method fake-useragent will retrieve it's data from an external data source and stores in a cache file or when you expcility set use_external_data=True as parameter. You can trigger an update to the cache file by calling update():

py from fake_useragent import UserAgent ua = UserAgent() ua.update()

The default location of the external resource cache file is in your os temp dir, like /tmp.
You can change the temp directory by changing cache_path (mainly useful together when use_external_data is set to True).

```py import fake_useragent

I am strongly! recommend using a version suffix

location = '/home/user/fake_useragent%s.json' % fake_useragent.VERSION

ua = fake_useragent.UserAgent(use_external_data=True, cache_path=location) ua.random ```

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 fakeuseragent with injections <https://github.com/tailhook/injections> you need to:

```py import fake_useragent

ua = fake_useragent.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 (1.1.3 is an example, check what the latest version is on PyPi):

sh pip install fake-useragent==1.1.3

Check version via the Python console:

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

Developers

Since GitHub Actions is unable to reach useragentstring.com. We can run the script below to automatically scrape the user-agent strings from the external data source. The script will copy the JSONlines file to the src/fake_useragent/data directory. Execute:

sh ./update_data_file.sh

The data JSON file is part of the Python package, see pyproject.toml. Read more about Data files support.

Tests

sh pip install -r requirements.txt tox

Linting

To fix imports:

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

Changelog

  • 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 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.

Issues

WIP: Migrate to new data source

opened on 2023-03-21 23:03:05 by melroy89

Fixes #96, #109

  • [x] Update README/docs
  • [x] Update Scrapy to use the new data source (techblog.willshouse.com)
  • [ ] Update fake-useragent code to use the new JSON data format from willshouse.com
  • [ ] Add new options/fetcher like retrieving user-agents from OS string (eg. win10, macos or linux) and on usage percentage (percent field)
  • [ ] Update tests

Heroku Free Dynos: "fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached"

opened on 2022-11-30 14:52:07 by EmiliaDevs

fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached Possible Fix

  • Kindly note that the free dynos services of Heroku, a hosting provider, has stopped which is causing fake-useragent to crash for all users.
  • fake-useragent hosted one or more of its services to gather info on heroku at https://fake-useragent.herokuapp.com/browsers/0.1.11 which is eventually down after the services got stopped.

To Developers (fake-useragent, @fake-useragent, @hellysmile): Upgrade to paid dynos asap for us to use your services, or move to a vps To Developers (rest, like me): There's nothing we can do on our sides, either wait or use some other pypi package

https://useragentstring.com/ strings are outdated

opened on 2021-05-22 18:44:03 by oussjarrousse

The list of user-agent strings on https://useragentstring.com/ is outdated.

Any idea on how to update the list on that website, and then keep it up to date?

Or maybe it is time to move to a different API provider? or host an alternative to https://useragentstring.com/.

the useragent is not matching my OS

opened on 2019-12-09 13:35:05 by viponedream

from fake_useragent import UserAgent ua = UserAgent(use_cache_server=False) print(ua.chrome) Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36

(Windows NT 6.1; WOW64) -->> does not fit my system. the website can find out i'm using a fake useragent. because he knows i am in windows 10 or linux

Add `__name__` to the default safe_attrs

opened on 2018-04-03 11:44:53 by althonos

Hi there,

this is mostly a compatibility fix with the builtin help function: here's an example (Python 3.6): ```python

import fake_useragent ua = fake_useragent.FakeUserAgent() help(ua) Traceback (most recent call last): File "/home/althonos/.local/lib/python3.6/site-packages/fake_useragent/fake.py", line 136, in getattr return random.choice(self.data_browsers[browser]) KeyError: 'name'

During handling of the above exception, another exception occurred:

... ```

help will crash on any FakeUserAgent instance that does not have __name__ in the safe_attrs. This means that help will also crash on any object that has a FakeUserAgent attribute or property, and so on.

Since I'm confident there aren't many persons aware of this, adding __name__ to the default safe_attrs value will prevent this bug without having end-users to manually patch it.

Distinguish between desktop and mobile (Android vs iOS)

opened on 2017-11-15 09:36:16 by acefei

I writes a spider to crawl the web from PC front with ua.random, but sometimes, it would redirect to mobile front , that's not what I expected. I found it caused by ua.random would return a mobile ua as below: ``` import requests res = requests.get("https://fake-useragent.herokuapp.com/browsers/0.1.5") print res.json()['browsers']['safari'][41]

Mozilla/5.0 (Android 2.2; Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

`` From https://github.com/hellysmile/fake-useragent/issues/10#issuecomment-341654267, there will be eventually addedua.desktopandua.mobile`, I'm really looking forward to it.

Releases

Release v1.1.3 2023-03-20 20:29:51

  • Update deps

Release v1.1.2 2023-02-08 17:43:26

  • Security release update

Release v1.1.1 2022-12-04 22:20:56

  • Remove white spaces from user agent strings, this is a patch release

Release v1.1.0 2022-11-26 20:09:40

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

Release v1.0.1 - Patch fix 2022-11-19 21:05:49

Bug fix release.

  • 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

Release v1.0.0 2022-11-18 18:55:04

Finally, a major release! Version 1.0.0 stable. I hope you like it.

  • 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
Fake useragent

Fake user-agent for Python

GitHub Repository Homepage

python python3 user agent fake faker scraping user-agent user-agent-spoofer useragent useragent-scraper