使用 Image 截取指定區域的圖片截取不到位

想使用爬蟲模擬登陸12306 ,但是有驗證碼,需要識別驗證碼。

實現步驟

1.把 登陸整個界面 截圖。

2.找到 驗證碼圖片區域在整個截圖的在區域,截取驗證碼圖片

3.對驗證碼圖片進行識別

在第2步驟總是截取不到對應的區域,座標也是正確的,代碼如下:

from selenium  import webdriver
import time
from PIL import Image

#登陸頁面
url = 'https://kyfw.12306.cn/otn/login/init'

#
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
#截圖登陸頁面保存爲123.png
driver.save_screenshot('123.png')
#找到驗證碼圖片
imgitem=driver.find_element_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img')
#找到驗證碼圖片左上角座標點(像素點)
location = imgitem.location
#找到驗證碼圖片尺寸 寬和高
size = imgitem.size
print(location) #{'x': 276, 'y': 274}
print(size)#{'height': 190, 'width': 293}
#找到驗證碼圖片在123.png圖片中佔的區域
tangle=(location['x'],location['y'],location['x']+size['width'],location['y']+size['height'])
print(tangle)#(276, 274, 569, 464)
#打開123.png圖片
img = Image.open('123.png')
#在123.png圖片上 截取驗證碼圖片
frame = img.crop(tangle)
#保存
frame.save('a.png')
driver.quit()

截取的123.png如下

截取的驗證碼圖片a.png如下:

截取的區域不完整,就懷疑自己電腦分辨率啥的有問題,

結果發現縮放與佈局不是100%,改爲100%就可以了,在運行代碼就可以了。

 

如果佈局改爲100% 不行的話,在更下下分辨率,我試了試,分辨率也會有影響

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章