300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金

python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金

时间:2022-01-25 20:59:56

相关推荐

python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金

这里以查询深圳住房公积金为例(http://gjj./fzgn/zfcq/)

from selenium import webdriver # 模拟浏览器操作from PIL import Image # 图像处理import timeimport pytesseract # 验证码识别# 加载等待时用到from mon.by import By from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 获取公积金余额信息,输入:电脑号,身份证号def getInfo(computerID,IDnumber):'''1.页面请求'''# http://gjj./fzgn/zfcq/ 经查看左边原网址iframe标签发现输入框嵌入了下面的地址url = ":7001/pages/sj_yecx.jsp" browser = webdriver.Firefox()browser.get(url)browser.maximize_window() # 最大化#print(browser.page_source)# 等待加载完成#time.sleep(1)# 显示等待5s,等待元素加载(等某个条件发生后再继续执行后续代码)# 显示等待和隐式等待区别:/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:

/dcba/article/details/78969658

/blog/chenge-the-size-of-pic-by-python-pil

/kethur/article/details/79992539

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。