selenium:反反爬拖动验证码
前言
- springboot 2.0.0.RELEASE
- selenium-java 3.9.1
- chromedriver win32 2.33
- chrome 62.0.3202.94
- 你已经可以编写selenium程序爬一个没有验证码的网页,但现在碰到了一个拖动验证码:https://cf.aliyun.com/nocaptcha
总结
经过搜索、尝试、再搜索、再尝试…,终于发现需要使用两项技术对selenium进行反爬:
- webdriver属性
- 特征$cdc_asdjflasutopfhvcZLmcfl_
通过js脚本提取webdriver属性和特征$cdc_asdjflasutopfhvcZLmcfl_,将提取结果进行编码后发送给服务器。服务器发现是selenium爬虫后,拒绝验证。
知道了反爬,则反反爬也就好办了。逐项针对规避即可。
有大神已经将步骤整理:https://blog.csdn.net/sdzhr/article/details/86714328
下面解惑一下:
webdriver属性
Chrome从v63版本开始添加了webdriver属性。只要通过selenium调用了浏览器便会将这个属性设置为true。
当服务器通过js脚本识别到webdriver属性时,会有如下现象:
- 手工启动chrome,人工拖动验证码可以通过验证。
- 使用selenium启动chrome,人工拖动验证码无法通过验证。
- 使用selenium启动chrome,程序模拟拖动验证码无法通过验证。
所以,避开webdriver属性需要使用低于v63版本的Chrome(v62.0.3202.94版本测试通过)。
注:
- 参考文章中提到的chrome 62.0.3202.62版本,未找到下载链接。
- chrome和chromedriver之间是有对应关系的,版本不匹配则无法使用。chrome和chromedriver之间的对应关系。
- 换用Firefox,也会有webdriver属性。
- 在浏览器的console控制台中输入navigator回车后,在输出中会发现webdriver属性,且值为true。
特征$cdc_asdjflasutopfhvcZLmcfl_
$cdc_asdjflasutopfhvcZLmcfl_是chromeDriver的特征之一。
chromeDriver会创建cdc_asdjflasutopfhvcZLmcfl_元素,并将该元素用于各种操作。比如,在使用findElement方法时,会使用该元素。
当服务器通过js脚本识别到特征“$cdc_asdjflasutopfhvcZLmcfl_”时,会有如下现象:
- 手工启动chrome,人工拖动验证码可以通过验证。
- 使用selenium启动chrome,人工拖动验证码可以通过验证。
- 使用selenium启动chrome,程序模拟拖动验证码无法通过验证。(原因即为上面所述)
避开webdriver属性需要修改chromeDriver中的特征$cdc_asdjflasutopfhvcZLmcfl_。修改方法:
- 通过文本编辑器打开chromedriver。linux下,通过vim chromedriver打开。windows下,通过notepad++打开chromedriver.exe。
- 查找特征"cdc_",改为"chr_"。(删掉几个字符,则加几个字符。不能改变
var key = '$cdc_asdjflasutopfhvcZLmcfl_';
key字符串的长度。否则,会导致chromedriver程序无法执行) - 修改完成后保存。
Using Vim
vim /path/to/chromedriver
After running the line above, you’ll probably see a bunch of gibberish. Do the following:
- Search for
cdc_
by typing/cdc_
and pressing return.- Enable editing by pressing
a
.- Delete any amount of
$cdc_lasutopfhvcZLmcfl
and replace what was deleted with an equal amount characters. If you don’t,chromedriver
will fail.- After you’re done editing, press
esc
.
5.To save the changes and quit, type:wq!
and pressreturn
.- If you don’t want to save the changes, but you want to quit, type
:q!
and pressreturn
.- You’re done.
Go to the altered chromedriver and double click on it. A terminal window should open up. If you don’t see killed in the output, you successfully altered the driver.
springboot开发selenium程序
springboot开发selenium非常简单。可以参考:https://blog.csdn.net/l707268743/article/details/80942246
参考
https
?/blog.csdn.net/sdzhr/article/details/86714328
https://gitee.com/bobozhangyx/java-crawler/blob/master/file/编译后的chromedriver/
https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver
https://blog.csdn.net/l707268743/article/details/80942246
selenium:反反爬拖动验证码相关推荐
- Python使用selenium过天眼查滑块验证码反爬实现模拟登录
Python使用selenium过天眼查滑块验证码反爬实现模拟登录 天眼查的滑块验证码样式 一顿操作到滑块验证码阶段 破解滑块验证码 结束 天眼查的滑块验证码样式 在输入账号和密码后会发现这个令人讨厌 ...
- 针对淘宝反selenium的反反爬措施详讲1-----pyautogui
现在某猫和某宝在反反selenium的道路上越越来恶毒了,大部分是检测webdriver的关键符(网上有很多介绍这里就不一一介绍了)当我们遇到反selenium那该怎么办??????????????? ...
- 已解决selenium框架接管已经打开的谷歌浏览器(Python反反爬教程,亲测有效)
已解决selenium框架接管已经打开的谷歌浏览器(Python反反爬教程,亲测有效) 文章目录 问题描述 解决方法 千人全栈VIP答疑群联系博主帮忙解决报错 问题描述 使用selenium自动化测试 ...
- python爬图片_网络爬虫经验:反爬和反反爬
我想很多人入门python是图片爬虫,就是HTTP请求,保存一下图片,用python实现非常快.网上很多爬虫的教程就讲到这里,实际上很单一,看了跟没看没什么区别,都是找一下网页的规律,然后Beauti ...
- python爬虫反爬 css 知乎 专栏_反反爬虫系列(四)
过完年,好了,咱们接着更新反反爬虫系列 至于之前有朋友表示出一下1688呀,x宝的反反爬虫 说实在的,阿里系的反爬虫很厉害,我自愧不能搞定. 比如x宝的登录,用了selenium + chrome的朋 ...
- day 15爬虫与反爬虫与反反爬
爬虫与反爬虫与反反爬 爬虫的流程: 1.请求网页,获取响应结果 2.解析网页,提取数据 3.数据持久化(写入存放位置) 反爬与反反爬 1.User-Agent:将爬虫伪装成浏览器.例如:豆 ...
- Python爬虫学习第九天---反爬与反反爬
反爬与反反爬 一.常见反爬手段和解决思路 1.服务器反爬原因 1.爬虫占总PV比例较高,这样浪费钱. 2.三月份爬虫:每年的三月份我们会迎接一次爬虫高峰期,有大量的硕士在写论文的时候会选择爬取一些往网 ...
- Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”
有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站植入各种反爬机制 ...
- python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...
你已经知道了对方是 如何自定义字体加密的了 你要想去反反爬 你就要先站在对方的角度去思考问题 有句话这么说来着 "知己知彼,才能那啥" 那么对于像猫眼电影.大众点评等等 那样的 c ...
最新文章
- 新手学stm32学f1还是f4,stm32初学者最好买哪种开发板?
- 用Xwt构建跨平台应用程序[转载]
- [YTU]_2631( B1 能存各种类型数据的Store类)
- python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...
- Scala成员属性:使用_给属性赋默认值/私有/val
- php 重载等号,重载运算符
- ip网络基础知识及原理_关于网络测试的5个命令
- DataGridView绑定对象数组 c# 1614236580
- React:网络工具库
- 进程、线程、I/O密集、计算密集
- MySQL 数据归档清理方法
- 读书笔记——魔鬼经济学3
- syn重发_TCP/IP中SYN,FIN的缩写意思
- Transformer 中 Decoder 结构解读_by 弘毅
- 基于SpringBoot的健身房管理系统
- android 查看视频大小,android mediaplayer 视频修改视频大小 (屏幕尺寸mediaPlayer =......
- 用JSP/Servlet应用开发一个简单的考试报名系统
- 路由器CFE-固件-NVRAM
- 【MySQL】索引的使用和优化
- PyTorch 深度学习实践 第4讲