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中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python装饰器简单用法实例小结
Dec 03 Python
Python的高阶函数用法实例分析
Apr 11 Python
Python帮你识破双11的套路
Nov 11 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
Python3实现建造者模式的示例代码
Jun 28 Python
详解python metaclass(元类)
Aug 13 Python
python利用faker库批量生成测试数据
Oct 15 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
JS获取整个页面文档的实现代码
2011/12/15 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
Python实现网站注册验证码生成类
2017/06/08 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python中的句柄操作的方法示例
2019/06/20 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
python实现小世界网络生成
2019/11/21 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
windows支持哪个版本的python
2020/07/03 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
高二物理教学反思
2014/02/08 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
工程师岗位职责规定
2014/02/26 职场文书
驻村工作简报
2015/07/20 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS