点击上方蓝色小字,关注“涛哥聊Python

重磅干货,第一时间送达

来源:未闻Code

之前我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。

今天我们就来说说应该如何正确解决这个问题

我们首先给出解决方案,然后再说明这个解决方案,我是通过什么方式找到的

解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js,稍后我会说明如何生成这个文件

我们需要设定,让 Selenium 或者 Pyppeteer 在打开任何页面之前,先运行这个 Js 文件

这里,我以 Selenium 为例来说明如何操作,我们编写如下代码:

import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Optionschrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')driver = Chrome('./chromedriver', options=chrome_options)with open('/Users/kingname/test_pyppeteer/stealth.min.js') as f:js = f.read()driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})
driver.get('https://bot.sannysoft.com/')
time.sleep(5)
driver.save_screenshot('walkaround.png')# 你可以保存源代码为 html 再双击打开,查看完整结果
source = driver.page_source
with open('result.html', 'w') as f:f.write(source)

运行截图如下:

可以看到,虽然我使用的是无头模式,但是能够被识别的特征都被成功隐藏。大家还可以双击打开保存下来的 html 文件,看看是不是结果跟普通浏览器几乎一样。

如果你使用的是 Pyppeteer,那么可以根据我上面文章中给出的方法,试着加载一下这个 js 文件,看看是不是也能成功隐藏特征。

那么,这个stealth.min.js文件是怎么来的呢?这就要说到puppeteer了。我们知道,Python 版本的pyppeteer已经很久没有人维护了,但是Node.js 版本的 puppeteer持续有人维护,并且在持续更新,生态也越来越好。

有开发者给 puppeteer 写了一套插件,叫做puppeteer-extra。其中,就有一个插件叫做puppeteer-extra-plugin-stealth[1]。这个东西,就来专门用来让 puppeteer 隐藏模拟浏览器的指纹特征。

这个东西是专门给 puppeteer 用的。所以,如果你使用的是 puppeteer,那么你可以根据它的 Readme说明,直接使用。

那么,我们用 Python 的人怎么办呢?实际上也有办法。就是把其中的隐藏特征的脚本提取出来,做成一个单独的 js 文件。然后让 Selenium 或者 Pyppeteer 在打开任意网页之前,先运行一下这个 js 文件里面的内容。

puppeteer-extra-plugin-stealth的作者还写了另外一个工具,叫做extract-stealth-evasions[2]。这个东西就是用来生成stealth.min.js文件的。

如果你在国外,并且网速足够快的话。那么你根据它的 Readme,首先安装 Node.js,然后安装 Npm,接着运行如下命令:

npx extract-stealth-evasions

就会在你执行命令的文件夹下面生成一个stealth.min.js文件。然后你就可以正常使用了。

如果你在国内,那么执行这个命令的过程中,会有一个下载 Chromium 的过程,速度非常慢,虽然只有130MB,但是可能会下载好几个小时。

此时,你需要把它的package.jsonindex.js两个文件保存到本地。然后打开package.json文件,修改其中的dependencies这一项,把里面的puppeteer改成puppeteer-core,如下图所示:

然后修改index.js,给.launch()函数增加一个参数executablePath,指向你电脑上的 Chrome 浏览器,如下图所示:

修改完成以后。首先执行yarn install安装依赖包。然后执行node index.js运行程序。1秒钟以后就会生成stealth.min.js了。

我已经将这个文件上传到公众号后台,回复关键字 stealth 即可获取!

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

往期链接:

介绍一款能取代 Scrapy 的爬虫框架 - feapder

Python最佳代码实践:性能、内存和可用性!

不愧是阿里!阿里开源的 Python 自动化工具,太好用了

·················END·················

你好,我是Sitin涛哥,非著名程序员,项目经理,现在创业中。

在公众号和视频号「涛哥聊Python」分享我的升级打怪经验!

很开心能够遇到你,欢迎添加我的微信 pengtaoshow ,备注来意,一起进步。

圈子即是价值,见识即财富

感兴趣的小伙伴快来加入我们吧!

Selenium 最强反反爬方案来了!相关推荐

  1. selenium:反反爬拖动验证码

    前言 springboot 2.0.0.RELEASE selenium-java 3.9.1 chromedriver win32 2.33 chrome 62.0.3202.94 你已经可以编写s ...

  2. 针对淘宝反selenium的反反爬措施详讲1-----pyautogui

    现在某猫和某宝在反反selenium的道路上越越来恶毒了,大部分是检测webdriver的关键符(网上有很多介绍这里就不一一介绍了)当我们遇到反selenium那该怎么办??????????????? ...

  3. 已解决selenium框架接管已经打开的谷歌浏览器(Python反反爬教程,亲测有效)

    已解决selenium框架接管已经打开的谷歌浏览器(Python反反爬教程,亲测有效) 文章目录 问题描述 解决方法 千人全栈VIP答疑群联系博主帮忙解决报错 问题描述 使用selenium自动化测试 ...

  4. Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”

    有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站植入各种反爬机制 ...

  5. 携程反爬中的Eleven参数-反爬与反反爬的奇技淫巧

    http://www.shenjianshou.cn/blog/?p=302 今天我们要聊点什么呢,之前说要聊去哪儿的,不过暂且咱们再放一放,先聊一聊去哪儿的干爹携程吧,上次我记得看了携程工程师霸气回 ...

  6. Python 从零开始爬虫(一)——爬虫伪装反“反爬”

      之前提到过,有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站 ...

  7. python爬图片_网络爬虫经验:反爬和反反爬

    我想很多人入门python是图片爬虫,就是HTTP请求,保存一下图片,用python实现非常快.网上很多爬虫的教程就讲到这里,实际上很单一,看了跟没看没什么区别,都是找一下网页的规律,然后Beauti ...

  8. python爬虫反爬 css 知乎 专栏_反反爬虫系列(四)

    过完年,好了,咱们接着更新反反爬虫系列 至于之前有朋友表示出一下1688呀,x宝的反反爬虫 说实在的,阿里系的反爬虫很厉害,我自愧不能搞定. 比如x宝的登录,用了selenium + chrome的朋 ...

  9. 针对大众点评网上商铺评论字体替换反爬的反反爬

    针对大众点评网上商铺评论字体替换反爬的反反爬 字体替换的反爬,在之前网站出现过,如淘宝.猫眼等.但是主要针对于数字字体替换,由于数字就十个,完全可以手动分析字体文件,找出编码与数字的关系.但是,大众点 ...

  10. day 15爬虫与反爬虫与反反爬

    爬虫与反爬虫与反反爬 爬虫的流程: ​ 1.请求网页,获取响应结果 ​ 2.解析网页,提取数据 ​ 3.数据持久化(写入存放位置) 反爬与反反爬 1.User-Agent:将爬虫伪装成浏览器.例如:豆 ...

最新文章

  1. C++ 学习之旅(10)——static与extern
  2. WPF应用程序内存泄漏的一些原因
  3. Gym 101128A :Promotions (Southwestern Europe Regional Contest )
  4. Node.js_1.1
  5. 围棋ai最新型katago_围棋AI之katago CPU版
  6. 腾讯广告算法大赛 | 萌新粉丝投稿讲述数据竞赛小白观赛心得
  7. 【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
  8. 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
  9. vector中resize()和reserve()区别
  10. PHP GZ压缩与解压
  11. linux可执行文件的后缀是什么?
  12. 转:关于启用 HTTPS 的一些经验分享(二)
  13. iOS开发打字机效果
  14. 计算机考研360能去哪里,计算机专业考研,有什么好的211院校推荐?
  15. 循环-求一个数各位数字的和
  16. 2021湖南涟源高考成绩查询,2021娄底市地区高考成绩排名查询,娄底市高考各高中成绩喜报榜单...
  17. 【数据库专题】DML终极奥义——《狗叫江湖》“第五幕”
  18. 图像处理之opencv保存视频图片
  19. 【反欺诈】浅析新形势下反保险欺诈举措
  20. android蟒蛇音效,ViPER4Android(蟒蛇音效)

热门文章

  1. 用 VSCode 写 Python,这 14 个插件不容错过!
  2. Android清空画布
  3. 一天一天的充实。。。
  4. 树莓派平台的旋转编码开关编程使用例程
  5. 虚拟服务器设置upnp,upnp怎么设置?
  6. Blender花季老将,16岁赢得全网最强渲染大赛国际组冠军,分享创作全过程
  7. python socket mysql_5.Python操作MySQL,三层架构,Socket网络编程
  8. 机器人二弟_LOL“60岁亚索”走红,带孙女直播人气突破50万,炫神:他真的很强...
  9. 北京皮肤医院去色斑用什么
  10. html DIV+CSS让文字垂直居中