浏览器插件形式改变指纹
指纹浏览器系列教程目录:
一、指纹浏览器的原理与应用
二、浏览器指纹的检测与对抗的办法
三、更多的检测手段与指纹浏览器选购方案
四、命令行形式浏览器多开解决方案
五、浏览器插件形式改变指纹
六、node.js库Puppeteer改变浏览器指纹信息
七、python改变浏览器指纹信息
八、java、go、c#、php、rust更改浏览器指纹信息
九、编写自己的指纹浏览器以及指纹信息来源
十、闲话聊一聊指纹浏览器的用途
python改变浏览器指纹
python加载chromium类内核的浏览器有两种形式,一种是通过CDP(Chrome DevTools Protocol)直接操作浏览器,一种是通过selenium来加载。
pyppeteer
当时因为puppeteer谷歌官方是node.js写的,那么为什么就不能用python模仿它写一个呢。
于是pyppeteer诞生了,它刚开始出现的确惊艳了很多人,但谷歌随即玩起了老戏法,频繁的更新代码,一年更新了3个大版本(30多个小版本)从1.0瞬间到了4.0,写本文的时候我看了下居然已经到了13.0这个大版本了,我直呼好家伙。。。
而pyppeteer这种个人项目根本跟不上,还停留在1.x版本,加上作者没时间,并且很久不露面,导致push的代码都没法合并。直到后来有人再开了一个fork的库,组织人继续写,这个库才勉强活了下来。
新地址:https://github.com/pyppeteer/pyppeteer 。这次是有在继续更新,但当年使用它的时候,bug简直不要太多,现在它发展的还是可以的。
pyppeteer如何使用我就不详细写了,只讲解如何伪装浏览器的指纹信息。
这里有个非常牛逼的库那就是https://github.com/MeiK2333/pyppeteer_stealth
它是从puppeteer的插件库puppeteer-extra-plugin-stealth改写成python版本的,但是它更厉害的一点是,原版的指纹信息是固定的,而python这个版本的是支持你自己定义具体指纹信息的。
那么配合系列教程里的《编写自己的指纹浏览器以及指纹信息来源》,传入弄到的指纹信息,可以轻松的解决浏览器指纹问题。
下面说下具体使用:
安装pip install pyppeteer_stealth
运行代码:
import asyncio
from pyppeteer import launch
from pyppeteer_stealth import stealth
async def main():
browser = await launch(headless=True)
page = await browser.newPage()
await stealth(
page: page,
run_on_insecure_origins: bool = False,
languages: [str] = ["en-US", "en"],
vendor: str = "Google Inc."
user_agent: str = None,
locale: str = "en-US,en",
mask_linux: bool = True,
webgl_vendor: str = "Intel Inc.",
renderer: str = "Intel Iris OpenGL Engine",
disabled_evasions: list = [],
)
await page.goto("https://bot.sannysoft.com/")
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
如此再次打开检测网站,就会发现通过python打开的浏览器的指纹就是你自己设定的参数里面的值,非常好用。
ichrome
地址:https://github.com/ClericPy/ichrome
这个库是当pyppeteer没人更新的时候发现的,也是直接操作CDP的方式。
这个作者真的很执着,从我了解开始,每月都在更新,真的很难得,而且它设置的易用性也很不错,如果你不想用上面两款,那么它也是值得你去尝试的。
selenium改变浏览器指纹
自从谷歌官方给浏览器增加了headless模式,一下子就把phantomjs(一款无界面浏览器,占用资源小)的命给格了。后又弄了官方的puppeteer又要把selenium的命给格了。
为什么会这样呢?
是因为puppeteer的资源占用比selenium小,并且不需要下载driver就可以直接控制浏览器,并且可以预加载js代码。
selenium曾经有个致命的问题,无法通过预加载反指纹js代码来实现隐藏自己的浏览器指纹信息。
它必须是你先打开浏览器,打开你要访问的网页,之后才能插入js,最后刷新一下,这样js才生效。
但是selenium4已经解决了这个问题,现在也可以直接使用CDP的命令了,大大提升了可用度,并且我认为selenium的易用性以及稳定性都是非常不错的,并不是很多人说的一无是处。
后面这两个库如何隐藏浏览器指纹我就不写具体代码了,因为都比较麻烦,上面的pyppeteer已经足够好用了。如果实在是想要使用后面的这两个库来调用浏览器,那么可以把https://github.com/MeiK2333/pyppeteer_stealth/tree/master/pyppeteer_stealth/js 文件夹里的所有js文件合并到一起,然后通过这两个库预加载合并后的js即可。
本文由三分醉博客原创,转载请注明:https://www.sanfenzui.com/python-changes-browser-fingerprint.html
文章同步更新在知乎:三分醉 - 知乎
文章评论
tiocmp
hpc903
2u00jq
0arhjo
exo1mk
8wmd39