Package: fake-useragent
fake-useragentUp-to-date simple useragent faker with real world database.FeaturesData is pre-downloaded fromtechblog.willshouse.comand the data is part of the packageRetrieves user-agent strings locallyRetrieve user-agent Python dictionarySupports Python 3.xInstallationpipinstallfake-useragentOr if you have multiple Python / pip versions installed, usepip3:pip3installfake-useragentUsageSimple usage examples below, see also next chapters in this readme for more advanced usages:fromfake_useragentimportUserAgentua=UserAgent()# Get a random browser user-agent stringprint(ua.random)# Or get user-agent string from a specific browserprint(ua.chrome)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36print(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.13print(ua['google chrome'])# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36print(ua.firefox)# Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0print(ua.ff)# Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0print(ua.safari)# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15Additional usageAdditional features that fake-useragent now offers since v1.2.0.If you want to specify your own browser list, you can do that via thebrowsersargument (default is:["chrome", "edge", "firefox", "safari"]).This example will only return random useragents from Edge and Chrome:fromfake_useragentimportUserAgentua=UserAgent(browsers=['edge','chrome'])ua.randomNote:Fakeuser-agent knowns about: Chrome, Edge, Firefox and Safari. Other browsers are not popular enough and aren't part of our dataset we use.If you want to specify your own operating systems, you can do that via theosargument (default is:["windows", "macos", "linux"]).In this example you will only get Linux useragents back:fromfake_useragentimportUserAgentua=UserAgent(os='linux')ua.randomIf you want to return more popular useragent strings, you can play with themin_percentageargument (default is:0.0, meaning all useragents will match).In this example you get only useragents that have a minimum usage percentage of 1.3% (or higher):fromfake_useragentimportUserAgentua=UserAgent(min_percentage=1.3)ua.randomHint:Of-course you cancombine all those argumentsto you liking!User-agent Python DictionarySince 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:WarningRaw 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.
Useua.randomor alike as mentioned above, if you want to use a stable interface.fromfake_useragentimportUserAgentua=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.getChromeua.getSafariua.getEdge# And a method with an argument.# This is exactly the same as using: ua.getFirefoxua.getBrowser('firefox')NotesYou can override the fallback string using thefallbackparameter, in very rare cases something failed:importfake_useragentua=fake_useragent.UserAgent(fallback='your favorite Browser')# in case if something went wrong, one more time it is REALLY!!! rare caseua.random=='your favorite Browser'If you will try to get unknown browser:fromfake_useragentimportUserAgentua=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/114.0.0.0 Safari/537.36If you need to safe some attributes from overriding them in UserAgent by__getattr__method
usesafe_attrsyou can pass there attributes names.
At least this will prevent you from raising FakeUserAgentError when attribute not found.For example, when using fakeuseragent withinjections <https://github.com/tailhook/injections>you need to:importfake_useragentua=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!pipinstall--upgradefake-useragentOr if that isn't working, try to install the latest package version like this (1.4.0is an example, check what thelatest version is on PyPi):pipinstallfake-useragent==1.4.0Check version via the Python console:importfake_useragentprint(fake_useragent.VERSION)And you are always welcome to postissues.Please do not forget to mention the version that you are using.For DevelopersSince GitHub Actions is unable to reach willshouse.com and has Cloudflare protection. We can run the script below to automatically scrape the user-agent strings from the external data source. The script will copy theJSONlinesfile to thesrc/fake_useragent/datadirectory. Execute:./update_data_file.shThe data JSON file is part of the Python package, seepyproject.toml. Read more aboutData files support.Python Virtual EnvironmentWe encourage to use Python virtual environment before installing Pip packages, like so:python-mvirtualenvenvsourceenv/bin/activateTestspipinstall-rrequirements.txt
toxLintingTo fix imports using ruff:pipinstall-rrequirements.txt
ruffcheck--select="I"--fix.Fix black code formatting errors:pipinstall-rrequirements.txt
black.Note:When ruff v1.0 releases, we most likely move fully towardsruffinstead ofblack.Changelog1.4.0 November 24, 2023Update all PIP packagesSupport Python 3.12 (thanks @vladkens)Fix package conflict in cache scraperImprove ruff CLI calls1.3.0 October 2, 2023Introducing newua.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 theosargument 'windows' to check for bothwin10andwin7values (previously only checking onwin10), thus returning more UAsImproved user-agent scraper (now also containing Safari browser again)Updated browsers.json data file1.2.1 August 2, 2023Small improvements in themin_percentagecheckUpdate all Pip package dependencies1.2.0 August 2, 2023Updated browser useragent dataAllow filters on browser, OS and usage percentageUpdate the cache scraper to scape the new data source for user-agent stringsAdapted the code to work with the new JSON data formatParameteruse_external_data=Trueandverify_sslareremoved. If you use those parameters, just remove it in your code!1.1.3 March 20, 2023Update dependencies1.1.2 February 8, 2023Security fixes1.1.1 December 4, 2022Remove whitespaces from user agent strings, this is a patch release1.1.0 November 26, 2022Addpkg_resourceas fallback mechanism in trying to retrieve the local JSON data file1.0.1 November 10, 2022Addimportlib-metadata&importlib-resourcesas dependenciesCheck on specific Python version regarding the importlib resources (python v3.10 or higher) in order to havefiles()workingimportlib_metadatashould now also work on Python version before 3.8Remove obsoleteMANIFEST.infile1.0.0 November 17, 2022Make the JSON Lines data file part of the Python package, data is retrieved locallyExtend themyproject.tomlfile withpackage-datasupportRemove centralized caching server implementationMake real unit-tests which should run reliable, fast, independent and without Internet connection0.1.14 November 5, 2022Improve code quality standards using modern Python >=3.7 syntaxMigrated topyproject.tomlbuild system format + syntax checkAdd additional classifiers to the toml fileImprovedtox.inifileImproved GitHub Actions job using pip cacheAnd various small fixes0.1.13 October 21, 2022Implementbrowsersargument, allowing you to override the browser names you want to useFix browser listing of Internet Explorer and EdgeDon't depend on w3schools.com anymoreClean-up data (temp) file formatUpdate fallback cache server URL / use JSON Lines as file formatMove to GitHub Actions instead of TravisUsingblackPython formatter in favour of Flake0.1.12 March 31, 2022forked0.1.11 October 4, 2018moveds3 + cloudfrontfallback toheroku.com, cuz someone from Florida did ~25M requests last month0.1.10 February 11, 2018Minor fix docscloudfronturl0.1.9 February 11, 2018fixw3schools.comrenamedIE/EdgetoEdge/IEmovedheroku.comfallback tos3 + cloudfrontstop testing Python3.3 and pypy0.1.8 November 2, 2017fixuseragentstring.comCan't connect to local MySQL server through socket0.1.7 April 2, 2017fix broken README.rst0.1.6 April 2, 2017fixes buguse_cache_serverdo not affected anythingw3schools.com <https://www.w3schools.com/browsers/browsers_stats.asp>_ moved tohttpsverify_ssloptions added, by default it isTrue(urllib.urlopenssl context for Python 2.7.9- and 3.4.3- is not supported)0.1.5 February 28, 2017addedua.edgealias to Internet Explorerw3schools.com starts displayingEdgestatisticPython 2.6 is not tested anymoreuse_cache_serveroption addedIncreasedfake_useragent.settings.HTTP_TIMEOUTto 5 seconds0.1.4 December 14, 2016Added custom data file location supportAddedfallbackbrowser support, in case of unavailable data sourcesAdded aliasfake_useragent.FakeUserAgentforfake_useragent.UserAgentAdded aliasfake_useragent.UserAgentErrorforfake_useragent.FakeUserAgentErrorReducedfake_useragent.settings.HTTP_TIMEOUTto 3 secondsStarted migration to new data file formatSimplified a lot 4+ years out of date codeBetter thread/greenlet safetyAdded verbose loggingAddedsafe_attrsfor prevent overriding by__getattr__0.1.3 November 24, 2016Added hosted data file, when remote services is unavailableRaisesfake_useragent.errors.FakeUserAgentErrorin case when there is not way to download dataRaisesfake_useragent.errors.FakeUserAgentErrorinstead ofNonein case of unknown browserAddedgevent.sleepsupport ingeventpatched environment when trying to download dataX.X.X xxxxxxx xx, xxxxxxxxx ?????AuthorsYou can visitauthors page.