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读取Android permission文件
Nov 01 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python实现的简单文件传输服务器和客户端
Apr 08 Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
NumPy 数组使用大全
Apr 25 Python
python数据归一化及三种方法详解
Aug 06 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
如何通过python计算圆周率PI
Nov 11 Python
Python实现对齐打印 format函数的用法
Apr 28 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简介
2006/10/09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python配置mysql的教程(推荐)
2017/10/13 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python 表格打印代码实例解析
2019/10/12 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
自荐信格式范文
2013/10/07 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
家具厂厂长岗位职责
2014/01/01 职场文书
经典大学生求职信范文
2014/01/06 职场文书
年度考核自我鉴定
2014/02/02 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
环保倡议书格式范文
2014/05/14 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
工作犯错保证书
2015/05/11 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
2016公司年会主持词
2015/07/01 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
python爬虫--selenium模块
2021/03/31 Python
索尼ICF-5900W收音机测评
2022/04/24 无线电