什么是浏览器标识?
浏览器标识
层面一:网络层指纹 (HTTP/TLS)
这是最基础的指纹,即使不用浏览器,只用Go的 net/http
发请求也会留下。
-
HTTP Headers (请求头):
- User-Agent: 最著名的标识,声明自己是什么浏览器。很容易伪造,但也很容易被识破(比如你的其他头信息和这个UA对不上)。
- Accept-*:
Accept
,Accept-Language
,Accept-Encoding
等。不同浏览器、不同版本的默认值和顺序都可能不同。 - Sec-Ch-Ua (Client Hints): 这是非常、非常关键的新一代标识。它详细描述了浏览器品牌、版本、平台等信息,比如
Sec-Ch-Ua: "Not/A)Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"
。如果你只伪造了User-Agent
而没有这个头,几乎立刻就会被识破。
-
TLS/SSL 指纹 (JA3/JA3S):
- 当你和网站建立HTTPS连接时,你的客户端(浏览器或Go程序)会告诉服务器它支持哪些加密算法、扩展等。这些信息的组合会形成一个独特的哈希值,即JA3指纹。
- Go程序的默认JA3指纹和Chrome浏览器的完全不同。这是高级反爬虫系统识别非浏览器请求的“杀手锏”
层面二:浏览器环境指纹 (JavaScript)
这是最致命的指纹,只有在能够执行JavaScript的真实浏览器环境中才能获取。网站会运行一段JS代码来采集这些信息。
-
navigator.webdriver:
- 这是最常见、最简单的检测方法! 当浏览器被自动化工具(如Selenium、Puppeteer、chromedp)控制时,这个JS变量的值会是
true
。普通用户访问时,这个值是false
或undefined
。网站只要检查if (navigator.webdriver)
就能抓到大部分初级爬虫。
- 这是最常见、最简单的检测方法! 当浏览器被自动化工具(如Selenium、Puppeteer、chromedp)控制时,这个JS变量的值会是
-
Canvas 指纹:
- 网站会命令你的浏览器在后台画一幅看不见的图像,然后读取这幅图像的像素数据并生成一个哈希值。由于操作系统、显卡、字体渲染等细微差别,不同电脑生成的哈希值几乎都是独一无二的。这是一个非常强大的、用于识别独立用户的指纹。
-
WebGL 指纹:
- 与Canvas类似,但利用3D图形API (WebGL) 来获取更详细的显卡、驱动等信息,指纹更精确。
-
字体指纹 (Fonts):
- 通过JS检测你的电脑上安装了哪些字体。不同用户安装的字体列表不同,可以作为标识之一。
-
浏览器特性检测:
- 检查是否存在特定的浏览器API、
navigator
对象的属性 (platform
,vendor
,plugins.length
)、屏幕分辨率 (screen.width
,screen.height
)、时区等。
- 检查是否存在特定的浏览器API、
层面三:行为指纹
- 鼠标轨迹: 真人用户移动鼠标是有特定轨迹和速度的,而自动化程序通常是瞬移。
- 点击位置: 真人点击按钮时,位置通常在按钮中心附近,而程序可以精确点击
(0,0)
像素点。 - 交互时间: 自动化程序在页面间的跳转、输入速度都快得不正常。
无头浏览器
没有图形用户界面、在后台运行的完整浏览器,可以用编程代码控制
可以访问网址、加载网页、执行JavaScript、点击按钮、填写表单,甚至可以“看到”网页渲染后的样子。
没有用户界面 (UI),看不到窗口。它在后台默默运行,像一个看不见的幽灵。