@imaginerlabs/user-agent-generator
Version:
High-performance, configurable, batch-generating User-Agent spoofing library. Supports multiple browsers, devices, and returns detailed meta information. Perfect for web scraping, automated testing, proxy pools and more.
213 lines (173 loc) • 9.2 kB
Markdown
<div align="center">
[中文文档](./README_CN.md) | [English](./README.md)
</div>
# 🎭 user-agent-generator
> 🚀 高性能、权重分布、批量生成的 User-Agent 伪装库。支持多浏览器、多设备、真实概率分布,动态拼接 webkit/safari 号,极致防反爬。适用于爬虫、自动化测试、代理池等多场景。
---
## ✨ 特性亮点
- ✅ **智能权重分布**:基于真实使用数据,主流版本/系统/内核高权重,冷门低权重,真实概率分布,极难被频率分析检测
- ✅ **多浏览器/多设备**:支持 Chrome / Safari / Firefox,macOS / Windows / iPhone / iPad
- ✅ **动态 UA 拼接**:webkit/safari 号等字段动态采样,结构高度还原真实浏览器
- ✅ **批量高性能**:毫秒级批量生成,10000条UA < 100ms
- ✅ **可选 meta 信息**:可返回结构化元信息,便于二次处理
- ✅ **数据池可扩展**:所有数据均可自定义扩充,支持权重分布
- ✅ **自动化测试**:功能、性能、数据一致性全覆盖,保障健壮性
---
## 📦 安装
```bash
npm i @imaginerlabs/user-agent-generator
```
## 🔧 快速上手
```js
import { generateUserAgent } from '@imaginerlabs/user-agent-generator';
// 生成 Chrome + Mac 风格的 UA
const ua = generateUserAgent({
browser: 'chrome',
device: 'mac',
});
console.log(ua);
// 输出示例:Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.91 Safari/537.36
// 生成 Safari + iPhone 风格的 UA
const ua2 = generateUserAgent({
browser: 'safari',
device: 'iphone',
});
console.log(ua2);
// 输出示例:Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1
// 生成 Firefox + Windows 风格的 UA
const ua3 = generateUserAgent({
browser: 'firefox',
device: 'windows',
});
console.log(ua3);
// 输出示例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
```
## ✅ 批量生成示例
```js
import { generateUserAgent } from '@imaginerlabs/user-agent-generator';
// 批量生成 3 条 Chrome + Mac 风格的 UA
const uas = generateUserAgent({
browser: 'chrome',
device: 'mac',
count: 3,
});
console.log(uas);
// 输出示例:
// [
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.91 Safari/537.36",
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.92 Safari/537.36",
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.93 Safari/537.36"
// ]
```
## ✅ 带元信息的生成示例
```js
import { generateUserAgent } from '@imaginerlabs/user-agent-generator';
// 生成带元信息的 Chrome + Mac UA
const result = generateUserAgent({
browser: 'chrome',
device: 'mac',
withMeta: true,
});
console.log(result);
// 输出示例:
// {
// "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.91 Safari/537.36",
// "meta": {
// "browser": { "name": "chrome", "version": "124.0.6367.91" },
// "os": { "name": "macos", "version": "14.4" },
// "device": "desktop"
// }
// }
```
## 🧰 API 参数说明
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
| ---------- | ------------------------------------------------ | -------- | ------- | ------------------------------------ |
| `browser` | `'chrome'` | `'safari'` | `'firefox'` | 否 | 随机 | 指定浏览器类型 |
| `device` | `'mac'` | `'windows'` | `'iphone'` | `'ipad'` | 否 | 随机 | 指定设备类型 |
| `count` | `number` | 否 | `1` | 要生成多少条 UA |
| `withMeta` | `boolean` | 否 | `false` | 是否返回版本号等元信息(结构化数据) |
## 🔄 返回值类型说明
| 场景 | 返回类型 | 说明 |
| ---------------- | --------------------- | ------------------------------ |
| 单个UA,无元数据 | `string` | 直接返回UA字符串 |
| 单个UA,带元数据 | `UserAgentWithMeta` | 返回包含ua和meta字段的对象 |
| 多个UA,无元数据 | `string[]` | 返回UA字符串数组 |
| 多个UA,带元数据 | `UserAgentWithMeta[]` | 返回包含ua和meta字段的对象数组 |
| count=0 | `[]` | 返回空数组 |
### UserAgentWithMeta 结构
```typescript
interface UserAgentWithMeta {
ua: string; // User Agent 字符串
meta: {
browser: {
name: BrowserType; // 'chrome' | 'safari' | 'firefox'
version: string; // 浏览器版本号
};
os: {
name: OSType; // 'macos' | 'windows' | 'ios' | 'ipados'
version: string; // 操作系统版本号
};
device: 'desktop' | 'mobile' | 'tablet'; // 设备类型
};
}
```
## 🔍 支持的版本范围与分布
| 分类 | 名称 | 版本范围 | 分布说明 |
| -------- | ------------ | ----------------- | --------------------------------------------------------- |
| 浏览器 | Chrome | `94 ~ 124` | 主流高权重(124权重25,123权重20),冷门低权重(94权重1) |
| | Safari | `13 ~ 17` | 主流高权重,冷门低权重 |
| | Firefox | `88 ~ 126` | 主流高权重,冷门低权重 |
| 操作系统 | macOS | `10.15 ~ 14.4` | 主流高权重,冷门低权重 |
| | Windows | `Windows 7 ~ 11` | 主流高权重,冷门低权重 |
| | iOS (iPhone) | `13 ~ 17` | 主流高权重,冷门低权重 |
| | iPadOS | `13 ~ 17` | 主流高权重,冷门低权重 |
| UA 细节 | WebKit版本 | `537.34 ~ 537.36` | 动态子版本采样,高度还原真实浏览器 |
| | Safari版本 | `537.34 ~ 537.36` | 动态子版本采样,高度还原真实浏览器 |
## 📁 项目目录结构
```
user-agent-generator/
├── /data/ # 各类版本信息数据文件(权重分布,可扩展)
│ ├── chrome.json # Chrome 版本数据(含权重)
│ ├── safari.json # Safari 版本数据(含权重)
│ ├── firefox.json # Firefox 版本数据(含权重)
│ ├── macos.json # macOS 版本数据(含权重)
│ ├── windows.json # Windows 版本数据(含权重)
│ ├── ios.json # iOS 版本数据(含权重)
│ └── ipad.json # iPadOS 版本数据(含权重)
├── /src/
│ ├── index.ts # 主入口模块
│ ├── generator.ts # UA 构造逻辑(权重分布、动态拼接)
│ ├── metaBuilder.ts # Meta 信息组装逻辑
│ ├── types.ts # 类型定义
│ └── utils.ts # 工具函数
├── /test/
│ ├── generator.test.ts # 功能与性能测试(包含10000条UA生成性能测试)
│ ├── dataConsistency.test.ts # 数据一致性测试
│ ├── weightDistribution.test.ts # 权重分布测试
│ ├── weightedRandomEdgeCases.test.ts # 边界情况测试
│ └── errorHandling.test.ts # 错误处理测试
├── README.md
├── package.json
└── tsconfig.json
```
## 🧠 典型应用场景
- 🕷️ Web 爬虫 / 防反爬 User-Agent 池构建
- 🤖 自动化测试(Selenium / Puppeteer)
- 🔐 安全测试、模拟访问
- 🛰️ 构建代理服务器或中间件
- 📊 数据采集与分析
- 🎯 A/B测试与用户行为模拟
## 🚀 性能说明
- 单次生成 10000 条 UA < 100ms(基于测试用例)
- 支持高并发、批量调用
- 使用随机数池优化性能,预生成1000个随机数避免频繁调用Math.random()
- 数据文件缓存机制,避免重复读取文件
## 🛡️ 数据一致性与健壮性
- 所有 data/\*.json 文件均有自动化测试,保障数据结构和内容健康
- UA 结构高度还原真实浏览器,WebKit/Safari 版本动态拼接
- 权重分布机制,极大提升反检测能力,支持带子值的权重版本选择
- 完整的类型定义,支持 TypeScript
- 边界情况处理:count=0返回空数组,错误处理机制完善
- 5个测试套件全覆盖:功能测试、性能测试、数据一致性、权重分布、错误处理
## 📃 License
MIT License © 2025