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解析xml文件实例分享
Dec 04 Python
Python去除列表中重复元素的方法
Mar 20 Python
python中global用法实例分析
Apr 30 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python Django view 两种return的实现方式
Mar 16 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
python 实现Requests发送带cookies的请求
Feb 08 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
香妃
2021/03/03 冲泡冲煮
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
jQuery 表格插件整理
2010/04/27 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
vue实现列表拖拽排序的功能
2020/11/02 Javascript
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python工程师面试必备25条知识点
2018/01/17 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python通过链接抓取网站详解
2019/11/20 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
暑期实习鉴定
2013/12/16 职场文书
中药学专业求职信
2014/05/31 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
小学生暑假安全公约
2015/07/14 职场文书
赞助商致辞
2015/07/30 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
Django实现聊天机器人
2021/05/31 Python