第九关只有一幅图,上面有一些黑点。网页名字叫:connect the dots。可能是要把这些点连起来。
查看源代码,果然有两个整数集合 first 和 second。并且有个提示:first+second=?。这两个集合很可能就是点的坐标。
第一步,把这两个集合提取出来。本来我想跟以前一样,用 urllib 模拟登陆然后用正则表达式提取。结果发现需要输入用户名和密码(上一关得到的)。用 FireFox 分析了半天没得到 POST 消息的格式,就放弃了,直接把页面下载下来,然后打开 htm 文件来得到结果:
fobj = open(r'C:UsersLeoDesktopconnect the dots.htm') page = fobj.read() fobj.close() transTable = string.maketrans('','') delSym = ' ' firstRes = re.findall('first:s+(.*)s+second', page, re.S)[0].translate(transTable, delSym).split(',') firstList = [int(i) for i in firstRes] secondRes = re.findall('second:s+(.*)s+-->', page, re.S)[0].translate(transTable, delSym).split(',') secondList = [int(i) for i in secondRes]
得到两个列表后,就去查询 PIL 库有什么函数可以画线,得知 ImageDraw 模块的 line() 方法可以画线,而且输入参数刚好是列表,就试了一下:
img = Image.open(r'C:UsersLeoDesktopgood.jpg') draw = ImageDraw.Draw(img) draw.line(firstList, fill = '#FF0000') draw.line(secondList, fill = '#FF0000') img.show()
马上得到了结果:
可以看到图上面出现了一头牛,想一下牛的单词,立马想到芝加哥公牛队,就把 url 改为 bull,进入下一关:http://www.pythonchallenge.com/pc/return/bull.html