研究了好几天,终于解决了126邮箱登录出现的验证码问题!!!
首先需要导包:
1、下载PIL,一个强大的处理图像的库。无法使用pip小工具下载,而且官网没有对应的python3版本,不过可以使用pillow替代PIL,可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载对应版本的pillow,然后使用pip工具安装(pip install pillow)。使用导包的时候要注意,导入的依旧是PIL,而不是pillow。
2、下载python对应的超级鹰开发文档。超级鹰是一个验证码识别平台,提供了识别接口,十分方便快捷。从官网https://www.chaojiying.com/下载,同时注册一个账号密码,获取软件ID,这在之后的代码中都会用到。
3、其他的库用pip小工具是可以直接下载的。
代码思路我是参考http://www.manongjc.com/detail/9-srwdzkavnkhigmq.html,思路大家可以看这里的,讲的很清楚。主要可能需要修改的就是验证码图片的位置和鼠标移动的位置,对应的方法是submit_cal(),get_position(),click()。
运行这个程序可能会出现验证失败的问题,应该是我的图片位置定位的不够精确,所以我用循环控制重新验证,验证成功才break。如果出现没有显示验证码或者没有点击汉字的问题,多半是因为原网页变了,需要重新确定验证码位置。
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from chaojiying import Chaojiying_Client
from PIL import Image
from io import BytesIO
import time
from selenium.common import exceptions
class Mail_BrackGeetest():
def __init__(self,browser,USER,PASSWORD,ID):# 初始化浏览器,超级鹰账号密码和ID,
self.browser = browser
self.wait = WebDriverWait(self.browser, 30)
self.chaojiying = Chaojiying_Client(USER, PASSWORD, ID)
def open(self):
'''
打开网页,最大化窗口,点击密码登录
:return: None
'''
self.browser.get('https://mail.126.com/')
self.browser.maximize_window()
self.browser.find_element_by_id("switchAccountLogin").click()
def quit(self):
'''
关闭浏览器
:return: None
'''
self.browser.quit()
def submit_user(self,username,password):
'''
提交账号和密码
:return: None
'''
time.sleep(0.5)
self.browser.find_element_by_name("email").clear()
self.browser.find_element_by_name("email"