想使用爬虫模拟登陆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% 不行的话,在更下下分辨率,我试了试,分辨率也会有影响