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面向对象编程中的类和对象学习教程
Mar 30 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
Python异常处理操作实例详解
Aug 28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python3爬虫怎样构建请求header
Dec 23 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
phpwind中的数据库操作类
2007/01/02 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
React diff算法的实现示例
2018/04/20 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Python如何获取文件路径/目录
2020/09/22 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
游戏商店:Eneba
2020/04/25 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
大学生自我鉴定评语
2014/01/27 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
小学生倡议书范文
2014/05/13 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
大学生实习证明
2015/06/16 职场文书
九年级化学教学反思
2016/02/22 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android