前言:本来是“账号+密码”的登录方式,突然就增加了验证码输入,还30秒一变。
查看元素
链接为一个png图片文件,每半分钟一更新,意思就是慢了还不行。
思路:OCR识别图片中的文本。图片的网络地址直接传送识别?不行。保存图片文件到本地,再识别?不好。截屏再剪切局部区域,太麻烦。直接利用selenium自带的screenshot_as_png高效实现。
步骤:
1.百度OCR吧,pip install baidu-aip安装。以前用过,现在居然收费了,一年50块10000次,腾讯好象还可以免费用(ID都在单位电脑上,上班再试试),算了,就急,先用吧。安装后要导入:from aip import AipOcr,当然三个字串不能少:APP_ID、API_KEY、SECRET_KEY。
2.代码
def mark_ocr(png_data):##
client = AipOcr("15441825", "VAg0XiGrW2j1MfMK43Bzmoy5", "3GuciPY1Ziqp4FrTIYcfjGL1Lh95HG7o")
res = client.basicGeneral(png_data, {})
txt=res['words_result'][0]['words']
return txt
def login():
print('开始登录...')
obj.get(url_login)
WebDriverWait(obj,60).until(EC.visibility_of_any_elements_located((By.XPATH,'//*[@id="username"]')))
pic_obj=obj.find_element_by_id('img_code')#查找验证码图片
png_data=pic_obj.screenshot_as_png#局部剪切为图片PNG数据
mark_txt=mark_ocr(png_data)#送百度在线识别为验证码文本
obj.find_element_by_name('username').send_keys('ID123456')
obj.find_element_by_id('password').send_keys('X123456abc')
print(u'账号密码输入完成!')
obj.find_element_by_id('imgcode').send_keys(mark_txt)#
print(u'验证码输入完成!')#
obj.find_element_by_id('fm-login-submit').click()