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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python 调用HBase的简单实例
Dec 18 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
python递归法解决棋盘分割问题
Jul 17 Python
python实现的config文件读写功能示例
Sep 24 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
初学者学习Python好还是Java好
May 26 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 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/05 新手入门
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
js实现简单的购物车有图有代码
2014/05/26 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python复制文件到指定目录的实例
2018/04/27 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
保险公司晨会主持词
2014/03/22 职场文书
2014年党支部学习材料
2014/05/19 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP
详解SQL报错盲注
2022/07/23 SQL Server