- my_fake_useragent 和 fake_useragent實質基本一致,可以調用里面的方法User Agent
class UserAgent():
parsed_json_data = load_parsed_json_data()
def __init__(self,
family=None,
os_family=None,
phone=None,
version_range=None,
):
"""
:param mode: default mode
:param family: 不設置則不管 指定瀏覽器類型
:param os_family: 不設置則不管 指定操作系統
:param phone: 指定是否是手機端 True 是 False 不是 不設置默認None則不管
:param version_range: 不設置則不管 指定瀏覽器版本范圍
手機檢測 根據設備family參數之外 操作系統檢測到 android 或 ios 也認為是移動端
"""
if isinstance(family, str):
family = family.lower()
self.family = [family]
elif isinstance(family, (list, tuple)):
self.family = [f.lower() for f in family]
elif family is None:
self.family = None
else:
raise ValueError('family')
if isinstance(os_family, str):
os_family = os_family.lower()
self.os_family = [os_family]
elif isinstance(os_family, (list, tuple)):
self.os_family = [f.lower() for f in os_family]
elif os_family is None:
self.os_family = None
else:
raise ValueError('os_family')
self.phone = phone
if self.phone not in [None, True, False]:
raise ValueError('phone')
self.version_range = version_range
self.filter_func = build_stream_function(filter_family,
filter_os_family, filter_phone,
filter_version_range)
def random(self):
user_agent_list = self.get_useragent_list()
if user_agent_list:
return random.choice(user_agent_list)
else:
raise Exception('empty result')
def get_useragent_list(self):
origin_data = []
for key in self.parsed_json_data:
origin_data += self.parsed_json_data[key]
d = {
'data': origin_data,
'family': self.family,
'version_range': self.version_range,
'os_family': self.os_family,
'phone': self.phone
}
d = self.filter_func(d)
ua_string_list = [i['string'] for i in d['data']]
return ua_string_list
def test_possible_family(self):
t1 = set()
for k, v in self.parsed_json_data.items():
for i in v:
t1.add(i['user_agent']['family'])
return t1
def test_possible_os_family(self):
t1 = set()
for k, v in self.parsed_json_data.items():
for i in v:
t1.add(i['os']['family'])
return t1
def test_possible_device_family(self):
t1 = set()
for k, v in self.parsed_json_data.items():
for i in v:
t1.add(i['device']['family'])
return t1

一些網站常常通過判斷 UA 來給不同的操作系統、不同的瀏覽器發送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測。
瀏覽器的 UA 字串
標准格式為: 瀏覽器標識 (操作系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本信息
瀏覽器標識
由於很多網站在進行 UA 檢測的時候忽略了兩位數版本號,所以可能造成 瀏覽器及之后版本收到糟糕的頁面,因此自 瀏覽器 10 之后的版本中瀏覽器標識項固定為 瀏覽器,在 UA 字串尾部添加真實版本信息。
操作系統標識 FreeBSD X11; FreeBSD (version no.) i386 X11; FreeBSD (version no.) AMD64 Linux X11; Linux ppc X11; Linux ppc64 X11; Linux i686 X11; Linux x86_64 Mac Macintosh; PPC Mac OS X Macintosh; Intel Mac OS X Solaris X11; SunOS i86pc X11; SunOS sun4u Windows: Windows NT 10.0 對應操作系統windows 10 windows NT 6.2 對應操作系統 windows 8 Windows NT 6.1 對應操作系統 windows 7 Windows NT 6.0 對應操作系統 windows vista Windows NT 5.2 對應操作系統 windows 2003 Windows NT 5.1 對應操作系統 windows xp Windows NT 5.0 對應操作系統 windows 2000 Windows ME Windows 98 加密等級標識 N: 表示無安全加密 I: 表示弱安全加密 U: 表示強安全加密 瀏覽器語言 在首選項 > 常規 > 語言中指定的語言 渲染引擎 瀏覽器 使用 Presto 渲染引擎,格式為: Presto/版本號 版本信息 顯示 瀏覽器 真實版本信息,格式為: Version/版本號