哈喽大家好,我是鹏哥。

今天要记录的内容是 —— 破解Boss直聘网站的滑块验证。

…… 上 课 铃……

TuesdayBurak Yeter;Danelle Sandoval - Tuesday

1

写在前面

最近领导安排我投入公司招聘工作,然后自然就需要不停地在boss直聘网上进行人才搜索。搞了几天我就觉得无趣又繁琐,那就干脆爬虫下吧。由于boss直聘网站的网页设计代码写的比较好,获取元素也很方便,因此不到十分钟就写完了界面登录的selenium代码。原以为很简单的滑块验证,却让我烦恼了好久!

下面让我一步步来讲下我遇到的坑以及相应的解决方法

2

跳坑过程

# coding=utf-8# @公众号 : "鹏哥贼优秀"# @Date : 2020/3/20# @Software : PyCharm # @Python version: Python 3.7.2from selenium import webdriverfrom slide_solution import *import time
def visit_website(url):    driver = webdriver.Chrome('F:\\Python成长之路\\chromedriver.exe')    driver.maximize_window()    driver.get(url)    time.sleep(1)    # 输入帐户密码    driver.find_element_by_name('account').send_keys('手机号')    driver.find_element_by_name('password').send_keys('password')    slide_btn = driver.find_element_by_css_selector('span[class="nc_iconfont btn_slide"]')    # 滑块解决方法1    slide_solution1(slide_btn,driver)
    time.sleep(1)    driver.find_element_by_class_name('btn').click()    time.sleep(5)    driver.quit()
if __name__ == "__main__":    url = 'https://login.zhipin.com/?ka=header-login'    visit_website(url)

这是登录boss的主要代码,其中滑块验证的代码我是这么写的:​​​​​​

def slide_solution1(slide_btn,driver):    action = ActionChains(driver)    action.click_and_hold(slide_btn).perform()    for i in range(200):        try:            action.move_by_offset(i*2,0).perform()        except:            break        action.reset_actions()        time.sleep(0.1)

我按每0.1移动2个像素的速度,将滑块从最左边移到右边,从现象来看效果也是可以的,滑块的确移过去了。(其实也可以不用慢慢移动,可以直接action.move_by_offset(276,0).perform()来直接实现,276是滑块验证的像素长度)。

但是坑来了!

代码移动滑块后,界面报错如下:

尝试解决方法1:

一开始针对这种问题,网上资料是比较多的,我很快就知道了,是因为网页的window.navigator.webdrive字段设置为true。从大神们的博客中了解到,相当于网站通过这个字段可以知道chrome是人为打开,还是代码启动的。因此,相应的解决方法很快出来了。​​​​​​​

# 配置window.navigator.webdrive    option = webdriver.ChromeOptions()    option.add_experimental_option('excludeSwitches', ['enable-automation'])    driver = webdriver.Chrome('F:\\Python成长之路\\\滑块问题\\chromedriver.exe',options=option)

在启动chrome时,添加option,即停用开发者模式,这样就可以解决window.navigator.webdrive问题了,如下图所示。

尝试解决2:

很快我再次重试滑块时,发现仍然报一样的错误。这时候,网上的资料基本就不多了,对我的帮助也比较少。我猜测,可能是 ActionChains库的问题,有可能被网站检测到了。因此我想到了sikuli jar包。这个方法几乎可以实现任何的界面自动化,想了解的同学可以参考:

【Python成长之路】基于sikuli jar包,实现淘宝自动抢单功能(1)

这里相应的滑块移动代码如下:​​​​​​​

def slide_solution2():    jvmPath = jpype.get_default_jvm_path()    # Djava.class.path是本地的sikuliapi.jar包路径,需要提前下载好    jpype.startJVM(jvmPath, '-ea', '-Djava.class.path=F:\\sikuli\\1\\sikulixapi.jar')    Screen = JClass('org.sikuli.script.Screen')    myscreen = Screen()    myscreen.drag('start.PNG','end.PNG')    time.sleep(0.5)

对应的图片如下:

end.png

start.png

因为从我的理解来看,用sikuli库相当于就是人为操作鼠标进行移动。结果很不幸,还是一样的报错!我去!这也不行?

然后我在打开的chrome界面,手动滑动滑块,发现也是报错。这时候,我觉得可能是chrome启动时就以为被判定为非人为操作,因此无论后面仍然的操作,都会失败!

3

滑块验证最终解决方法

看到一篇大神的文章《python selenium滑动验证防检测》(http://www.py3study.com/Article/details/id/19698.html),作者将chromedriver.exe文件进行了反编译并修改。竟然还有这种操作!

(1)下载wxMEdit工具,并打开chromedriver.exe;

(2)将key值 中$cdc改名,如下,改成$abc

(3)保存新的chromedriver.exe文件

(4)将代码中的chromedriver.exe替换成修改后的exe

成功了!

4

滑块验证的另一种解决方法

在查找资料时,发现有大神说,如果用firefox浏览器代替chrome,相同的代码可以直接成功!这个方法我就没去尝试了,需要下载特定的旧版本firefox,以及下载对应的驱动文件。不过网上关于firefox安装selenium插件的资料还是挺多的。

5

总结

在查找滑块解决方法时,很多同学都遇到了相同的问题,为了后续方便其他人跳坑 ,因此想到写些博客,方便后来的同学吧!

如果有同学需要,可以访问以下网站获取代码及修改后的chromedriver.exe:https://github.com/yuzipeng05/slide_solution.git

…… 下 课 铃……

【往期热门文章】:

【Python成长之路】10行代码教你免费观看无广告版的《庆余年》腾讯视频

【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台

点击下方诗句,可以留言互动喔

你对的人,正在马不停蹄,披星戴月,风雨兼程,你在等等。

【关注“鹏哥贼优秀”公众号,回复“python学习材料”,将会有python基础学习、机器学习、数据挖掘、高级编程教程等100G视频资料,及100+份python相关电子书免费赠送!】

扫描二维码

与鹏哥一起

学python吧!

【Python成长之路】破解Boss直聘网站滑块验证相关推荐

  1. java抓取网页数据_Golang丨Java丨Python爬虫实战—Boss直聘网站数据抓取

    我们分别通过Golang.Python.Java三门语言,分别实现对Boss直聘网站的招聘数据进行爬取. 首先打开Boss直聘网站: 然后我们在职位类型中输入Go或者Golang关键字: 然后我们可以 ...

  2. python基于大数据的boss直聘数据招聘职位分析系统django

    本项目主要利用python技术爬取BOSS直聘网站上的岗位信息,进行对比分析UI设计师与产品经理两个职位的趋势.爬取字段:工作地点,薪资范围,学历要求,工作经验,公司性质等. 模拟登陆BOSS直聘网站 ...

  3. BOSS直聘网站数据分析岗位信息爬取

    Boss直聘网站已改用ajax了,可以改用selenium库爬取,下面爬虫已过时,但数据分析方法还是可以用的,数据分析全部代码都已给出. 语言:Python3 目录 一.信息爬取 二.数据分析 2.1 ...

  4. 写一个爬虫爬取boss直聘网站

    好的,我可以为您简要介绍如何编写一个爬虫来爬取 BOSS 直聘网站. 首先,您需要准备好以下几个东西: 安装 Python,并使用 pip 安装爬虫所需的库,如 requests 和 Beautifu ...

  5. python爬虫招聘-Python爬虫实战-抓取boss直聘招聘信息

    实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃.为此小编建了个Python全栈免费答疑.裙 : ...

  6. Python爬虫:爬取“Boss直聘”招聘数据

    hello 大家好~ 又是元气满满的一天呢~ 既然元气满满,要不要搞点事情,譬如说,爬取"Boss直聘"(此处模仿歪果仁讲话更带感)的招聘数据~ 说走咱就走,说干咱就干~" ...

  7. 爬取BOSS直聘信息并进行清理和可视化分析(python小白)

    年底了,学习数据分析快四个月了.为了尽快找到一份数据分析相关的工作,计划把BOSS直聘上的相关职位都爬取下来分析分析,也好检验一下最近的学习成果.python新手,代码写的乱,将就看吧.首先,对给BO ...

  8. python分析BOSS直聘的某个招聘岗位数据

    前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我给大 ...

  9. boss直聘python_爬Boss直聘,分析2019下半年Python工作现状

    引子 要说在当今的编程圈,找10位程序猿询问下当前世界上最好的语言是哪个,那必须是 PHP(强迫症)!但是如果你询问当今最火爆的语言是哪个,那么80%的小伙伴儿会毫不犹豫的告诉你,是 Python! ...

最新文章

  1. RNN的优秀变种: LSTM GRU
  2. 用 gson 替换 fastjson 引发的线上问题分析
  3. poj 3304 Segments (几何 : 线段 直线相交)
  4. 【机器学习】HOG+SVM进行车辆检测的流程及源码
  5. springboot 使用interceptor 返回前端http状态码为0
  6. 数据可视化(二)Matplotlib pandas简易入门
  7. mysql 5.0.22_mysql-5.0.22安装
  8. 中国版MSN慈善缘何遇冷:白领网民参与只为时尚(转自--竞报)
  9. Java案例:基于TCP的简单聊天程序
  10. (74)FPGA面试题-Verilog序列发生器,产生 10110 的序列
  11. HarmonyOS 实战——服务卡片初探索
  12. 无线网卡在使用过程突然不好使的解决方法,Deepin Linux 15.9与Windows 10双系统
  13. Python将word转化为txt文本
  14. httpClient4 设置代理
  15. CSS设置div上下居中
  16. 常用的数学基础知识集锦
  17. ios之Xcode6如何手动创建空工程模板
  18. excel排序求和:如何统计前几名数据合计 下篇
  19. java创建tensorfly对象,Tensorflow对象检测自定义数据集
  20. FBX导入错误 :ImportFBX Errors:

热门文章

  1. 例题:用“ * ”打印出等腰三角形
  2. 大学计算机实验二报告表答案,北理大学计算机实验基础实验二实验报告表答案(1页)-原创力文档...
  3. set 集合 拷贝的操作
  4. 远光软件:区块链+公益,让慈善更透明
  5. pytest-xdist:并发执行用例设计(脱坑)
  6. 中南民族大学复试c语言题库,2016年中南民族大学生物医学工程学院C程序设计考研复试题库...
  7. Office提示您的许可证不是正版弹框解决
  8. 在哪些情况下你会毫不犹豫的选择辞职?
  9. USB转串口芯片:CH340
  10. 阿里Java社招面试真题200+:缓存+分布式+JVM+高并发+NIO+框架