Библиотека Python+Go для генерации актуальных и правдоподобных строк User-Agent и полных наборов HTTP-заголовков. py-fake-useragent - это скомпилированная библиотека go-fake-useragent для Python через cgo чтобы не переписывать одну и туже логику. Работает через ctypes.
В отличие от других подобных библиотек, py-fake-useragent не использует статичные, захардкоженные или обновляемые вручную списки юзер-агентов. Вместо этого она динамически получает последние версии браузеров (Chrome, Edge) из официальных источников (Google, Microsoft), обеспечивая постоянную актуальность генерируемых данных.
Поддерживаемые браузеры
Только эти два десктопных браузера:
- Google Chrome
- Microsoft Edge
Потому что цель подобных библиотек - обеспечить маскировку под реальные массовые браузеры. Добавление остальных браузеров - бессмысленно, т.к. их доля в десктопном сегменте незначительная. Использование редких юзер-агентов - противоречит цели.
Особенности
- Динамическое обновление: версии браузеров загружаются из официальных API и репозиториев.
- Высокая отказоустойчивость и многоуровневая система фоллбэка:
- кэш на диске (опционально).
- параллельные сетевые запросы к нескольким источникам (какой-нибудь да ответит!).
- математическая аппроксимация версии на основе текущей даты как крайняя мера.
- Генерация полных заголовков: может генерировать не только
User-Agent, но и соответствующие емуsec-ch-uaи прочие заголовки, имитируя реальный браузер (а уже в клиентском коде можно к ним добавить свои). - Кэширование на диске: ускоряет инициализацию при повторных запусках и снижает количество сетевых запросов.
- Поддержка поисковых ботов: генерирует заголовки для маскировки под Googlebot, BingBot и YandexBot.
- Нулевые зависимости: используется только стандартная библиотека Go.
Установка
uv add py_fake_useragent
или:
pip install py_fake_useragent
Использование
import logging
from json import dumps
from py_fake_useragent import UserAgent, CrawlerType
# настройка стандартного логгера Python,
# для большей скорости лучше использовать: https://github.com/microsoft/picologging
logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] %(message)s')
py_logger = logging.getLogger('GoUserAgent')
if __name__ == '__main__':
print('--- инициализация с кэшем и логгером ---')
ua = UserAgent(use_disk_cache=True, logger=py_logger)
print('\n--- получение User-Agent ---')
random_ua = ua.get()
print(f'Случайный UA: {random_ua}')
print('\n--- получение заголовков ---')
headers = ua.get_headers('https://example.com/path')
print(dumps(headers, indent=2))
print('\n--- получение заголовков краулера ---')
google_headers = ua.get_crawler_headers(CrawlerType.GOOGLE)
print('Google Bot:\n', dumps(google_headers, indent=2))
print('\n--- явное закрытие (не обязательно, но рекомендуется если библиотека не будет использоваться дальше) ---')
ua.close()
print('\n--- инициализация без кэша (будет использована аппроксимация, если нет сети)')
print('и с контекстным менеджером `with` для автоматического управления ресурсами ---\n')
with UserAgent(use_disk_cache=False) as ua:
ua_no_cache = ua.get()
print(f'UA без кэша: {ua_no_cache}')
print(f'заголовки без кэша: {dumps(ua.get_headers("https://site.ru/url/path"), indent=2)}')
выходные данные:
--- инициализация с кэшем и логгером ---
[DEBUG] time=2026-06-06T14:15:22.168+05:00 level=DEBUG msg="успешно загружены версии User-Agent из кэша на диске"
--- получение User-Agent ---
Случайный UA: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.178 Safari/537.36 Edg/148.0.7778.178
--- получение заголовков ---
{
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"cache-control": "no-cache",
"device-memory": "32",
"downlink": "8.0",
"dpr": "1.0",
"ect": "4g",
"origin": "https://yandex.ru",
"pragma": "no-cache",
"priority": "u=0, i",
"referer": "https://yandex.ru",
"rtt": "200",
"sec-ch-ua": "\"Microsoft Edge\";v=\"148\", \"Not,A-Brand\";v=\"99\", \"Chromium\";v=\"148\"",
"sec-ch-ua-arch": "\"x86\"",
"sec-ch-ua-bitness": "\"64\"",
"sec-ch-ua-full-version": "\"148.0.7778.178\"",
"sec-ch-ua-full-version-list": "\"Microsoft Edge\";v=\"148.0.7778.178\", \"Not,A-Brand\";v=\"99.0.0.0\", \"Chromium\";v=\"148.0.7778.178\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-model": "\"\"",
"sec-ch-ua-platform": "\"Windows\"",
"sec-ch-ua-platform-version": "\"19.0.0\"",
"sec-ch-ua-wow64": "?0",
"sec-ch-viewport-height": "532",
"sec-ch-viewport-width": "1278",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.178 Safari/537.36 Edg/148.0.7778.178",
"viewport-width": "1278"
}
--- получение заголовков краулера ---
Google Bot:
{
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"from": "googlebot(at)google.com",
"user-agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/139.0.7258.139 Safari/537.36"
}
--- явное закрытие (не обязательно) ---
--- инициализация без кэша (будет использована аппроксимация, если нет сети)
и с контекстным менеджером `with` для автоматического управления ресурсами ---
UA без кэша: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.168 Safari/537.36
заголовки без кэша: {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"cache-control": "no-cache",
"device-memory": "8",
"downlink": "10.0",
"dpr": "1.5",
"ect": "4g",
"origin": "https://yandex.ru",
"pragma": "no-cache",
"priority": "u=0, i",
"referer": "https://yandex.ru",
"rtt": "200",
"sec-ch-ua": "\"Google Chrome\";v=\"148\", \"Not?A)Brand\";v=\"24\", \"Chromium\";v=\"148\"",
"sec-ch-ua-arch": "\"x86\"",
"sec-ch-ua-bitness": "\"64\"",
"sec-ch-ua-full-version": "\"148.0.7778.168\"",
"sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"148.0.7778.168\", \"Not?A)Brand\";v=\"24.0.0.0\", \"Chromium\";v=\"148.0.7778.168\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-model": "\"\"",
"sec-ch-ua-platform": "\"Windows\"",
"sec-ch-ua-platform-version": "\"19.0.0\"",
"sec-ch-ua-wow64": "?0",
"sec-ch-viewport-height": "592",
"sec-ch-viewport-width": "1216",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.168 Safari/537.36",
"viewport-width": "1216"
}
Metadata
Release files for py-fake-useragent 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| py_fake_useragent-0.1.2-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for py_fake_useragent-0.1.2-py3-none-win_amd64.whl |
| py_fake_useragent-0.1.2-py3-none-musllinux_1_1_x86_64.whl | Python 3 | none | Linux musl 1.1+ x86-64 | Details for py_fake_useragent-0.1.2-py3-none-musllinux_1_1_x86_64.whl |
| py_fake_useragent-0.1.2-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl | Python 3 | none | Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 | Details for py_fake_useragent-0.1.2-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl |
| py_fake_useragent-0.1.2-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details for py_fake_useragent-0.1.2-py3-none-macosx_14_0_arm64.whl |
Total release size: 11.4 MB
Release files / py_fake_useragent-0.1.2-py3-none-win_amd64.whl
| Download URL | py_fake_useragent-0.1.2-py3-none-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bddb4f7f5379faa4e5b8b53bc4c3f34ab03087371c2c8547657414f131c4439f
|
|
BLAKE2b-256 checksum How to use checksums |
807cf5d3e45e865dfddc6489c2381feb8af5075de1629fe9b2d172ad30fb659b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / py_fake_useragent-0.1.2-py3-none-musllinux_1_1_x86_64.whl
| Download URL | py_fake_useragent-0.1.2-py3-none-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
29b1f929140c7afacef81f15b0c2ce7d3813e5f07441669df5730bf662d8bc5d
|
|
BLAKE2b-256 checksum How to use checksums |
0821de5c254faa2c2131215a0858018e5fd5d7d3911d505882109f945aa90090
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / py_fake_useragent-0.1.2-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
| Download URL | py_fake_useragent-0.1.2-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
c1eca5827d6b56e018febe1327f53f1f92faf1ce8c85ce8c47997988ac51f400
|
|
BLAKE2b-256 checksum How to use checksums |
9c33fc133b2e31b37b4e409b9dc9d9c67cd1de9afcaf1c8be269d6176bebd99d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / py_fake_useragent-0.1.2-py3-none-macosx_14_0_arm64.whl
| Download URL | py_fake_useragent-0.1.2-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
be5c545ef4954b8474f1d3db2ce1a6a579ce6c47f3503d7242d500b143189480
|
|
BLAKE2b-256 checksum How to use checksums |
66e226b1d56ff54c834941dcfb6fbdcb061df072c9fb4f32a0d3d1457cd91ac2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for py-fake-useragent 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.