想使用爬蟲模擬登陸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% 不行的話,在更下下分辨率,我試了試,分辨率也會有影響