搞了半天,总算弄出来了,识别率还可以,普通的数字验证码

  1. from selenium import webdriver
  2. from PIL import Image
  3. import pytesseract
  4. import PIL.ImageOps
  5. import time
  6.  
  7. driver = webdriver.Chrome()
  8.  
  9. url = ''
  10. driver.implicitly_wait(10)
  11. driver.get(url)
  12. driver.find_element_by_xpath('//*[@id="1_5"]').click() # 点击第三个
  13. driver.find_element_by_xpath('//*[@id="4_organname"]').send_keys('代理') # 输入代理
  14.  
  15. driver.save_screenshot('f.jpg') # 获取网页的截图
  16. imgelement = driver.find_element_by_id('cx5') # 通过id定位验证码
  17. location = imgelement.location # 获取验证码的x,y轴
  18. size = imgelement.size # 获取验证码的长宽
  19. rangle = (int(location['x']),
  20. int(location['y']),
  21. int(location['x']) + size['width'],
  22. int(location['y']) + size['height'],) # 我们需要截取的验证码坐标
  23.  
  24. i = Image.open('f.jpg')#整张网页
  25. verifycodeimage = i.crop(rangle) # 从网页截图截取验证码区域
  26. verifycodeimage.save('f2.jpg')
  27. im = Image.open('f2.jpg')#验证码区域
  28. im.show()
  29.  
  30. #、二值化处理
  31.  
  32. # 二值化是图像分割的一种常用方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,
  33. # 把小于这个值的像素灰度设为灰度极小值,从而实现二值化(一般设置为0-1)。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值,
  34. # 这里选用比较简单的固定阈值。把像素点大于阈值的设置,1,小于阈值的设置为0。生成一张查找表,再调用point()进行映射。
  35. def initTable(threshold=140):
  36. table = []
  37. for i in range(256):
  38. if i < threshold:
  39. table.append(0)
  40. else:
  41. table.append(1)
  42. return table
  43.  
  44. im = im.convert('L')#转换为灰色图像
  45. binaryImage = im.point(initTable(), '')
  46. im1 = binaryImage.convert('L')
  47. im2 = PIL.ImageOps.invert(im1)
  48. im3 = im2.convert('')
  49. im4 = im3.convert('L')
  50. # 将图片中字符裁剪保留
  51. box = (5, 2, 57, 17)#这个参数改了半天 第一个参数是放大右边的,第二个是放大下边的,第三个参数是左右的大小,数越大越往左边缩,最后一个参数是上下的大小,数越大越往上面缩
  1. region = im4.crop(box) # 将图片字符放大 out = region.resize((120, 38)) testdata_dir_config = '--tessdata-dir "C:\\Program Files\\Tesseract-OCR\\tessdata"' out.show() asd = pytesseract.image_to_string(out, config=testdata_dir_config) # 拿到验证码 textcode = asd.replace(' ', '') # 过滤空格 print(textcode) time.sleep(2) driver.find_element_by_xpath('//*[@id="valcode4"]').send_keys(textcode) # 输入验证码 driver.find_element_by_xpath('//*[@id="tab_1_5"]/ul/li[4]/img[1]').click() # 点击查询

selenium破解数字验证码的更多相关文章

  1. 使用 Python+Selenium 破解滑块验证码

    ​​开发工具 Python版本:3.6.4 相关模块: pillow模块: selenium模块: numpy模块: 以及一些Python自带的模块. 其他: chromedriver 环境搭建 安装 ...

  2. 使用Python + Selenium破解滑块验证码

    在前面一篇博客<使用 Python + Selenium 打造浏览器爬虫>中,我介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全 ...

  3. selenium来识别数字验证码

    用python写一爬虫,需要模拟登陆,并且有数字验证码.通过selenium+pytesseract+PIL可以实现验证码识别并登陆.三大步: 用selenium截屏,此时截取的是整个页面的 用PIL ...

  4. Keras入门(四)之利用CNN模型轻松破解网站验证码

    项目简介   在之前的文章keras入门(三)搭建CNN模型破解网站验证码中,笔者介绍介绍了如何用Keras来搭建CNN模型来破解网站的验证码,其中验证码含有字母和数字.   让我们一起回顾一下那篇文 ...

  5. 使用tesseract-ocr破解网站验证码

    首先我得承认,关注tesseract-ocr, 是冲着下面这篇文章的噱头去的,26行groovy代码破解网站验证码 http://www.kellyrob99.com/blog/2010/03/14/ ...

  6. 使用深度学习来破解 captcha 验证码(转)

    使用深度学习来破解 captcha 验证码 本项目会通过 Keras 搭建一个深度卷积神经网络来识别 captcha 验证码,建议使用显卡来运行该项目. 下面的可视化代码都是在 jupyter not ...

  7. python+selenium破解极验验证登录

    1.前言: 目前很多网站会在正常的账号密码认证之外加一些验证码,以此来明确区分人/机行为,最典型的就是极验滑动验证.(如下图) 这里我们以简单实例说明如何实现自动校验类似验证. 2.步骤: 1)点击验 ...

  8. 文字识别还能这样用?通过Python做文字识别到破解图片验证码

    前期准备 1. 安装包,直接在终端上输入pip指令即可: # 发送浏览器请求 pip3 install requests # 文字识别 pip3 install pytesseract # 图片处理 ...

  9. 用imagemagick和tesseract-ocr破解简单验证码

    用imagemagick和tesseract-ocr破解简单验证码 Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊. 准备工作: 1.安装tesseract-ocr sudo apt ...

随机推荐

  1. 批量上传文件到HDFS的Shell脚本

    在做Hadoop数据挖掘项目的时候,我们第一步是源数据的获取,即把相应的数据放置到HDFS中,以便Hadoop进行计算,手动将文件上传到HDFS中,未免太费时费力,所以我们可以采取像Flume一样的框 ...

  2. 常用的AJAX框架

    你有没有想过设计你的网站像桌面应用程序?幸运的是,使用AJAX,我们可以做到这一点.通过使用AJAX,当我们只想更新网站的一部分(如天气信息或新闻面板)时,我们无需刷新整个页面.这使我们的网络应用看起 ...

  3. 【vijos】1543 极值问题(数论+fib数)

    https://vijos.org/p/1543 好神奇的一题.. 首先我竟然忘记n可以求根求出来,sad. 然后我打了表也发现n和m是fib数.. 严格证明(鬼知道为什么这样就能对啊,能代换怎么就能 ...

  4. Cross compile perl

    Alex Suykov had do some work for this purpose, and my compile script is based on her patch. Steps St ...

  5. 对Linux命令进一步学习

    root@wuheng-virtual-machine:/home/wuheng# ls -ltotal 44drwxr-xr-x 2 wuheng wuheng 4096 Mar  3 01:30 ...

  6. mac 安装memcache扩展问题

    执行php -i 报错: Warning: PHP Startup: memcached: Unable to initialize module Module compiled with build ...

  7. Android无线测试之—UiAutomator UiObject API介绍四

    输入文本与清除文本 一.输入文本与清除文本相关API 返回值 API 描述 boolean setText(String test) 在对象中输入文本 void clearTextField() 清除 ...

  8. iOS-项目archive错误Code Sign error: No matching provisioning profile found: Your build settings UUID:

    解决办法: 1.关闭项目 2.打开xprojiect右键 打开包文件 3.搜索:PROVISIONING_PROFILE 相关删除了

  9. [Go语言]从Docker源码学习Go——if语句和map结构

    if语句 继续看docker.go文件的main函数 if reexec.Init() { return } go语言的if不需要像其它语言那样必须加括号,而且,可以在判断以前,增加赋值语句 语法 I ...

  10. 酷壳用的还是 Wordpress

    WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. http: ...