爬虫自动化之定制浏览器随机指纹

2025-04-15 2 0

1.为什么自动化爬取数据?自动化爬取有什么困境?

Tips:为什么要用自动化来爬取数据?直接走协议不香吗?

网络爬虫要获取数据,最好最快的方法,自然是使用协议来进行模拟登录,获取数据等行为。但是现如今的网页端反爬虫措施越来越完善,爬虫和反爬虫的对抗已经进入了白热化,甚至可以说一天不学习就会落后很多。

相比于协议的反爬虫力度来说,自动化的压力要小很多,自动化来爬取数据速度只是比人手动快一些,比协议要慢的多。这也说明自动化爬虫对网站的伤害比较小。如果网络爬虫的要求仅仅是完成一些重复性工作,或者说只是爬取到数据就好,爬慢一点也无妨,使用自动化确实是一个好的方案(虽然爬虫界各大佬对自动化的鄙视是表露在外的)。

Python爬虫在进行自动化的时候,最常用的是selenium,因为不少网站会检测selenium的一些特征。更进一步,如果不使用selenium,而使用其他的自动化工具,也可以检测webdriver之类的自动化特征,或者干脆就看看你的JS操作的isTrust,如果是手动出发的就是True,JS触发的就是False。

此外,还有浏览器的指纹检测,将一台机器上相对稳定不变的参数作为指纹搜集,比如canvas,webgl,webAudio,SSL/TLS指纹等等,举一个浏览器指纹检测的例子https://gongjux.com/fingerprint/。

面对自动化反爬,许多人的处理方案就是使用油猴脚本,通过Hook来对一些参数获取进行劫持替换,我们接下来采取一种更底层的方式,直接取修改chromium浏览器的C++层代码

当编译好一个自己修改过的chromium浏览器,并随机了指纹,可以采用两种方案进行数据爬取:

  1. 使用playwright进行浏览器驱动和自动化。

  2. 使用Windows的API进行浏览器的自动化,借助Fiddler之类的工具转发数据到本地服务。

但今天讲的文章里,我们主要探究如何自己定制修改chromium浏览器。

2.chromium浏览器的源码该如何编译?

Tips:由于chromium的源码在不停地更新换代,所以如果按照网上的经验贴通常是无法编译成功的,所以最好的方式就是通过谷歌的官方文档进行编译。

官方文档地址:chromium编译官方文档 。

记住,你现在可以编译,不代表你以后也可以用这套环境编译最新的源码。别人可以编译,不代表你也能够编译。 一切以官方文档为标准 。

编译chromium源码的系统要求:

  • 64位的电脑,而且至少有8G的内存,16G以上更好,多多益善。

  • 只编译chrome,需要至少100G的NTFS格式的磁盘存储空间,如果要整体编译,需要至少200G以上的存储空间。

  • 比较新的版本的visual studio,至少vs2017以及之后的版本。

  • Windows 10或者更新的操作系统。

满足以上条件就可以愉快地开始编译了。

(1)visual studio的配置

Chromium 需要Visual Studio 2017 (>=15.7.2) 才能构建,但最好使用Visual Studio 2019 (>=16.0.0)。本次编译示范使用的是vs2019的社区版。
爬虫自动化之定制浏览器随机指纹插图
这里必须要勾选<span class="ne-text">使用C++的桌面开发</span>其中的<span class="ne-text">MFC/ATL</span>组件。

此外,需要额外安装SDK10.0.20348.0。下载链接在这里:SDK下载地址

安装SDK的时候,Debugging Tools是必须的,保险起见,还是全部勾选吧:
爬虫自动化之定制浏览器随机指纹插图1

(2)安装depot_tools

下载depot_tools压缩包并解压,并将其配置到环境变量的开头,由于其中会涉及到Python环境变量,所以务必将它移动到最开始,以防Python环境变量配置错误。

配置环境变量的方式:控制面板→系统和安全→系统→高级系统设置:
爬虫自动化之定制浏览器随机指纹插图2
配置成功后,到对应的depot_tools的目录之下,使用管理员方式打开CMD,运行命令**<span class="ne-text">gclient</span>,这一步可能需要科学上网,务必保证你可以科学上网。

(3)环境变量

接下来,需要在环境变量中新增以下键值对,其中的GYP_MSVS_OVERRIDE_PATH和vs2019_install填写你自己的vs路径,GYP_MSVS_VERSION是对应的vs版本,WINDOWSSDKDIR是你的SDK安装的路径。

http_proxy和https_proxy是你的科学上网相关的代理。

(4)chromium源码拉取和编译

配置了这么多,终于到了源码拉取的部分,但是这也是最耗费时间的部分。

mkdir chromium && cd chromium # 任意创建一个目录接收源码 fetch chromium --no-history # 拉取最新源码,不带--no-history则拉取完整源码 gclient sync --no-history # 因为网络缘故断开,使用这一句重新同步源码 

源码拉取完毕之后,当前目录下会多出一个src目录,源码就位于其中。

cd src #进入目录 gn gen --ide=vs out\Default #在out\Default目录下生成工程文件 autoninja -C out\build mini_installer #编译源码,编译后生成chrome.exe和一个chrome.7z压缩文件 #如果不带mini_installer将会进行整体编译,将近10w个文件,非常耗时 

编译完成后,进入out\Default目录下:
爬虫自动化之定制浏览器随机指纹插图3
到此为止,chromium最新版源码编译成功。

3.如何抹除自动化特征

Tips:对于小白来说,修改chromium底层源码最简单的方式就是善用搜索。**

总体来说,要定位修改的源码,一共分三步走。

  1. 知晓自己要修改的东西是什么。

  2. 定位源码中需要修改的地方。

  3. 修改源代码并回编译(回编译速度会很快,因为是增量的,不是重头开始编译)。

如果要绕过一般的自动化检测网站,最迫切的就是要抹除webdriver这一特征检测,因为检测一般都是检测window.navigator.webdriver 属性,明白了要抹除的是webdriver,第一步就已经完成了。
第二步,定位要修改的源码。如果是使用vs2019打开chromium项目,将会被数以万计的解决方案所淹没。面对这一庞大的工程,小白肯定是目瞪口呆的。因为我们采取在线浏览定位的方式。

chromium在线源码浏览:源码浏览。在这个网站上可以轻松快捷地查看最新版的chromium的源代码,而且有强大的搜索跳转功能,已经能够满足我们修改chromium源码的需求了,因为我们仅仅是要抹除一些特征用于自动化,而非进行浏览器的二次开发。
爬虫自动化之定制浏览器随机指纹插图4
接着,进入chromium/src当中,切换到third_party/blink目录之下,搜索<span class="ne-text">Navigator::webdriver</span>,之所以在blink目录之下,是因为chromium使用的是blink内核,在blink之下可以缩小范围,减少搜索量。
爬虫自动化之定制浏览器随机指纹插图5
许多人可能想问,我为什么知道是搜**<span class="ne-text">Navigator::webdriver</span>?事实上,我也不知道要搜的是这个,我是先搜索了<span class="ne-text">webdriver</span>,之后又把navigator相关的文件查看完毕,才知道是这个,这里只是为了让各位更快定位。

chromium中的原始代码如下所示:

bool Navigator::webdriver() const { if (RuntimeEnabledFeatures::AutomationControlledEnabled()) return true; bool automation_enabled = false; probe::ApplyAutomationOverride(GetExecutionContext(), automation_enabled); return automation_enabled; } 

我们稍作修改,可以让它永远返回false,或者按照你的需求让它返回其他东西。

bool Navigator::webdriver() const { return false; } 

修改完毕之后,我们返回src目录之下,在cmd中输入<span class="ne-text">autoninja -C out\build mini_installer</span>这次的更新会非常迅速,回编译成功之后,我们就可以看到webdriver已经被修改了。

如果要修改<span class="ne-text">isTrust</span>也是同理的,直接搜索修改就好了:

bool isTrusted() const { return is_trusted_; } 

4.如何随机浏览器指纹

Tips:随机指纹使用的是一样的方法。**

随机指纹使用的方法和上边一般无二。

但是有一个很重要的点需要各位看官明白,浏览器指纹并非是有一个固定的参数或者方法,修改之后就可以过一切网站的指纹检测,不是这样的。

永远要根据你要攻克的网站来动态地确定,不排除大多数网站采取一样的指纹检测策略,比如知名的FP指纹检测:**fingerprint

说白了,和JS逆向一样,你要随机哪个网站的指纹,先要查看一下该网站的JS代码,看看它计算指纹的时候使用的是哪个方法。

5.浏览器固定指纹

Tips:上边讲的方法是定位,或者说可以做到随机,但是遇到了新的需求.....**

在随机浏览器指纹的过程中,慢慢遇到了一种新的需求,那就是固定指纹。也就是我事先本地写好一套指纹,然后浏览器开启后就用我这一套指纹,什么时候我想更改了,再替换本地文件就可以了。

这种需求常用于跨境电商,指纹不能纯随机,而且如果每次都写死,每次再回编译,再运行,这样也太麻烦了,浪费了许多时间,那么这种需求怎么解决呢?

非常简单,通过命令行传参的形式来实现,命令行指定使用我们的文件,然后在chromium源码中进行读取即可。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

【内网渗透基础(一)】信息收集
微软警告:Windows Server 2025 重启可能导致部分域控制器连接中断
打靶日记——pWnOS1
常用组件hutool的潜在Gadget分析
谷歌Chrome 136将修复存在20年的已访问链接隐私漏洞
2025年CISO应对勒索软件威胁指南

发布评论