Python屏幕抓取点击HTML5图像地图中特定图像
在一个使用了图像地图的html5页面中,我想用python(或者Perl、Ruby、C)来爬取这个页面,找到一个特定的图片(这些图片之间有透明区域分隔),并在找到这个图片时点击它。这些图片每次都是一样的。有什么好的方法可以实现这个目标呢?
编辑:对于法语读者,这个技巧已经实现,可以查看http://www.sputnick-area.net/?p=572
2 个回答
0
我想这些图片都是一样的,所以数字6的位置是固定的,并且被同一个标签覆盖。此时点击这个图片会打开在href属性中定义的链接。所以你可以点击那个链接。
1
Sikuli 可能是个很好的选择。它是基于 Jython 的,所以可以用 Python 或 Java 的工具来扩展。
Sikuli 是一种视觉技术,可以用来自动化和测试图形用户界面(GUI),它是通过使用图片(截图)来实现的。Sikuli 包括 Sikuli Script,这是一个用于 Jython 的可视化脚本 API,还有 Sikuli IDE,这是一个集成开发环境,可以让你轻松地用截图编写可视化脚本。
编辑
如果图片像你例子中的那样清晰,就可以很容易地匹配,而不需要太多的图像处理。在这里我使用了 matplotlib(小图像必须是大图像的精确裁剪版本)。
目标图像(65x173):
要匹配的图像(29x29):
In [48]: import matplotlib.pyplot as pl
In [49]: target = pl.imread("r.png")
In [50]: match = pl.imread("xx.png")
In [51]: target.shape
Out[51]: (65, 173, 4)
In [52]: match.shape
Out[52]: (29, 29, 4)
In [53]: for y in range(2):
....: for x in range(5):
....: sub_x = 36*x
....: sub_y = 36*y
....: sub_target = target[sub_y:sub_y+29,sub_x:sub_x+29,:]
....: if (match == sub_target).all():
....: print "Match found between (%d,%d) and (%d,%d)" % (sub_x,sub_y,sub_x+29,sub_y+29)
....:
Match found between (72,0) and (101,29)