python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金
这里以查询深圳住房公积金为例(http://gjj.sz.gov.cn/fzgn/zfcq/)
from selenium import webdriver # 模拟浏览器操作
from PIL import Image # 图像处理
import time
import pytesseract # 验证码识别
# 加载等待时用到
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 获取公积金余额信息,输入:电脑号,身份证号
def getInfo(computerID,IDnumber):'''1.页面请求'''# http://gjj.sz.gov.cn/fzgn/zfcq/ 经查看左边原网址iframe标签发现输入框嵌入了下面的地址url = "http://app.szzfgjj.com:7001/pages/sj_yecx.jsp" browser = webdriver.Firefox()browser.get(url)browser.maximize_window() # 最大化#print(browser.page_source)# 等待加载完成#time.sleep(1)# 显示等待5s,等待元素加载(等某个条件发生后再继续执行后续代码)# 显示等待和隐式等待区别:https://blog.csdn.net/cyjs1988/article/details/76033180try:locator = (By.ID,"rad_1")WebDriverWait(browser,5).until(EC.presence_of_element_located(locator))except: # 超时则提示加载失败,浏览器退出并返回print("load fail") browser.quit()return'''2.输入信息'''# 选中个人社保电脑号按钮 browser.find_element_by_id("rad_1").click()# 输入社保电脑号ComputerNumber_input = browser.find_element_by_id("accnum1")ComputerNumber_input.send_keys(computerID)# 获取身份证输入框IDNumber_input = browser.find_element_by_id("certinum1")# 输入身份证号码IDNumber_input.send_keys(IDnumber)'''3.自动识别验证码处理'''# 找到验证码位置VerifyCode = browser.find_element_by_id("imgyzm")location = VerifyCode.location# 获取验证码的sizesize = VerifyCode.size#写成我们需要截取的位置坐标 ,这里获得(x,y)为矩形左下角的坐标,(x+width,y+height)为对应右上角的坐标rangle=(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height'])) #print(rangle)# 先保存整个网页截图name = "fullpage.png"browser.save_screenshot(name)# 通过PIL中的crop剪切图片image = Image.open(name)codeArea = image.crop(rangle) # 使用Image的crop函数(对图片进行剪切处理),从截图中再次截取我们需要的区域 codeArea.save("code_raw.png") # 保存截取的验证码图片# 对图片进行二值化处理(尴尬的是这里不做二值化处理,在下面经过放大处理后依然可以正确识别,权当研究下)out = ImageProcess("code_raw.png")# 获取图片大小x,y = out.size#print(x,y) # 60 20# 放大图片(经测试这里不放大,没法识别,原图size有点小)resize_img = out.resize((x*2,y*2)) #print(transform.rescale(img, 2).shape) #放大为原来图片大小的2倍#print(reimg.size) (120, 40)resize_img.save("code_erzhihua.png")result = pytesseract.image_to_string(resize_img,lang = "eng")print("result",result)# 输入验证码browser.find_element_by_id("verify").send_keys(result)'''4.查询'''# 点击查询按钮browser.find_element_by_id("but_2").click()# 以下打印不出结果,待进一步研究#time.sleep(2)#elements = browser.find_element_by_class_name("form_yecx_out")#print(elements.text)# 关闭此页面#browser.close()# 退出浏览器#browser.quit()# 对图片进行简单的二值化处理
def ImageProcess(image):image = Image.open(image)image = image.convert("L") # 灰色模式table = []threshold = 140for i in range(256):if i < threshold:table.append(0)else:table.append(1)return image.point(table,"1") # Image.point()方法操作像素数据getInfo("你的电脑号","你的身份证号")
reference:
https://blog.csdn.net/dcba2014/article/details/78969658
http://hankerzheng.com/blog/chenge-the-size-of-pic-by-python-pil
https://blog.csdn.net/kethur/article/details/79992539
python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金相关推荐
- java使用Selenium模拟登陆58(验证码登陆密码登陆)若快平台识别文字点击验证码
文章目录 写在前面 配置环境 Selenium入门 使用Selenium登陆58 若快平台识别文字点击验证码 附: By对象中的 xpath & cssSelector获取方式** 不打开浏览 ...
- Python使用selenium模拟登陆,截取图片验证码并转化为base64
研究好几天截取图片验证码,今天终于好了,主要图片验证在第二个iframe里面,所以在截取的时候,必须先定位最外面的iframe的坐标(简称frame1),然后在定位嵌套里面的iframe(简称fram ...
- selenium模拟登陆时截取验证码
模拟登陆时,经常会遇到有验证码的问题,那么就需要把验证码给截取下来. 如下为截取验证码程序,该程序的原始地址为:http://www.cnblogs.com/donaldlee2008/p/53045 ...
- 使用selenium模拟登陆,手机验证码
大众点评 from time importsleepfrom selenium importwebdriverimportrandomdefprocess_request(self,request,s ...
- python利用selenium模拟登陆163邮箱
首先需要定位登录框的地址,分析过程见 https://www.jianshu.com/p/d59a5611c053 登陆框标签是一个iframe,且id每次都是不一样的,因此不能按id值查找,这里先按 ...
- python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- Python使用selenium过天眼查滑块验证码反爬实现模拟登录
Python使用selenium过天眼查滑块验证码反爬实现模拟登录 天眼查的滑块验证码样式 一顿操作到滑块验证码阶段 破解滑块验证码 结束 天眼查的滑块验证码样式 在输入账号和密码后会发现这个令人讨厌 ...
- selenium模拟登陆之截屏验证码位置跑偏
在用selenium做爬虫的模拟登陆时遇到验证码图片截取下来的和目标区域的图片不匹配 截到的: 目标是这样的: 明显坐标写的不对,导致截屏区域不是验证码的区域. 只能一步一步取修改坐标,来确定具体的图 ...
- python模拟淘宝登陆_【Python】selenium模拟淘宝登录
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By f ...
最新文章
- Linux下安装PCRE
- bcrypt如何内置盐?
- 笨办法学python3-笨方法学Python3(21-44)
- JavaScript编程:文档对象模型DOM
- [Luogu] 聪聪可可
- 史上赚钱最快的十位商业奇才,他1年赚10亿美金!
- html字体整体偏移,html/css:在悬停鼠标时增加字体大小的链接时的位置偏移
- wpf Command Binding
- ASP.NET数据库编程入门
- MZOJ 1345 hero
- 利用Python定时给女友微信发送今日天气情况,异地恋维护感情神器
- 第十一届单片机蓝桥杯省赛(第一组)
- 符冉迪 计算机 培训,宁波大学考研研究生导师简介-符冉迪
- 租房注意事项(一):租房术语
- C语言从入门到精通——指针基础
- paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)
- 机器人植入情感芯片利与弊_未来机器人或具备情感 专家:要考虑伦理问题
- 华硕x550vc——6年后的性能测试
- SRM 558 SurroundingGame
- 基于法拉第电磁感应定律的永动机(假
热门文章
- 为什么淘宝京东的首页这么快
- iproute2;高级路由;ip_route,ip_rule;
- Ubuntu下安装配置gitLab(一)
- NOIP2016 “西湖边超萌小松鼠” 模拟赛
- 1000瓶水和1瓶毒水还有10只老鼠
- ubuntu简繁体输入法快捷键转换
- 鲍鱼数据案例(岭回归 、LASSO回归)
- ACM第一次练习—1000A
- django restful mysql_如何用Django和restful搭建api接口服务
- linux下部署服务,启动时显示socket注册失败。数据库连接失败。求帮下忙。