被爬网站用fingerprintjs来对selenium进行反爬,怎么破?

2024-07-31 14:26:37 浏览数 (2)

闲暇逛乎的时候,看到了这个问题:

Fingerprintjs实际上就是专门用来识别和追踪浏览器的,要应对起来,确实并非易事。那么,我们要如何应对FingerprintJS的唯一标记技术呢?

接下来,我们将一起来探讨探讨。

FingerprintJS技术概述

首先,我们来了一下,FingerprintJS技术是什么?

FingerprintJS是一种浏览器指纹识别技术,通过收集用户浏览器的各种特征数据,如Canvas指纹、音频指纹、字体指纹、插件指纹等,进而生成一个唯一的标识符,用以识别和追踪用户。在现代互联网应用中,这种识别技术被广泛运用于防止网络攻击、改善用户体验等场景。

主要特征收集方式
  • Canvas Fingerprinting:通过让浏览器绘制特定的图形,然后提取图形的像素数据。每个浏览器由于软硬件环境的差异所绘制的图形略有不同,这些差异可用于生成唯一指纹。
  • Audio Fingerprinting:利用音频处理技术,生成一个短暂的音频信号,并通过提取该信号的特征数据来生成唯一标识。
  • Browser Plugins and Fonts:浏览器安装的插件和系统可用的字体组合情况,以及一些高级属性(如User-Agent),可以为指纹生成提供丰富的信息。

常见的应对策略与其不足

就如提问者自己说的,使用了很多方法教程,包括日常大家提到的解决方案,都没办法有效。

我们要承认,现有的部分应对策略如使用stealth.min.js和浏览器扩展虚拟指纹插件,可以在一定程度上对抗FingerprintJS,但它们都有各自的局限性,例如:

  • stealth.min.js:该脚本集合了多种技术,可以隐藏部分指纹特征,比如移除自动化检测标志。但由于FingerprintJS技术不断更新,此方法无法全面覆盖所有指纹检测手段。但是它可能无法处理新型的Canvas指纹或音频指纹技术。
  • 虚拟指纹插件:部分浏览器扩展插件可以生成虚拟指纹,让浏览器看似是其他设备。然而,由于浏览器更新、插件失效等原因,这种方法的维持成本高且不可靠。

那,难道就没有解决办法了吗?老话说得好,办法总比困难多。

高级解决方案

我们可以试试采用多层次的技术解决方案。

浏览器特征随机化

通过动态随机化浏览器的特征数据,使得每次访问的指纹信息都不同。这种方法需要对特征数据进行细致处理,以增加对抗FingerprintJS的成功率。

  1. Canvas指纹随机化:利用JavaScript在Canvas绘制过程中对生成数据进行局部微调,使得每次生成的Canvas图形略有不同,从而改变指纹。
  2. 音频指纹随机化:通过对音频处理添加少量噪声或其他变化,使其生成特征值时每次略有不同。
  3. 插件和字体的动态替换:在Puppeteer等工具中动态加载和卸载不同的插件和字体,让浏览器的插件和字体组合情况随机化。
使用真实用户流量模拟

结合真实用户行为数据,通过自动化浏览器模拟真实用户的操作,减少会被FingerprintJS检测到的一致性特征。

  • 鼠标移动与点击行为:模仿不规则的鼠标移动和点击行为,使得这一部分特征更接近真实用户操作。可以使用工具生成这些复杂的鼠标轨迹。
  • 键盘输入节奏:模拟常见的打字节奏,包括按键间的时间间隔、不规则输入行为,以避免在尤为敏感的表单填写过程中被检测。

这部分,简单来说就是:你如果作为一个普通人,正常怎么浏览这个网站,你就代入进去,也同样操作。

服务端应对策略

在代理服务器端,使用高质量代理IP服务,结合随机化的浏览器特征,难以通过IP或指纹一致性进行拦截。

  • IP地址轮换:使用稳定且分布广泛的高质量代理IP,通过频繁切换IP地址来减少因IP地址一致性带来的风控问题。这边我会建议采用青果网络提供的代理IP服务,他们家的代理IP节点分布广,遍布全球,日更新纯净IP的流水在600万左右,可用率高,带宽也够我们日常使用。
  • 会话管理:在多个会话间保持相对独立的特征组合,并合理分配每个会话的请求量,降低被识别的概率。
  • 切换频率设置:设置合理的IP切换频率,以达到既避免频繁变动,又能对抗FingerprintJS的方法。

结论

总的来说,FingerprintJS技术通过多参数、多维度的综合分析,为网站防护提供了强大的工具。要绕过这种技术,需要灵活应用浏览器特征随机化、真实用户流量模拟,以及服务端的分布式代理策略并结合代理服务提供商的专业支持。

0 人点赞