python 图片解密:base64
引言
小编在在一些批量下载图片的爬虫程序的过程中,发现了一种被base64加密的图片,今天一个京东案例带大家彻底掌握base64加密破解,建议大家先看视频再去研究代码,思路才是最重要的。
base64加密解密
1、介绍:base64是一种经常使用的加密方式,在一些项目中一些图片数据就是通过base64加密传输的,base64是一种防君子不防小人的加密方式,生产的编码可逆生成的编码都是ascii编码,python有一个专门的内置模块来实现base64算法,就是base64模块;
2、优点:速度快,ascii编码人眼不可理解;
3、编码非常长,且极易被破解,仅用于加密非关键信息;
base64模块用法
import base64image = '需要base64加密的图片数据'
# base64加密图片数据
image_base64 = base64.b64encode(image)
# 解密base64加密的图片
image_ = base64.b64decode(image_base64 )
案例一:下载京东登录验证码图片
辅助视频:
京东滑块图片和缺口图片XPATH定位分析
我们借助WEB自动化测试工具selenium来完成案例一,我们来开发测试用例,代码如下:
如果对selenium的使用不是很会的小伙伴,可以去看我们另外几篇基于selenium的爬虫博客,链接如下:
1、python selenium爬虫入门案例day01:中国图片库
2、python selenium爬虫入门案例day02:珠宝匠
3、python selenium爬虫入门案例:day03:Foodiesfeed
# coding:utf-8
import random
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By# 京东网址
url = "https://www.jd.com/"
# 打开浏览器
driver = webdriver.Chrome()
# 显示休眠
driver.implicitly_wait(random.randint(3, 8))
# 访问京东官网
driver.get(url)
# 浏览器窗口最大化
driver.maximize_window()
# 定位超链接使用LINK_TEXT
driver.find_element(By.LINK_TEXT, '你好,请登录').click()
driver.find_element(By.LINK_TEXT, '账户登录').click()
# 定位输入框使用XPATH
driver.find_element(By.XPATH, '//*[@id="loginname"]').send_keys("13437246893")
driver.find_element(By.XPATH, '//*[@id="nloginpwd"]').send_keys("123456789lhz.")
driver.find_element(By.LINK_TEXT, '登 录').click()slider_ = driver.find_element(By.XPATH,'//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[2]/img')
verification_ = driver.find_element(By.XPATH,'//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[1]/img')
# get_attribute("获取标签属性值")
# 将data:image/png;base64,替换掉的原因是,这部分是图片头部,不是图片内容
# image指图片,png指图片格式,base64指加密算法,后面剩余部分才是加密后的图片数据
slider_base64 = slider_.get_attribute("src").replace("data:image/png;base64,", "")
# 将被base64加密过的图片解密
slider = base64.b64decode(slider_base64)
# 保存滑块图片
with open(file="slider.png", mode="wb") as f1:f1.write(slider)
# get_attribute("获取标签属性值")
verification_base64 = verification_.get_attribute("src").replace("data:image/png;base64,", "")
# 将被base64加密过的图片解密
verification = base64.b64decode(verification_base64)
# 保存缺口验证码图片
with open(file="verification.jpg", mode="wb") as f2:f2.write(verification)
视频讲解中,测试写出来的定位滑块和缺口图片的XPATH代码
这个xpath用法的原理就是:定位src属性值包含指定字符串的img标签
//img[contains(@src, 'CCZx8=')]
//img[contains(@src, 'ggllk')]
