selenium (八) 图片验证码输入

1.需要安装Image 模块,安装时会自动帮我们安装:Installing collected packages: pytz, django, pillow, Image 关联的包
pip install Image

2.安装pytesseract
pip install pytesseract


3.安装tesseract-ocr识别引擎
Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。
下载地址:https://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe
安装好后,需要在D:\Tools\Python27\Lib\site-packages\pytesseract\pytesseract.py下将
tesseract_cmd = 'tesseract'
改为:
tesseract_cmd="D:\\Tools\\Tesseract-OCR\\tesseract.exe"也就是Tesseract-OCR的安装路径,
或将该路径添加到环境变量中.要不然调用的时候,会报如下错误:

自己试了几次,这个pytesseract的识别率太低了。经常识别不出图片验证码的内容

第一种方法:

#-*-encoding:utf-8-*-
from selenium import webdriver
from PIL import Image,ImageGrab
from time import sleep
import pytesseract


driver=webdriver.Chrome()
driver.get("http://localhost:8081/tshop/index.php?con=simple&act=login")

def click_register_link():
	driver.find_element_by_link_text(u"立即注册").click()
	sleep(0.5)

	verifyCode=driver.find_element_by_xpath('//*[@id="captcha_img"]').rect  #获取二维码在页面的位置
	start_x=int(verifyCode["x"])
	start_y=int(verifyCode["y"])
	end_x=verifyCode["width"]+start_x   #开始坐标+结束坐标点
	end_y=verifyCode["height"]+start_y  #开始坐标+结束坐标点
	cut_img=(start_x,start_y,end_x,end_y)

	#截取注册页面图片,并保存到test目录下page.png
	driver.get_screenshot_as_file("F:\\testAndStudy\\test\\page.png")

	#打开test目录下,注册页面的图片
	im = Image.open("F:\\testAndStudy\\test\\page.png")

	#根据上面获取到的图片验证码在页面的坐标,将图片验证码剪切出来,保存为verifyCode.png
	region = im.crop(cut_img)
	region.save("F:\\testAndStudy\\test\\verityCode.png")

	#打开截取后的图片验证码
	verityCode = Image.open("F:\\testAndStudy\\test\\verityCode.png")
	sleep(1)

	#调用Pytesseract的image_to_string()方法识别二维码图片,并复制到code中
	code = pytesseract.image_to_string(verityCode)
	print code

if __name__=="__main__":
	click_register_link()

  

第二种方法:

#-*-encoding:utf-8-*-
from pytesser import *
from selenium import webdriver
from PIL import Image,ImageGrab,ImageEnhance
from time import sleep
import pytesseract


driver=webdriver.Chrome()
driver.get("http://localhost:8081/tshop/index.php?con=simple&act=login")

def click_register_link():
	driver.find_element_by_link_text(u"立即注册").click()
	sleep(0.5)

	verifyCode=driver.find_element_by_xpath('//*[@id="captcha_img"]').rect  #获取二维码在页面的位置
	start_x=int(verifyCode["x"])
	start_y=int(verifyCode["y"])
	end_x=verifyCode["width"]+start_x   #开始坐标+结束坐标点
	end_y=verifyCode["height"]+start_y  #开始坐标+结束坐标点
	cut_img=(start_x,start_y,end_x,end_y)

	#截取注册页面图片,并保存到test目录下page.png
	driver.get_screenshot_as_file("F:\\testAndStudy\\test\\page.png")

	#打开test目录下,注册页面的图片
	im = Image.open("F:\\testAndStudy\\test\\page.png")

	#根据上面获取到的图片验证码在页面的坐标,将图片验证码剪切出来,保存为verifyCode.png
	region = im.crop(cut_img)
	region.save("F:\\testAndStudy\\test\\verityCode.png")


def print_verityCode():
	#图片验证码处理及打印内容
	sleep(1)
	verityCode = Image.open("F:\\testAndStudy\\test\\verityCode.png")

	#图片处理
	im=Image.open("F:\\testAndStudy\\test\\verityCode.png")
	imgry=im.convert("L")
	# imgry.show()

	threshold = 130
	table=[]
	for i in range(256):
		if i < threshold:
			table.append(0)
		else:
			table.append(1)
	# print table
	out = imgry.point(table,"1")
	out.show()

	#打印验证码内容
	code1 = pytesser.image_file_to_string("F:\\testAndStudy\\test\\verityCode.png")
	code = pytesser.image_to_string(out)

	print code1
	print code

if __name__=="__main__":
	click_register_link()
	print_verityCode()

  

猜你喜欢

转载自www.cnblogs.com/JcHome/p/10809133.html