`

JavaScript学习笔记2:通过user-Agent获取浏览器和操作系统信息

阅读更多

参考: JavaScript学习笔记2:通过user-Agent获取浏览器和操作系统信息
下面是我整理的一些userAgent大家先看看格式
//Firefox 1.0.X
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
//Firefox 1.X
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8) Gecko/20060109 Firefox/1.5 (pigfoot)
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20060115 Firefox/1.6a1
//Firefox 2.0
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3

//苹果的Safari 2.0.X
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko) Safari/419.3
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko) Safari/417.8

在Windows XP SP2 下, IE7 将发送其 User-Agent 头为:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

在Windows 2003 Server 下, IE7 将发送其 User-Agent 头为:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)

在Windows Vista 下, IE7 将发送其 User-Agent 头为:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

我的机器的
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Maxthon
傲游 1.x 系列的 UserAgent 值是 “Maxthon”,傲游 2.0 的 UserAgent 值是 “Maxthon 2.0″。所以只需要通过程序在 User-Agent 字符串中查找是否出现 “Maxthon” 或者 “Maxthon 2.0″
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; Maxthon 2.0)
其他的
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2)
一般来讲只需要判断浏览器的内核就可以了
像遨游1.X版本腾讯的TT浏览器都是IE6的核心
如果没有特殊需要可以不加区分
下面的例子只按浏览器核心判断是那种浏览器
//获取userAgent
var sUserAgent = window.navigator.userAgent;
//获取红色字体的部分Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
var fAppVersion = parseFloat(window.navigator.appVersion);
//比较版本大小后面的程序会用到,如果不熟悉split和push方法请参照《JavaScript学习笔记1:Array类》
function compareVersions(sVersion1, sVersion2)
{
var aVersion1 = sVersion1.split(".");
var aVersion2 = sVersion2.split(".");

if (aVersion1.length > aVersion2.length)
{
for (var i = 0; i < aVersion1.length - aVersion2.length; i++)
{
aVersion2.push("0");
}
}
else if (aVersion1.length < aVersion2.length)
{
for (var i = 0; i < aVersion2.length - aVersion1.length; i++)
{
aVersion1.push("0");
}
}

for (var i = 0; i < aVersion1.length; i++)
{
if (aVersion1[i] < aVersion2[i])
{
return -1;
}
else if (aVersion1[i] > aVersion2[i])
{
return 1;
}
}
return 0;
}
//判断userAgent字符串里面是否有Opera字段,有则设isOpera为true,下面还会用到
var isOpera = sUserAgent.indexOf("Opera") > -1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
if (isOpera)
{
var fOperaVersion;
//Opear可以伪装成其他的浏览器,这里判断的是没有伪装的
if (window.navigator.appName == "Opera")
{
fOperaVersion = fAppVersion;
}
//这里判断的是伪装后的(某些伪装情况下在userAgent中不会出现Opera字样对这种情况我们无能为力,不过毕竟是极少
//数),关于Opera的伪装请自己查看相关资料
else
{
//这个有点难度了关于正则表达式的
//我们要匹配的部分(红色字体) User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; -?) Opera 7.60
var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
reOperaVersion.test(sUserAgent);
//RegExp["$1"]取出第一次匹配的结果,转换成浮点型
//Opera 7.60 这个是匹配结果,转换成浮点后只剩下数字部分7.60,刚好是我们想要的结果
fOperaVersion = parseFloat(RegExp["$1"]);
}
//目前最新版本为9.20,请自行添加
isMinOpera4 = fOperaVersion >= 4;
isMinOpera5 = fOperaVersion >= 5;
isMinOpera6 = fOperaVersion >= 6;
isMinOpera7 = fOperaVersion >= 7;
isMinOpera7_5 = fOperaVersion >= 7.5;
}
var isKHTML = sUserAgent.indexOf("KHTML") > -1 || sUserAgent.indexOf("Konqueror") > -1 || sUserAgent.indexOf("AppleWebKit") > -1;
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
if (isKHTML)
{
var isSafari = sUserAgent.indexOf("AppleWebkit") > -1;
var isKonq = sUserAgent.indexOf("Konqueror") > -1;
//MacOS X的默认浏览器,基于KHTML,参考前面给出的userAgent
if (isSafari)
{
var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\s*)?)");
reAppleWebKit.test(sUserAgent);
var fApplieWebKitVersion = parseFloat(RegExp["$1"]);

isMinSafari1 = fApplieWebKitVersion >= 85;
isMinSafari1_2 = fApplieWebKitVersion >= 124;
}
//判断是否是Konqueror浏览器,Unix下的浏览器,基于KHTML
else if(isKonq)
{
var reKong = new RegExp("Konqueror\\/(\\s+(?:\\.\\d+(?:\\.\\d)?)?)");
reKong.test(sUserAgent);
isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0;
isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0;
isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0;
isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0;
}
}
//IE
var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1 && !isOpera;
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIe6 = false;
if (isIE)
{
var reIE = new RegExp("MSIE (\\d+\\.\\d+)");
reIE.test(sUserAgent);
var fIEVersion = parseFloat(RegExp["$1"]);

isMinIE4 = fIEVersion >= 4;
isMinIE5 = fIEVersion >= 5;
isMinIE5_5 = fIEVersion >= 5.5;
isMinIE6 = fIEVersion >= 6.0;
}
//Mozilla,火狐数此类
var isMoz = sUserAgent.indexOf("Gecko") > -1 && !isKHTML;
var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;
if (isMoz)
{
//最新的版本号是4个标志位的了,这里应该把正则表达式改成"rv:(\\d+\\.\\d+(?:\\.\\d+(?:\\.\\d+)?)?)"
var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?));
reMoz.test(sUserAgent);
//调用前面比较版本的方法
isMinMoz1 = compareVersions(RegExp["$1"], "1.0") >= 0;
isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") >= 0;
isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") >= 0;
}
//Netscape
var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML && (sUserAgent.indexOf("Mozilla") == 0) && (navigator.appName == "Netscape") && (fAppVersion >= 4.0 && fAppVersion < 5.0);
var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;
if (isNS4)
{
isMinNS4 = true;
isMinNs4_5 = fAppVersion >= 4.5;
isMinNs4_7 = fAppVersion >= 4.7;
isMinNs4_8 = fAppVersion >= 4.8;
}
var isWin = (window.navigator.platform == "Win32") || (window.navigator.platform == "Windows");
var isMac = (window.navigator.platform == "Mac68K") || (window.navigator.platform == "MacPPC") || (window.navigator.platform == "Macintosh");
var isUnix = (window.navigator.platform == "X11") && isWin && isMac;
var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;
var isMac68K = isMacPPC = false;
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;
if (isWin)
{
//Win2003为Windows NT 5.2
//那个vista是Windows NT 6.0
isWin95 = sUserAgent.indexOf("Win95") >= -1 || sUserAgent.indexOf("Windows 95") >= -1;
isWin98 = sUserAgent.indexOf("Win98") >= -1 || sUserAgent.indexOf("Windows 98") >= -1;
isWinME = sUserAgent.indexOf("Win 9x 4.90") >= -1 || sUserAgent.indexOf("Windows ME") >= -1;
isWin2K = sUserAgent.indexOf("Windows NT 5.0") >= -1 || sUserAgent.indexOf("Windows 2000") >= -1;
isWinXP = sUserAgent.indexOf("Windows NT 5.1") >= -1 || sUserAgent.indexOf("Windows XP") >= -1;
isWinNT4 = sUserAgent.indexOf("WinNT") >= -1 || sUserAgent.indexOf("WindowsNT") >= -1 || sUserAgent.indexOf("WinNT4.0") >= -1 || sUserAgent.indexOf("Windows NT 4.0") && (!isWinME && !isWin2K && !isWinXP);
}
if (isMac)
{
isMac68K = sUserAgent.indexOf("Max_68000") > -1 || sUserAgent.indexOf("68K") > -1;
isMacPPC = sUserAgent.indexOf("Mac_PowerPC") > -1 || sUserAgent.indexOf("PPC") > -1;
}
//Unix的系统太多了 这里只对SunOS做了判断
if (isUnix)
{
isSunOS = sUserAgent.indexOf("SunOS") > -1;

if (isSunOS)
{
var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");
reSunOS.test(sUserAgent);

isMinSunOS4 = compareVersions(RegExp["$1"], "4.0") >= 0;
isMinSunOS5 = compareVersions(RegExp["$1"], "5.0") >= 0;
isMinSunOS5_5 = compareVersions(RegExp["$1"], "5.5") >= 0;
}
}

注意:上面的对操作系统和浏览器判断的先后顺序是不能改变的,类似于排除法
现在好多的Ajax框架里都有这个东东可以拿来直接用,
写的有点匆忙,后面很多地方和前面用的方法相同就没有复述
如果你和我一样是新手欢迎和我交流,我的邮箱是zyyn2000【at】21cn.com,最近正在学ASP.NET Ajax相关的技术,也请高手指点
如果你想看自己的userAgent在浏览器上敲这个就可以了^_^ javascript:document.write(navigator.userAgent)
这个东西我还写了一个C#版的,方便一次性识别大量的userAgent^_^
我的作文很少及格写的不好大家见笑了,欢迎批评指正。
国际惯例:如需转载请注明出处,谢谢

 

分享到:
评论

相关推荐

    python爬虫学习笔记.zip

    Python爬虫学习笔记 在IT领域,Python爬虫是一种常用的技术,用于自动化地从互联网上抓取大量数据。Python语言因其简洁的语法和丰富的库支持,成为开发爬虫的首选工具。本篇将深入探讨Python爬虫的相关知识点,帮助...

    CTF Web学习笔记

    ### CTF Web学习笔记知识点详解 #### 杂项部分 **1. 隐写术** 隐写术是一种将信息隐藏于其他非秘密数据之中的技术,这种技术通常用于隐蔽通信或数据保护。在CTF竞赛中,经常出现的情况是将flag隐藏在图像、音频...

    Java学习笔记

    ### Java学习笔记知识点详解 #### 1. 连接数据库步骤 连接数据库是任何应用程序的基础之一,特别是对于那些需要与数据库交互的应用来说更是如此。在Java中,连接数据库的步骤通常包括以下几步: 1. **加载数据库...

    python1903笔记 12-spider.zip

    1. User-Agent:设置不同的User-Agent以模拟不同浏览器访问,避免被网站识别为爬虫。 2. IP代理:通过IP代理池,频繁更换IP地址,降低单个IP的访问频率。 3. 超时重试:设置请求超时和重试机制,处理网络不稳定...

    Python 网络爬虫(Web Crawlers)学习笔记。.zip

    本学习笔记将深入探讨Python爬虫的基本原理、常用库以及实际操作技巧。 1. **爬虫基础知识** - **HTTP/HTTPS**:网络爬虫主要依赖HTTP/HTTPS协议来与服务器进行通信,理解这两种协议的工作机制对于编写爬虫至关...

    Construct2源码-笔记

    - **Crosswalk**:检测用户代理(User-Agent)中的`crosswalk`或`xwalk`关键字,或者通过`window["c2isCrosswalk"]`判断是否为Crosswalk环境。 - **Cordova/PhoneGap**:检查`window["device"]`是否存在且含有`...

    xiaohongshuSpider_python爬虫_python小红书_python

    2. Selenium库:学习启动浏览器、执行JavaScript、模拟用户交互。 3. BeautifulSoup库:掌握HTML解析和数据提取。 4. 网络爬虫原理:HTTP请求与响应,处理网页动态加载。 5. 反爬策略:设置User-Agent、处理Cookies...

    爬虫基础教程笔记.rar

    【爬虫基础教程笔记】 爬虫,全称网络爬虫,是自动化地抓取互联网信息的一种程序或脚本。在Python编程语言中,爬虫技术因其简洁高效的语法特性而...通过学习和实践,新手可以迅速掌握爬虫技能,踏上信息获取的旅程。

    python3网络爬虫笔记与实战源码。记录python爬虫学习全程笔记、参考资料和常见错误,约40个爬取实例与思路解.zip

    这份"python3网络爬虫笔记与实战源码"资源包含了一个全面的学习路径,旨在帮助初学者和进阶者深入理解和掌握Python爬虫技术。 笔记部分可能涵盖了以下知识点: 1. **基础概念**:介绍网络爬虫的基本原理,如...

    isBot: 一个简单的JS库,用于检测机器人

    2. **用户代理检测**:IsBot可能通过分析用户的User Agent字符串来识别机器人,User Agent是浏览器向服务器发送的一种标识,表明了访问者所使用的浏览器类型和版本。 3. **事件监听**:JavaScript可以监听用户的...

    自学Python爬虫路上的实战笔记,由浅到深逐步深入学习Python 爬虫.zip

    对于JavaScript渲染的页面,可能还需要学习Selenium库来模拟浏览器行为。 4. **正则表达式**:用于在文本中查找和提取特定模式,是数据提取的强大工具。学习基本的正则表达式语法,并熟练使用Python的re模块。 5. ...

    python068反爬虫技术的研究.zip

    反爬虫技术首先会检查请求头中的User-Agent字段,因为正常浏览器访问时,这个字段会携带特定信息。Python中,我们可以使用requests库设置自定义User-Agent,模拟不同浏览器或设备,避免被识别为爬虫。 二、IP代理与...

    个人python爬虫的学习和实践记录.zip

    8. **反爬机制与应对策略**:学习如何识别和处理网站的反爬机制,如验证码、IP限制、User-Agent检测等。可以使用代理IP、动态IP更换、设置延时等方法。 9. **爬虫框架**:更高级的爬虫开发可以使用Scrapy框架,它...

    Python爬虫入门教程:超级简单的Python爬虫教程.zip

    Python爬虫技术是数据获取和网络自动化的重要工具,尤其在信息时代,大量有价值的数据散落在互联网各个角落。这篇“Python爬虫入门教程:超级简单的Python爬虫教程”将引导初学者一步步进入爬虫的世界。 首先,我们...

    scrapy学习笔记

    本学习笔记旨在深入解析Scrapy的各个方面,帮助你从零开始掌握这一强大的技术。 首先,我们要理解Scrapy的基本结构。Scrapy由多个组件构成,包括Spiders、Item、Item Pipeline、Request/Response、Selectors和...

    Python爬虫全套学习流程+源码+笔记,初学者可以参考学习.zip

    初学者想要入门Python爬虫,本资源提供了一套完整的学习流程,包括源码示例和学习笔记,非常实用。下面将详细介绍Python爬虫的学习路径、核心概念以及可能涉及的关键技术。 1. **Python基础**:学习Python爬虫首先...

    课程大作业:Python爬虫.zip

    在这个"Python学习笔记"中,你将逐步学习和实践这些技能,从创建简单的爬虫项目到解决复杂的问题。通过大作业的实战,你的Python爬虫能力将会得到显著提升。记住,理论与实践相结合是学习的最佳方式,所以动手编写...

    网易云课堂的python网络爬虫实战笔记与代码实现

    本资源"网易云课堂的python网络爬虫实战笔记与代码实现"聚焦于通过Python实现对新浪网站的爬取,旨在帮助学习者掌握网络爬虫的基本原理和实际操作技巧。 首先,你需要了解Python网络爬虫的基础知识,这包括...

Global site tag (gtag.js) - Google Analytics