通过selenium+验证码识别实现自动登录

  • 通过selenium以及第三方打码工具破解验证码,实现自动化登录,但是这还只是比较简单的验证码,类似于只有字母和数字的集合,其他类型的验证码还要再尝试一下。
#!/usr/bin/env python
# coding:utf-8
#####超级鹰的使用模板类
import requests
from hashlib import md5

class Chaojiying_Client(object):

    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf8')
        self.password = md5(password).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()
 #####自动化登录部分
import time
from selenium import webdriver
from PIL import Image
import os
#创建一个浏览器对象
chromedriver = "E:\chromeDriver\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
browser = webdriver.Chrome(chromedriver,chrome_options=option)
browser.maximize_window()
#打开登录页面
browser.get('http://www.chaojiying.com/user/login/')
#定位到账号的输入框
id_input = browser.find_element_by_xpath('//input[@name="user"]')
time.sleep(2)
id_input.send_keys('*********')
#定位到密码输入框,输入密码
pw_input = browser.find_element_by_xpath('//input[@name="pass"]')
pw_input.send_keys('*********')
#"""识别验证码"""
browser.save_screenshot('login.png')
#获取验证码元素的位置
yzm = browser.find_element_by_xpath('//img[@src="/include/code/code.php?u=1"]')
#获取验证码的坐标
loc = yzm.location
#获取验证码图片的宽高
size = yzm.size
print("坐标:",loc)
print("宽高",size)
#获取验证码位置(此处的定位有问题,所以只能自己手动调整位置)
left = loc['x']+220
top = loc['y']+70
# left = 1145
# top = 501
bottom = top+size['height']
right = left+size['width']+50
#打开页面截图
page_pic = Image.open('login.png')
yzm_pic = page_pic.crop((left,top,right,bottom))  #这里需要传入一个元组
yzm_pic.save('yzm.png')
with open('yzm.png','rb') as f:
    pic1 = f.read()
yz = Chaojiying_Client(username='haotaijun', password='hao123.', soft_id='916432')
res = yz.PostPic(pic1,1902)  #1902 验证码类型
print('识别的结果:',res)
res = res['pic_str']
print(res)
browser.find_element_by_xpath('//input[@name="imgtxt"]').send_keys(res)
time.sleep(5)
browser.find_element_by_xpath('//input[@value="登录"]').click()
time.sleep(5)
browser.close()

你可能感兴趣的:(爬虫,数据分析方法)