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内置数据类型详解
Aug 18 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
Python实现的爬虫功能代码
Jun 24 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
解析python实现Lasso回归
Sep 11 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
php 文章调用类代码
2011/08/11 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
脚本收藏iframe
2006/07/21 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
CLR与IL分别是什么含义
2016/08/23 面试题
日语系毕业生推荐信
2013/11/11 职场文书
实习教师自我鉴定
2013/12/09 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
高三霸气励志标语
2014/06/24 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python