selenium 反爬虫之跳过淘宝滑块验证功能的实现代码


Posted in Javascript onAugust 27, 2020

在处理问题的之前,给大家个第一个锦囊!

你需要将chorme更新到最新版版本84,下载对应的chorme驱动 链接:http://chromedriver.storage.googleapis.com/index.html
注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~~~~

问题

1.一周前我的滑块验证代码还是可以OK的,完全没问题!附代码 low一眼

url = "https://login.taobao.com/member/login.jhtml"
browser.get(url)
browser.maximize_window() # 最大化

# 填写用户名密码
user = '*****'
password = '*******'
time.sleep(8)

iframe = browser.find_element_by_xpath('//div[@class="bokmXvaDlH"]//iframe')
print(iframe)
browser.switch_to.frame(iframe)
browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(id)
browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password)
time.sleep(2)
# 获取滑块的大小
span_background = browser.find_element_by_xpath('//*[@id="nc_1__scale_text"]/span')
span_background_size = span_background.size
print(span_background_size)

# 获取滑块的位置
button = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
button_location = button.location
print(button_location)

# 拖动操作:drag_and_drop_by_offset
# 将滑块的位置由初始位置,右移一个滑动条长度(即为x坐标在滑块位置基础上,加上滑动条的长度,y坐标保持滑块的坐标位置)
x_location = span_background_size["width"]
y_location = button_location["y"]
print(x_location, y_location)
action = ActionChains(browser)
source = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
action.click_and_hold(source).perform()
action.move_by_offset(300, 0)
action.release().perform()
time.sleep(1)

# 登录
browser.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
print('登录成功\n')

完全可以会很好的进入淘宝,游刃有余
2.淘宝爸爸一周后就给我泼凉水,增加了自己的反爬虫机制,出现如下错误。

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

刚开始我以为是我频繁登录,导致淘宝的机器人识别我为代码进入。一般之前都是会在30分钟内解封。结果一天之后还是存在这个问题。查阅资料,翻了我的葵花宝典还是没有解决办法。后来看到一个文章,可能是淘宝再次更新了自己对selenium的验证,导致我不在成为漏网之鱼。唉唉唉,导致我3天没有解决。现在我把自己的坑和解决办法给大家分享一哈。成功的再次成为漏网之鱼,哈哈哈!

步骤

1.首先很多熟悉JS的人都知道淘宝会检测window.navigator.webdriver(js检测特征之一),但是即使设置了"undefined"还是败下来,看看

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

2.这时候细心的就需要观察一下他的全局JS,(这个是我参考别人的思路)你会发现淘宝爸爸在你浏览器内置的JS中有这么一段恐怖的代码

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

就是这个标黄色的东西,不会容易被发现的东西被检测到你是selenium进入,是不是特别坑!那我们接下来就需要干掉他。
3.这个时候仔细想一下,我们是通过什么打开浏览器呢?是的,知道的都会说webdriver.exe这个驱动。那我们就从他开始下手,当你打开webdriver.exe它后你会发现其中的问题!
注意:划重点!!!怎么打开和修改webdriver.exe。很多人都是乱码,之前我看到Windows系统采用nodepad++去打开就可以了,注意我的不行!你们可以试一下。(有的人是可以的,但是我的老师电脑不可以),然后我就找了一个办法,需要大家会一点vim操作,很简单的!准确的说就是Linux去解决,因为他不存在编码问题,不会像傻Windows,特别蠢!!开发人员最好还是用Linux系统吧!
经过我认真不负努力的搜索,诶找到一个靠谱的文章,哈哈!外国的‘知乎'
文章链接:https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver
就是他!

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

就是这段翻译后的操作。
注意 划重点 !!采用Linux系统的vim进去后你看到的也是乱码!!哈哈,but和Windows的乱码是不一样的,他会让你找到“$cdc_asdjflasutopfhvcZLmcfl_”这个字符串的,神奇吧。这就是Linux的强大!!
不会Linux命令的童鞋可以自己搜索一下,很简单的。修改后记得要保存哦!

4.可能大家觉得到这里就可以了,NO NO NO 这样子你还是登录不掉的。需要最后一个锦囊妙计!!
具体就是 你需要关闭chorme开发者模式,关闭自动测试状态,还需要将大家都熟知的把window.navigator.webdriver设为"undefined"。可能说的不太明白,图片帮你理解

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

# chrome_options 初始化选项
  chrome_options = webdriver.ChromeOptions()

  # 设置浏览器初始 位置x,y & 宽高x,y
  chrome_options.add_argument(f'--window-position={217},{172}')
  chrome_options.add_argument(f'--window-size={1200},{1000}')

  # 关闭自动测试状态显示 // 会导致浏览器报:请停用开发者模式
  # window.navigator.webdriver还是返回True,当返回undefined时应该才可行。
  chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

加上这个代码会关闭“正受到自动测试软件的控制“的显示

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

# 通过浏览器的dev_tool在get页面钱将.webdriver属性改为"undefined"
  driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
  })

加上这个代码可以关闭开发者模式

selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

# 通过浏览器的dev_tool在get页面钱将.webdriver属性改为"undefined"
  driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
  })

最后我们通过提前运行js的方法,把window.navigator.webdriver设为"undefined"!
OK !!大功告成!!通过这么一步步下来,你会发现 我的天居然没有滑块!开森!!

总结

到此这篇关于selenium 反爬虫之跳过淘宝滑块验证(2020/8)的文章就介绍到这了,更多相关selenium 跳过淘宝滑块验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery入门—编写一个简单的JQuery应用案例
Jan 03 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
Aug 15 Javascript
Javascript 是你的高阶函数(高级应用)
Jun 15 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
May 11 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
Jun 20 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
Jun 21 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 Javascript
JavaScript常用数学函数用法示例
May 14 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 #Javascript
js实现QQ邮箱邮件拖拽删除功能
Aug 27 #Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 #Javascript
javascript操作向表格中动态加载数据
Aug 27 #Javascript
Vue为什么要谨慎使用$attrs与$listeners
Aug 27 #Javascript
js实现批量删除功能
Aug 27 #Javascript
js利用拖放实现添加删除
Aug 27 #Javascript
You might like
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
PHP微信支付开发实例
2016/06/22 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
Webpack中publicPath路径问题详解
2018/05/03 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
python基础教程之获取本机ip数据包示例
2014/02/10 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
如何写一个自定义标签
2012/12/28 面试题
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
团代会宣传工作方案
2014/05/08 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
大学生就业意向书
2015/05/11 职场文书
总经理年会致辞
2015/07/29 职场文书
2016国培学习心得体会
2016/01/08 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技