Генератор User-Agent: актуальные строки, которые не устарели

Работает в браузере — ничего из введённого не отправляется нам.

Строка, заявляющая версию браузера, снятую три релиза назад, — примета, а не маскировка. Такие строки собираются из версии вашего собственного браузера там, где её можно прочитать, поэтому они остаются актуальными, и список не нужно никому поддерживать.

Шаблон десктопа — это одна точная строка: реальные браузеры одной версии и платформы отправляют одно и то же, и если её менять, ваш станет единственным отличающимся. Мобильные шаблоны варьируют версию ОС и модель — реальные устройства действительно так делают.

Собирается прямо в браузере из шаблонов на странице. Ничего не запрашивается и не отправляется — генератор работает без подключения к сети.

Почему сгенерированный user-agent обычно не решает проблему

Об этом стоит сказать до инструмента, а не после него. Замена строки user-agent — первое, что пытаются сделать, когда скрапер начинают блокировать, и сама по себе она редко помогает: строка — самое дешёвое, что читает сайт, и почти никогда не единственное.

Запрос приходит с user-agent, набором заголовков в определённом порядке, параметрами TLS-рукопожатия, характерными для клиентской библиотеки, и, если выполняется JavaScript, несколькими десятками браузерных значений. Если вы выдаёте себя за Chrome на Windows, а ваша HTTP-библиотека отправляет собственный порядок заголовков и собственный TLS-отпечаток, получается запрос, который не совпадает ни с одним реальным браузером. Для блокировщика это более сильный сигнал, чем был бы у простого, честного python-requests/2.31.0.

А вот где актуальный и правильный user-agent действительно важен — это обратный случай: у вас запущен настоящий браузер, всё остальное в запросе подлинное, а строка — единственное устаревшее значение. Так бывает чаще, чем кажется: строку один раз вставляют в конфиг, а потом она работает два года.

Как этот генератор остаётся актуальным

Именно здесь большинство генераторов ошибается. Жёстко заданная таблица версий точна в ту неделю, когда выходит, и тихо устаревает через месяц; строка с версией Chrome, снятой три релиза назад, — это флаг, а не маскировка. Chrome выпускает мажорную версию примерно раз в четыре недели.

Поэтому номера версий здесь берутся из вашего браузера везде, где мы можем их прочитать. Если вы в Chrome, шаблоны Chrome используют версию, на которой вы действительно работаете; она актуальна по определению и не требует обслуживания с нашей стороны. То же с Firefox, Edge и Safari. Только когда мы не можем определить семейство по вашему браузеру — запрашиваем строки Firefox, находясь в Chrome, — страница откатывается к таблице, которую мы ведём вручную, и прямо об этом сообщает, с датой последней проверки, вместо того чтобы делать вид, что данные свежие.

Почему десктопные шаблоны не варьируются

Можно заметить, что запрос десяти строк Chrome для Windows даёт одну. Это сделано намеренно, и это противоположность тому, что делает большинство генераторов. Каждый настоящий Chrome на 64-битной Windows заданной версии отправляет побайтово одинаковый user-agent: в строке вообще нет деталей, специфичных для машины. Генератор, который менял бы минорную версию или перемешивал токены, выдал бы десять строк, которые не отправлял ни один браузер, и каждая из них по отдельности подозрительнее настоящей.

Мобильные шаблоны отличаются, потому что отличаются реальные устройства: версия Android и строка модели действительно различаются от аппарата к аппарату, и пул одинаковых Android-агентов так же странен, как пул разных десктопных агентов.

Где строка появляется, а где нет

«Смена user-agent» означает разное в разных местах, и эти места не всегда согласуются между собой — а это само по себе один из способов обнаружить несоответствие.

  • Заголовок User-Agent. Уходит с каждым запросом, включая запросы за картинками и таблицами стилей. Именно его выставляет HTTP-библиотека, и только его видит сервер, если JavaScript не выполняется.
  • navigator.userAgent. Его читают скрипты на странице. Расширение, которое подменяет заголовок, но не это свойство, создаёт противоречие, которое найдёт одна строка JavaScript — и многие расширения делают именно так.
  • Client Hints. Набор отдельных заголовков (Sec-CH-UA и родственные), которые современные браузеры на Chromium отправляют вместе со строкой. В них бренд, версия и платформа в структурированном виде, и именно туда Chrome переносит подробности, убранные из строки. Подменить строку, когда Client Hints говорят правду, — частое и легко обнаруживаемое несоответствие.
  • И нигде — для TLS. Рукопожатие происходит до того, как отправлен хоть один заголовок, и его параметры опознают клиентскую библиотеку независимо от того, что вы задали. Поэтому запрос из Python, который выдаёт себя за Chrome, ловят раньше, чем прочитан user-agent.

Коротко: если задать строку в одном месте и не задать в остальных, получится клиент, который не совпадает ни с чем реальным. Работаете через браузер — меняйте её тем, что меняет всё сразу; работаете через библиотеку — примите, что строка тут наименьшая из проблем.

Как пользоваться и не сделать хуже

  • Согласуйте платформу со всем остальным. Строка macOS с машины, где набор шрифтов и client hints от Windows, — противоречие, и проверка отпечатка покажет, какие значения вас выдают.
  • Не отправляйте мобильную строку с десктопного соединения. Агент iPhone при экране 2560×1440, без поддержки касаний и с адресом дата-центра достаточно конкретен, чтобы выглядеть намеренным.
  • Меняйте устройства, а не версии. Если пул должен выглядеть разнообразным, варьируйте платформу и устройство. Три версии Chrome на одинаковом железе — это не разнообразие, это браузер посреди обновления.
  • Перегенерируйте периодически. Что бы вы ни вставили в конфиг сегодня, оно устареет на том же четырёхнедельном цикле, что и у всех. Если вы берёте строки из своего браузера здесь, то, вернувшись после нескольких обновлений, получите актуальные.
  • Сначала приведите в порядок остальную часть запроса. Если вы собираете данные HTTP-библиотекой, а не браузером, порядок заголовков и отпечаток TLS важнее строки. Берите клиент, который имитирует браузер на этом уровне, или запускайте настоящий браузер.

Чтобы проверить, что на самом деле утверждает уже имеющаяся у вас строка — в том числе запускает ли кто-нибудь ещё такую версию, — вставьте её в парсер user-agent.

Вопросы о Генератор user-agent

Почему на запрос десяти десктопных строк я получаю одну?

Потому что каждый настоящий Chrome одной и той же версии на 64-битной Windows отправляет ровно одну и ту же строку — в ней нет ничего машинно-специфичного. Десять разных строк были бы десятью строками, которые не отправил ни один браузер, и каждая подозрительнее настоящей. Мобильные шаблоны действительно различаются, потому что реальные устройства правда разные.

Эти номера версий актуальны?

Там, где мы можем прочитать версию вашего собственного браузера, — да, по определению: шаблоны Chrome используют тот Chrome, в котором вы работаете. Для семейства, которое нельзя прочитать из вашего браузера, страница обращается к таблице, которую мы поддерживаем вручную, и сообщает, когда её последний раз проверяли.

Перестану ли я попадать под блокировки, если сменю user-agent?

Сама по себе — обычно нет. Строка — самое дешёвое, что читает сайт, и почти никогда не единственное: порядок заголовков, TLS-отпечаток и несколько дюжин значений браузера тоже проверяются. Строка Chrome из HTTP-библиотеки Python не соответствует ни одному реальному браузеру и является лучшим сигналом, чем честная.

Отправляется ли вам что-нибудь, когда я генерирую?

Нет. Шаблоны находятся на странице, а строки собираются в вашем браузере. Генератор работает при отключённом соединении.

Можно ли использовать их для парсера?

Можно, и это будут корректные строки. Поможет ли это — зависит от остальной части запроса: если вы используете HTTP-библиотеку, а не браузер, сначала исправьте порядок заголовков и TLS-отпечаток, потому что их проверяют чаще, чем строку.

Должен ли каждый запрос в пуле использовать другой user-agent?

Меняйте платформу и устройство, а не версию. Несколько версий одного и того же браузера на одинаковом оборудовании выглядят как браузер в процессе обновления, а не как несколько человек. А двести запросов с одной и той же побайтово идентичной строкой — самый простой шаблон для блокировки.

Другие бесплатные инструменты

Все бесплатные инструменты →