python截圖

WebDriver中實現對特定的Web區域截圖方法--Python實現php

1、在自動化測試中,遇到驗證碼的處理方法有如下兩種:html

一、找開發去掉驗證碼或者使用萬能驗證碼java

二、使用OCR自動識別python

這裏,方法一隻要和研發溝通就行。web

使用pytesseract自動化識別,通常識別率不是過高,處理通常簡單驗證碼仍是沒問題,例以下面這種驗證碼:瀏覽器

使用很是簡單,只需下面幾步:函數

import pytesseract
from PIL import Image
image=Image.open('new.jpg')
vcode=pytesseract.image_to_string(image)
print vcode

2、但在使用python自動化測試中會遇到一個難點,驗證碼怎麼獲取,python的webdriver API沒有這樣接口。baidu查之,網上只有java的解決方案,python的貌似沒有,在這就將python的解決方案寫下,以供須要的人蔘考:測試

  解決方法:url

  從頁面獲取驗證碼的座標值得,使用PIL的Image模塊,截取特定的區域,代碼以下:code

思路:將web節目截圖保存-->定位到驗證碼座標-->從截圖中再進行驗證碼位置的截圖

from PIL import Image
import pytesseract
from selenium import webdriver

url='http://xxxxx.com'
driver = webdriver.Chrome()
driver.maximize_window()  #將瀏覽器最大化
driver.get(url)
driver.save_screenshot('f://aa.png')  #截取當前網頁,該網頁有咱們須要的驗證碼
imgelement = driver.find_element_by_xpath('//img[@src="rand!loginRand.action"]')  #定位驗證碼
location = imgelement.location  #獲取驗證碼x,y軸座標
size=imgelement.size  #獲取驗證碼的長寬
rangle=(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height'])) #寫成咱們須要截取的位置座標
i=Image.open("f://aa.png") #打開截圖
frame4=i.crop(rangle)  #使用Image的crop函數,從截圖中再次截取咱們須要的區域
frame4.save('f://frame4.jpg')
qq=Image.open('f://frame4.jpg')
text=pytesseract.image_to_string(qq).strip() #使用image_to_string識別驗證碼
print text

參考模塊:

Image模塊:http://effbot.org/imagingbook/image.htm#tag-Image.Image.crop

pytesseract識別驗證碼方法:http://www.waitalone.cn/python-php-ocr.html

 

備註: PIL已經中止更新,能夠將PIL包名換成pillow

pip install pillow 

 

 

轉自 :http://www.myexception.cn/web/2040513.html

相關文章
相關標籤/搜索