python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路)
一、超级鹰注册:超级鹰入口
1、首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分,基本上就够学习使用了。如果想一直用可以用,可以充值,不是很贵。
2、下载超级鹰的python库代码。代码
3、然后有测试案例,自己可以试着跑一跑代码。
二、使用selenium库来识别点触式验证码:
1、首先是找一个使用点触式二维码的网站:(这个真的是比较难找了,由于静谧大大书上的网站被封了,我找了好久,才找到斗鱼的找回密码是用的点触式验证码,将就着用吧)。
2、开始操作:
(1)首先声明一个类,定义属性:
'''
func:斗鱼找回密码,点触式二维码
author:monty
date:2018/11/24
'''
from chaojiying import Chaojiying_Client
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
from PIL import Image
from io import BytesIO
from selenium.webdriver import ActionChains #填写自己的斗鱼注册手机号
tel=
#超级鹰的类型码
kind=9004
class CrackGeetest():
def __init__(self):
self.url='https://www.douyu.com/member/findpassword/findByPhone'
self.browser=webdriver.Chrome()
self.browser.get(self.url)
self.wait=WebDriverWait(self.browser,20)
self.tel=tel
self.chaojiying=Chaojiying_Client('超级鹰账号', '超级鹰密码',kind)
(2)填写输入框信息:
def set_tel(self):
'''
填写telephonenumber
:return:
'''
#获取输入框
input=self.wait.until(EC.presence_of_element_located((By.ID,'reg_userphone')))
input.clear()
input.send_keys(self.tel)
(3)获得初始的机器验证按钮:
def get_geetest_button(self):
'''
获取初始验证按钮
:return:
'''
button=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'geetest_radar_tip')))
return button
(4)获取点触验证码图片:
def get_image(self):
'''
获取验证码图片
:return: 图片对象
'''
image=self.wait.until(EC.presence_of_element_located((By.CLASS_NAME,'geetest_widget')))
return image def get_position(self):
#获取图片的位置信息
image=self.get_image()
time.sleep(2)
location=image.location
size=image.size
top,bottom,left,right=location['y'],location['y']+size['height']-55,location['x'],location['x']+size['width']
return (top,bottom,left,right) def get_screenshot(self):
'''
获取整个屏幕截屏
:return:
'''
screenshot=self.browser.get_screenshot_as_png()
screenshot=Image.open(BytesIO(screenshot))
return screenshot def get_touclick_image(self, name='captcha.png'):
"""
获取验证码图片
:return: 图片对象
"""
top, bottom, left, right = self.get_position()
print('验证码位置', top, bottom, left, right)
screenshot = self.get_screenshot()
captcha = screenshot.crop((left, top, right, bottom))
captcha.save(name)
return captcha
def __del__(self):
self.browser.close()
(5)利用超级鹰获得需要点触的位置:
#获取验证码截图
image=cg.get_touclick_image()
bytes_array=BytesIO()
image.save(bytes_array,format='PNG')
#识别验证码
result=cg.chaojiying.PostPic(bytes_array.getvalue(),kind)
(6)根据位置来点触验证码:
def getPoint(self,result):
'''
获取每个坐标点
:param result:
:return: 返回坐标位置
'''
groups=result.get('pic_str').split('|')
locations=[[int(number) for number in group.split(',')] for group in groups]
return locations def touch_click_words(self,locations):
'''
点击坐标
:param locations:
:return:
''' for location in locations:
print(location)
ActionChains(self.browser).move_to_element_with_offset(self.get_image(), location[0],
location[1]).click().perform()
time.sleep(1)
(7)最后点击提交按钮:
def submit(self):
submit=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'geetest_commit')))
submit.click()
time.sleep(5)
button=self.wait.until(EC.element_to_be_clickable((By.ID,'submit-fp-ph')))
button.click()
3、基本流程就是这样,爬虫就是为了模拟用户的操作,跟黑客没什么关系,一点也不高大上!!!
附github代码:selenium完成斗鱼找回密码验证
python利用selenium库识别点触验证码的更多相关文章
- Python:利用 selenium 库抓取动态网页示例
前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...
- 利用selenium库自动执行滑动验证码模拟登陆
破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- 安装python的selenium库和驱动
对于使用selenium来进行python爬虫操作可以简化好多操作,它实际上的运行就是通过打开一个浏览器来一步一步的按照你的代码来执行 如果安装过python编译器后应该pip工具也是有的,验证pyt ...
- 使用Python的selenium库制作脚本,支持后台运行
本文介绍如何使用Python的selenium库制作脚本.概念: Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...
- 使用python内置库pytesseract实现图片验证码的识别
环境准备: 1.安装Tesseract模块 git文档地址:https://digi.bib.uni-mannheim.de/tesseract/ 下载后就是一个exe安装包,直接右击安装即可,安装完 ...
- python利用requests库模拟post请求时json的使用
我们都见识过requests库在静态网页的爬取上展现的威力,我们日常见得最多的为get和post请求,他们最大的区别在于安全性上: 1.GET是通过URL方式请求,可以直接看到,明文传输. 2.POS ...
- Python利用PyExecJS库执行JS函数
在Web渗透流程的暴力登录场景和爬虫抓取场景中,经常会遇到一些登录表单用DES之类的加密方式来加密参数,也就是说,你不搞定这些前端加密,你的编写的脚本是不可能Login成功的.针对这个问题,现在有 ...
- python 利用PIL库进行更改图片大小的操作
python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...
随机推荐
- 算法:数组中和为s的两个数字
@问题 :题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述:对应每个测试案例,输出两个数,小的先输出.@思路: 两个 ...
- No module named "Crypto",如何安装Python三方模块Crypto
前两天公司公司老总让我研究怎么用企业微信第三方应用进行官网对接,完成URL回调验证问题. 具体如何进行Python 的Django网站与企业微信第三方应用进行回调验证的博客地址为:https://ww ...
- 【English】一、专治各种英语不服
一.前言 英语虽然不是使用人数最多的语言,但是...谁叫我是一名码农且英语垃圾呢. 二.开始 1. read sb sth = read sth for sb read sb sth 是双宾语结构. ...
- DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...
- Ext.grid.panel 改变某一行的字体颜色
grid.getStore().addListener('load', handleGridLoadEvent); function handleGridLoadEvent(store, record ...
- Linux中VSFTP的配置
配置VSFTP服务器: 1.安装VSFTP,可以参考Linux 中yum的配置来安装: yum installvsftpd.x86_64 -y 2.修改SELinux: setenforce 0 查看 ...
- mssql sqlserver 指定特定值排在表前面
转自:http://www.maomao365.com/?p=7141 摘要: 下文讲述sql脚本编写中,将 特定值排在最前面的方法分享, 实验环境:sqlserver 2008 R2 例:将数据表中 ...
- 伙伴系统之避免碎片--Linux内存管理(十六)
1 前景提要 1.1 碎片化问题 分页与分段 页是信息的物理单位, 分页是为了实现非连续分配, 以便解决内存碎片问题, 或者说分页是由于系统管理的需要. 段是信息的逻辑单位,它含有一组意义相对完整的信 ...
- Linux常见系统故障
Linux常见系统故障 1.修复MBR扇区故障 2.修复GRUB引导故障 3./etc/inittab文件丢失 4.遗忘root用户密码 5.修复文件系统 6.磁盘资源耗尽故障 一.修复MBR扇区故障 ...
- LeetCode算法题-Kth Largest Element in a Stream(Java实现)
这是悦乐书的第296次更新,第315篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第164题(顺位题号是703).设计一个类来查找流中第k个最大元素.请注意,它是排序顺序 ...