1.图片报文转换了解
先上图:
像遇到上面的这种图片,通过接口可以获取返回的数据。返回该大串响应报文是图片的Base64编码,可转换成图片。可以通过http://tool.chinaz.com/tools/imgtobase/
该网站进行测试,如图:
第一部分是固定的,不需要变换。第二部分是通过fiddler抓包获取的数据,可以拿到数据后进行转换,测试一下。
上面的内容只是了解报文与图片之间的转换逻辑。下面进行操作。
2.报文转换成图片
可以发现响应报文是Base64转换的,然后就可以用python
的base64
库来解决。例如返回的报文如下:
data = {
"background": 'SSDJKSJDJKSJKSJJDSJJDXXXXXXXXXXXXXXX',
"slider": 'xxxskskkleklrekrkjejkredsdsddsdsdsdsdsdss'
}
获取道数据后,用python 转换成图片background.png
,slider.png
background = data['background'] # 获取数据
slider = data['slider']
with open('background.png', 'wb') as f: # background.png 为图片的名称,注意路径那些
f.write(base64.b64decode(background))
with open('slider.png', 'wb') as f:
f.write(base64.b64decode(slider))
然后查看background.png
,slider.png
图片是这样的:
3.获取滑块X轴坐标
部分代码如下
全部代码点击下载
# -*- coding: utf-8 -*-
class SlideCrack(object):
def __init__(self, gap, bg):
"""
init code
:param gap: 缺口图片
:param bg: 背景图片
"""
self.gap = gap
self.bg = bg
@staticmethod
def image_edge_detection(img):
edges = cv2.Canny(img, 100, 200)
return edges
def discern(self):
img1 = self.clear_white(self.gap)
img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
slide = self.image_edge_detection(img1)
back = cv2.imread(self.bg, 0)
back = self.image_edge_detection(back)
slide_pic = cv2.cvtColor(slide, cv2.COLOR_GRAY2RGB)
back_pic = cv2.cvtColor(back, cv2.COLOR_GRAY2RGB)
x = self.template_match(slide_pic, back_pic)
# 输出横坐标, 即 滑块在图片上的位置
return x
if __name__ == "__main__":
# 滑块图片
image1 = "slider.png"
# 背景图片
image2 = "background.png"
sc = SlideCrack(image1, image2)
x = sc.discern()
4.验证x
最后拿获取到的X轴去postman验证是否可以。
经过多次测试,脚本return
的x
应该比实际值大2~3
,所有用postman
去请求时应该用 (x-2)
的值去请求。