python+selenium识别验证码并登录的示例代码


Posted in Python onDecember 21, 2017

由于工作需要,登录网站需要用到验证码。最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码。直到这周五,才想起这事来,昨天顺利的解决了。

下面正题:

python版本:3.4.3

所需要的代码库:PIL,selenium,tesseract

先上代码:

#coding:utf-8
import subprocess
from PIL import Image
from PIL import ImageOps
from selenium import webdriver
import time,os,sys
def cleanImage(imagePath):
  image = Image.open(imagePath)  #打开图片
  image = image.point(lambda x: 0 if x<143 else 255) #处理图片上的每个像素点,使图片上每个点“非黑即白”
  borderImage = ImageOps.expand(image,border=20,fill='white')
  borderImage.save(imagePath)

def getAuthCode(driver, url="http://localhost/"):
  captchaUrl = url + "common/random"
  driver.get(captchaUrl) 
  time.sleep(0.5)
  driver.save_screenshot("captcha.jpg")  #截屏,并保存图片
  #urlretrieve(captchaUrl, "captcha.jpg")
  time.sleep(0.5)
  cleanImage("captcha.jpg")
  p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout=\
             subprocess.PIPE,stderr=subprocess.PIPE)
  p.wait()
  f = open("captcha.txt", "r")
  
  #Clean any whitespace characters
  captchaResponse = f.read().replace(" ", "").replace("\n", "")
  print("Captcha solution attempt: " + captchaResponse)
  if len(captchaResponse) == 4:
    return captchaResponse
  else:
    return False

def withoutCookieLogin(url="http://org.cfu666.com/"):
  driver = webdriver.Chrome()
  driver.maximize_window()
  driver.get(url)
  while True:   
    authCode = getAuthCode(driver, url)
    if authCode:
      driver.back()
      driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").clear()
      driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").send_keys("orgCode")
      driver.find_element_by_xpath("//input[@id='account' and @name='username']").clear()
      driver.find_element_by_xpath("//input[@id='account' and @name='username']").send_keys("username")
      driver.find_element_by_xpath("//input[@type='password' and @name='password']").clear()
      driver.find_element_by_xpath("//input[@type='password' and @name='password']").send_keys("password")       
      driver.find_element_by_xpath("//input[@type='text' and @name='authCode']").send_keys(authCode)
      driver.find_element_by_xpath("//button[@type='submit']").click()
      try:
        time.sleep(3)
        driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a").click()
        return driver
      except:
        print("authCode Error:", authCode)
        driver.refresh()
  return driver
driver = withoutCookieLogin("http://localhost/")
driver.get("http://localhost/enterprise/add/")

怎么获取我们需要的验证码

在这获取验证码的道路上,我掉了太多的坑,看过太多的文章,很多都是教你验证码的识别方法,但是没有说明,怎么获取你当前需要的验证码图片。

我的处理方法是:

1.先用selenium打开你需要的登录的页面地址url1

python+selenium识别验证码并登录的示例代码

2.通过审核元素获取验证码的地址url2(其实最简单的是右键打开新页面)

python+selenium识别验证码并登录的示例代码

3:在url1页面,输入地址url2进入url2页面,然后截屏保存验证码页面

python+selenium识别验证码并登录的示例代码

4:处理验证码得到验证码字符串。然后点击浏览器后退按钮,返回url1登录页面

5:输入登录需要的信息和验证码

python+selenium识别验证码并登录的示例代码

6:点击登录

7:验证登录后的页面,判断是否成功,若不成功则需要重新1-7的操作。

为了保护公司的信息,这个页面是我本地搭的服务,我在伯乐在线注册页面进行测试过这个验证码获得方法,可以通过。(这个验证码的处理方法,仅限验证码背景是像素点,若验证码有横线需额外处理。)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常见文件操作的函数示例代码
Nov 15 Python
python发布模块的步骤分享
Feb 21 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python实现字典的key和values的交换
Aug 04 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
一百多行python代码实现抢票助手
Sep 25 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
Python matplotlib实时画图案例
Apr 23 Python
Python道路车道线检测的实现
Jun 27 Python
Python 数据可视化之Seaborn详解
Nov 02 Python
python实现随机森林random forest的原理及方法
Dec 21 #Python
python编写分类决策树的代码
Dec 21 #Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 #Python
用Python写王者荣耀刷金币脚本
Dec 21 #Python
python使用Apriori算法进行关联性解析
Dec 21 #Python
python实现kMeans算法
Dec 21 #Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 #Python
You might like
php轻松实现文件上传功能
2016/03/03 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
python实现排序算法
2014/02/14 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python实现朴素贝叶斯算法
2018/11/19 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
python logging模块的使用详解
2020/10/23 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
建筑人员岗位职责
2013/12/25 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
毕业生求职信范文
2014/06/29 职场文书
安全责任书怎么写
2014/07/28 职场文书
运动会通讯稿50字
2015/07/20 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript