Python Selenium 保存 canvas 图片


今天有个小需求,需要把 GEETEST 验证码图片保存下来,但是 GEETEST 的验证码图片在后台显示是乱序的,而我需要对比正常的图片,如图:

乱序图片 正常图片

尝试了几个办法都不好使,网上也没有找到有效方法,最后想,既然能在页面上正常显示,那能不能直接把标签内容直接保存成图片呢?

然后 F12 大法,找到了该图片是 <canvas> 显示的,至于如何用 Python 和 Selenium 保存 canvas 为图片同样没有找到现成的方法,唯一有效的信息就是知道了 Selenium 能执行 JS 代码。

于是乎,尝试了下能否将 JS 执行结果跑出来,结果还真行~

主要代码如下:

from selenium import webdriver

driver = webdriver.Chrome()
# 通过 toDataURL() 方法获取图片 base64 数据,并 return
getImgJS = 'return document.getElementsByClassName("' + class_name + '")[0].toDataURL("image/png");'
# 执行 JS 代码并拿到图片 base64 数据
bg_img = driver.execute_script(getImgJS)
# 去除类型,只要数据部分
bg_img = bg_img[bg_img.find(',') + 1:]

拿到图片数据剩下的就好办啦~

只要将数据转化为图片保存到本地就可以了,这里用的是 base64 包

import base64

img_data = base64.b64decode(bg_img)
file = open('bg.png', 'wb')
file.write(img_data)
file.close()

这样就大功告成啦~


文章作者: CrazyBunQnQ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 CrazyBunQnQ !
 上一篇
Python Selenium 破解滑块验证码最新版 Python Selenium 破解滑块验证码最新版
本文破解方式截止到 2018 年 9 月 2 日的 GEETEST 有效,本文不定期更新。 有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展。为了防止爬虫自动注册,批量生成垃圾账号,几乎所有网站的注册页面都会
2018-09-02
下一篇 
Oracle 实用 SQL Oracle 实用 SQL
记录一些不经常用但是需要的时候很有用的查询语句,不定期更新
2018-07-22
  目录