Skip to main content

GitHub: py-fake-useragent

Библиотека 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 и репозиториев.
  • Высокая отказоустойчивость и многоуровневая система фоллбэка:
    1. кэш на диске (опционально).
    2. параллельные сетевые запросы к нескольким источникам (какой-нибудь да ответит!).
    3. математическая аппроксимация версии на основе текущей даты как крайняя мера.
  • Генерация полных заголовков: может генерировать не только 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)

Table of built distributions (wheels) for py-fake-useragent 0.1.2
File Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page