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中的条件判断语句基础学习教程
Feb 07 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
Python装饰器简单用法实例小结
Dec 03 Python
python实现Flappy Bird源码
Dec 24 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
python 负数取模运算实例
Jun 03 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
详解Python内置模块Collections
Mar 22 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制作简单的内容采集器的原理分析
2008/10/01 PHP
php 生成WML页面方法详解
2009/08/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php上传大文件设置方法
2016/04/14 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
php跨域调用json的例子
2013/11/13 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
使用Python生成url短链接的方法
2015/05/04 Python
理解python中生成器用法
2017/12/20 Python
python常用数据重复项处理方法
2019/11/22 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
超市中秋节促销方案
2014/03/21 职场文书
公司担保书格式范文
2014/05/12 职场文书
离职证明标准格式
2014/09/15 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
公务员个人总结
2015/02/12 职场文书
小学校园广播稿
2015/08/18 职场文书
Python基本知识点总结
2022/04/07 Python
Java 数组的使用
2022/05/11 Java/Android