python爬虫之古诗文网中验证码的识别并登录----第三方平台

目标网站:古诗文网

目标网址:http://so.gushiwen.org/user/collect.aspx

任务要求:

(1)通过selenium的方式模拟该网站的登录,并成功输入用户名和密码;

(2)保存验证码图片,并使用输入式验证码识别的方式识别验证码的文字,获取后输入到输入框中,

(3)验证登录是否成功。

由于OCR库识别成功率较低,这里我门借助超级鹰打码平台(自选平台也可)。
超级鹰平台地址:http://www.chaojiying.com/
ps:注册账号,关注微信号送1000题分

连接超级鹰的代码,详情获取请看我的另一篇博客python验证码识别如何连接第三方平台-------超级鹰

import requests
from hashlib import md5

class Chaojiying_Client(object):

    def __init__(self, username, password, soft_id):
        self.username = username
        # todo:更改点一
        self.password = md5(password.encode("utf-8")).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()

古诗文网登录代码如下:
PS:运行此代码时,应将电脑分辨率调为100%,否则会导致截取的验证码图片有偏差。

from selenium import webdriver
import time

base_url = 'http://so.gushiwen.org/user/collect.aspx'
browser = webdriver.Chrome()
browser.maximize_window()
browser.implicitly_wait(10)
browser.get(base_url)

# 登录页面截图
browser.save_screenshot("D:/pic.png")

# 获取图片验证码坐标
code_ele = browser.find_element_by_css_selector('#imgCode')
print("验证码的坐标为:", code_ele.location)
print("验证码的大小为:", code_ele.size)

# 图片4个点的坐标位置
x = code_ele.location['x']
y = code_ele.location['y']
right = code_ele.size['width']+x
down = code_ele.size['height']+y
image = Image.open('D:/pic.png')

# 截取验证码图片
code_image = image.crop((x,y,right,down))
code_image.save('D:/pic1.png')

# 登录超级平台
chaojiying = Chaojiying_Client('超级鹰账号', '密码', '905121')
im = open('D:/pic1.png', 'rb').read()
text = chaojiying.PostPic(im,2004)['pic_str']
print(text)
    
# 网页操作
username = browser.find_element_by_css_selector('#email').send_keys('古诗文网账号')
password = browser.find_element_by_css_selector('#pwd').send_keys('密码')
time.sleep(2)
# 找到验证码框
code = browser.find_element_by_css_selector('#code').send_keys(text)
time.sleep(2) 
# 登录
submit = browser.find_element_by_css_selector('#denglu')
submit.click()                     
time.sleep(5)

你可能感兴趣的:(python爬虫)