话说学编程这几年,遇到的问题也不少,唉声叹气的倒不是很多,这不,今天就遇到一件,撞到反爬虫界的流氓,学生党兼个职也不容易啊,深夜发文恳求懂的高手赐教破解之法。

故事的起因是这样的:
客户要求我调联通的接口,查询用户套餐相关的信息。就这么简单一件事。这个系统就是以前大家不用支付宝,不用微信去店里充话费的那个系统。标准的老系统,渲染引擎为IE7,这么大个公司还用这么老的系统?。

下图呢就是客户给的,一句话的需求+这张图。看到的时候我不屑一顾,就这?就这?

既然我们要调这个里面的接口,肯定需要先登录,我们来看看登录页面。这个系统只能通过IE访问,并且要安装额外的应用程序,授信证书。

https://cbss.10010.com/essframe



分析下这个登录,行家一看就知道最难的还是验证码。我也是这么想的!但是验证码这个东西能挡得住我吗?因为考虑到这个安装了额外的程序,而且debug模式一开这页面就暂停,选择元素都不行,看DOM麻烦许多,一点登录,用户和密码就变了,疑似Base64编码。有可能这个东西吧,有鬼!所以我决定,用最爽的方法,Selenium!管你加密得再好,在我Selenium面前,还不是乖乖的把数据端上来。况且我也急着交差啊,没那么心情分析JS过程。

于是我就先处理验证码,我先把验证码调色,处理,把横线处理掉,然后用tesseract进行识别。效果还凑合。所以这一步也没啥好谈的,直接把甲方给的账号密码、识别的验证码弄上去。记得在这里我获取登录按钮的时候,出了点问题,具体我有些忘了,最后是通过查看源码直接用Selenium执行JS方法提交的。因为这个页面不是很好看源码,我用Fildder抓下来看的。这是登录进去的样子。

嘿,我都用代码登录进去了,后面的还不是我想这么搞就怎么搞?结果,问题来了。这个页面是由很多的frame组织的,debug也被限制,很难看。要依次点过去找来找去还是比较麻烦,而且这些按钮看起来像是编号的,花一些功夫总算知道路径了,一调用点击吧不是没反应,就是显示了其它内容去了···········澄清一下,我确认了frame。但是我手动点就没事。后来我一生气,也不想依次点过去了。就直接找到它操作。

但是问题不断,这一点直接把这个目录树的frame变成查询的页面了,而且这个frame的宽度太窄了。没办法,本来想着很简单的事情。结果一顿操作猛如虎,一看结果丑到哭。于是只好分析JS和DOM。憋了下面两行代码。

js = "document.getElementById('fset').cols='1000,88,500,2'"
dr.execute_script(js)js = "openmenu('/ambillquerypls?service=page/acct.billquery.realtimemonthlybill·········省略');"
dr.execute_script(js)

终于,让我顺利的进入了查询界面,而且还是单独的,觉得这事总算要到头了,没想到,哎

在这个地方看似容易,实际上大大的不容易。看起来很简单,实际上:
1、查询按钮获取后点击没用,JS点、Selenium的click。最先我想可能是用什么元素盖住了查询按钮,点击的时候实际上是点击的这个透明的元素,只是因为DOM不是很好看所以我没找到。
2、如果使用js的方法设置业务号码的值、或者用Selenium的send_keys,绝对不行,设置值可以,没问题,但是只要点击查询,铁定查不不出来。我想可能是输入框绑定了事件,这样的话输入的时候有额外处理,不能直接填值。但是我发现我手动粘贴号码是可以正常使用的,于是,我就用代码对Windows粘贴板操作,这里又有一个问题,只要使用js,input.focus()去让input获得焦点,必然会导致最终查询获取不到结果,我也没想出来,这到底是为什么!

粘贴板本身是可以用的,我测试过纯粘贴,其它什么都不做,手动点击查询是可以的,证明粘贴是可以的。
······································
好吧好吧,这些困难我就不提了。你以为你牛是吧,我还有绝招,这你总拿我没办法吧,看看我写的什么:

with open("telephone.txt") as f:telephone = f.readline()x = dr.find_element_by_tag_name("input").location['x'] + 20y = dr.find_element_by_tag_name("input").location['y'] + 75pyautogui.moveTo(x, y,duration=0.1)pyautogui.click()time.sleep(1)set_text(telephone) # 设置号码到粘贴板# Ctrl+v 粘贴操作win32api.keybd_event(17,win32api.MapVirtualKey(17,0),0,0)key_press('v')win32api.keybd_event(17, win32api.MapVirtualKey(17, 0), win32con.KEYEVENTF_KEYUP, 0)time.sleep(3)x = dr.find_element_by_id('query_btn').location['x'] + 10
y = dr.find_element_by_id('query_btn').location['y'] + 70
pyautogui.moveTo(x, y,duration=0.1)
pyautogui.click()

没有错,直接控制鼠标,移动到输入框,粘贴号码-》然后点击查询按钮。这没什么问题吧,我就不相信你个网页还知道鼠标不是人操作的!
结果打脸了,彻底让我不知所措。鼠标不是人操作的也能检测出来吗?

这个网页只要是正常操作,就是人去输入,点击,就一点问题没有,只要是机器操作的,一定查询不出来。只要机器操作了,错误后就一直错误,必须重新登录进入这个页面。一般还要清理缓存。

到底是不是这个网站要求安装的程序和IE有什么关联,检测出来的,涉及到知识盲区了。

被反爬虫搞到心态崩溃相关推荐

  1. 反爬虫兵法演绎18 _ 如何搞定老板(上):如何编造虚无缥缈的OKR?

    18 | 如何搞定老板(上):如何编造虚无缥缈的OKR? 你好,我是DS Hunter. 众所周知,每个项目创建的时候,都要频繁的设定目标,即使这些目标每天都在变化,刚设置完就已经没用了.但是,上层的 ...

  2. Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

    责编:乐乐 链接:oschina.net/news/112586/kk-anti-reptile-released kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系 ...

  3. selenium 反爬虫之跳过淘宝滑块验证!首先要搞定JS!

    在处理问题的之前,给大家个第一个锦囊! 你需要将chorme更新到最新版版本84,下载对应的chorme驱动 驱动地址 注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~ ...

  4. python 淘宝滑块验证_selenium 反爬虫之跳过淘宝滑块验证!首先要搞定JS!

    在处理问题的之前,给大家个第一个锦囊! 你需要将chorme更新到最新版版本84,下载对应的chorme驱动 注意 划重点!!一定要做这一步,因为我用的83的chorme他是不行滴,~~~~~~~ 问 ...

  5. 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

    今日推荐 减少 try-catch ,这样做才叫优雅!让人上瘾的新一代开发神器,彻底告别Controller.Service.Dao等方法SpringBoot实现人脸识别功能相信我,使用 Stream ...

  6. 014:Django反爬虫和反反爬虫实战讲解

    最近一直在用django写一个个人音乐在线播放平台. 其中在网页数据保护方面,我采取了很多种的反爬虫措施,所以在本篇文章中,我从源码和实际操作上给大家分析下我所使用的反爬虫及其对应的破解技巧. 首先我 ...

  7. html中::before 爬虫_反反爬虫系列(四)

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

  8. 关于反爬虫,看这一篇就够了

    编者:本文来自携程酒店研发部研发经理崔广宇在第三期[携程技术微分享]上的分享,以下为整理的内容概要.墙裂建议点击视频回放,"现场"围观段子手攻城狮大崔,如何高智商&高情商地 ...

  9. 关于反爬虫,看这一篇就够了 1

    编者:本文为携程酒店研发部研发经理崔广宇在携程技术微分享中的分享内容. [携程技术微分享]是携程技术中心推出的线上公开分享课程,每月1-2期,采用目前最火热的直播形式,邀请携程技术人,面向广大程序猿和 ...

  10. svg text换行_5分钟看懂SVG反爬虫原理与绕过实战 | 知了干货分享

    SVG反爬虫不同于字体反爬虫,它巧妙的利用css 与 svg的关系,将字符映射到网页中,看起来虽然正常,但是却抓取不到有效内容.本文带你深入浅出,破了SVG反爬虫的套路,学会之后,可应用于某点评网. ...

最新文章

  1. 节能信标无线感应定位测试:200kHz
  2. [ASP.NET 控件实作 Day28] 图形验证码控件
  3. SAP HANA简介
  4. VTK:轮廓 Glow Pass用法实战
  5. 干掉RESTful:GraphQL真香!
  6. 第三次学JAVA再学不好就吃翔(part90)--TreeSet
  7. c语言程序求一一组数平均值,编写求一组整数的和与平均值的程序
  8. 正在锁定计算机 win7转圈圈打不开,Win7网络连接图标一直转圈的原因和解决方法...
  9. String StringBuilder StringBuffer三者之间的区别~~~
  10. ASP.NET五大核心对象解析
  11. 手动搭建latex公式渲染服务器
  12. Java IO实战操作(三)
  13. 《架构即未来》中最常用的15个架构原则
  14. 【光波电子学】MATLAB仿真厄米特-高阶高斯光束以及绘制其光强分布图
  15. SpringBoot使用Validation校验参数
  16. 2018年【计算机视觉+机器学习+人工智能】领域重要会议汇总
  17. 电影下载合并教程 (转)
  18. 关于source insight、添加.s和.S文件,显示全部路径、加入项目后闪屏幕
  19. 移动式自动气象站优势
  20. python百度贴吧图片下载脚本实例

热门文章

  1. ElasticJob-Lite 框架源码学习
  2. QSS实践汇总(3)——QComboBox样式(风格)
  3. 各个地区2.4G及5G信道一览表
  4. speedoffice如何根据身份证号码提取出性别
  5. python下载包图网图片_Python爬虫 包图网case
  6. 【yishen】黑苹果 声卡驱动
  7. Java 打印PDF文档的3种情况
  8. 永磁同步电机转速电流双闭环PI+MTPA+弱磁控制Simulink仿真模型
  9. 10个炫酷特效的网页写法(附源码),拿去就能用,nice
  10. 嵌入式单片机高级篇(一)Stm32F103电容触摸按键