对于一些动态生成的验证码 比如aspx格式的网页,我们访问验证码的图片的url是无法直接将验证码图片下载下来的 所以我们用Selenium的save_screenshot截屏(全屏)方法配合PIL处理图片的crop裁剪方法来做
自动定位
网上很多方法是自动定位,通过获取验证码的长宽和位置,在浏览器全屏截图中裁剪出验证码的部分 类似如下:
size = imgelement.size
print(size)
rangle = (int(location['x']+110), int(location['y']+60), int(location['x'] + size['width']+165),
int(location['y'] + size['height']+90))
看起来很美妙,但实际上要最大化屏幕、调分辨率什么的,对我一个mac用户非常不友好
手动定位
于是转念一想,因为每张全屏截图像素大小是一样的,即几千*几千,直接手动定位不就好了吗
中间的一段代码 补上调用的库
from selenium import webdriver from PIL import Image
driver.save_screenshot('code1.png')
left = 1772
top = 1235
right = 1926
bottom = 1277
a = Image.open("code1.png")
im = a.crop((left, top, right, bottom))
im.save('code2.png')
time.sleep(1)
其实就是找到code1.png(全屏截图)中,验证码所在区域的左上点、右下两个点的坐标,总共四个数((x1,y1)、(x2,y2))(即图中红框) 各位可以搜“如何提取图片上任意点坐标”,win的画图工具好像有,ps啥的都有,但我用的mac,直接拿matlab找到
|