第三方接口实现python识别验证码自动登录

要实现带有验证码的自动登录,有三种方式:
1.找开发屏蔽掉验证码;
2.找开发设置一个万能验证码;
3.自动识别验证码;
经过多方学习和研究,现将能实现自动识别验证码的代码贴出。
该实现调用了第三方接口,chaojiying.py可在http://www.chaojiying.com,注册账号
生成soft_id
找到验证码类型,code_type
下载chaojiying.py,将该文件放在同级目录下

# author :'zhanghong
# *coding :utf-8*

from selenium import webdriver
import time
from PIL import Image
from chaojiying import Chaojiying

#元素定位表达式
#用户名
login_username_xpath = "//*[@id='rrapp']/div/div[1]/input"
#密码
login_passwd_xpath = "//*[@id='rrapp']/div/div[2]/input"
#验证码输入框
yzm_input_xpath="//*[@id='rrapp']/div/div[3]/input"
#验证码图片
yzm_xpath="//*[@class='yzm']"
#登录按钮
login_button_xpath = "//*[@class='login-button']/button"

#实例化对象
driver=webdriver.Chrome()
#最大化窗口
driver.maximize_window()
#请求url
driver.get('http://xx.xx.xxx.xxx:xx')
time.sleep(1)

#输入用户名和密码
driver.find_element_by_xpath(login_username_xpath).send_keys('admin')
driver.find_element_by_xpath(login_passwd_xpath).send_keys('maystar2018')

#截取页面图像
driver.save_screenshot('jietu.png')
time.sleep(1)
#获取验证码元素
yzm=driver.find_element_by_xpath(yzm_xpath)
#获取验证码的坐标位置
loc = yzm.location
#获取验证码的尺寸
size = yzm.size
#验证码的左上位置坐标
left = loc['x']
top = loc['y']
#验证码的右下位置坐标
right = left + size['width']
bottom = top + size['height']

#打开页面截图
page_pic = Image.open('jietu.png')
#截取验证码图片
yzm_pic =page_pic.crop((left,top,right,bottom))
yzm_pic.save('yzm.png')

# 打开验证码图片,读取内容
with open('yzm.png','rb') as f:
    pic = f.read()
#调用第三方接口识别验证码
yz = Chaojiying(username='xxxx',password ='xxxx',soft_id='xxxx' )
# 识别验证码
result = yz.post_pic(pic,codetype='1005')
#获取验证码结果
yzm_str = result['pic_str']
#输入验证码
driver.find_element_by_xpath(yzm_input_xpath).send_keys(yzm_str)
#点击登录
driver.find_element_by_xpath(login_button_xpath).click()

你可能感兴趣的:(第三方接口实现python识别验证码自动登录)