python selenium+PIL+免验证码登陆

python爬虫 专栏收录该内容
2 篇文章 0 订阅

最近在学习python的验证码处理这一块,学了点,想着做个小实践,在这里,我找了一个网址来模拟一键登录过程。
首先来放一下动图感受一下:
登录动态图
O(∩_∩)O哈哈~,当时刚做完的时候觉得好神奇的样子,小白级别,心情望请谅解~~
首先,所需工具如下:
1. Python 3.6
2. IDE Pycharm 5.0.3
3. 谷歌浏览器:47.0.1
4. Selenium PIL
5. pytesseract

如果学过一点python爬虫的童靴,在输入验证码之前肯定都是没问题的,在输入验证码这一块,我是采取了先对整个页面进行截屏,然后截取含有验证码的图片,进行识别,将识别的字母及数字插入到验证码输入那一栏。那么难点就是如果确定截取含有验证码图片的坐标,下面将来详细说明:
将截屏的图保存到本地,然后用电脑自带的附件–>画图打开,指针呈十字虚状,当鼠标在页面移动的时候,页面左下角对应的像素也一直在改变,然后将鼠标指针停留在验证码图片的左上角,此时记下页面左下角对应的像素值,即我们要截取图片的左上角的坐标,对应box=(x1,y1,x2,y2),对应x1和y1的值,如图(一),

图一

再然后将鼠标指针停留在验证码图片的右下角,此时记下页面左下角对应的像素值,即我们所要截取图片的右下角的坐标,对应box=(x1,y1,x2,y2),对应x2和y2的值,如图(二)

图二

然后对截取的图片进行识别,用pytesseract库中的image_to_string函数进行识别即可,最后附上完整代码:

# usr/bin/env/python
# -*- coding:utf-8 -*-
# time:2017/12/01

__author__ = 'LazyGirl_81'


from selenium import webdriver
import pytesseract
from PIL import Image

driver = webdriver.Chrome()
driver.get('http://pay.hust.edu.cn')
name = driver.find_element_by_id("txt_yhm")
name.send_keys("M201571151")
mima = driver.find_element_by_id('txt_pwd')
mima.send_keys("06641X")
driver.get_screenshot_as_file('image1.png')
im = Image.open('image1.png')
box = (1155,477,1265,527)
region = im.crop(box)
region.save("image2.jpg")
code_text = pytesseract.image_to_string(Image.open('image2.jpg'), lang='chi_sim')
code = driver.find_element_by_id("txt_yzm")
code.send_keys(code_text)
denglu = driver.find_element_by_id('ImageButton1')
denglu.click()

因为做这个一时兴起,做了做就拿来写了,在此处也没考虑说如果验证码识别错误了之后的做法,所以这个代码是需要完善的,后续自己会补充上去,也希望路过的大神多多指教。

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值