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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值