这么多白框的图片变成下图这种
代码实现如下所示
def hk_chuli(hk_img):
“”"
处理滑块图片
:return:
“”"
image = Image.open(hk_img) # 打开tiff图像
ImageArray = np.array(image)
row = ImageArray.shape[0]
col = ImageArray.shape[1]
先计算所有图片的裁剪范围,然后再统一裁剪并输出图片
x_left = row
x_top = col
x_right = 0
x_bottom = 0
for r in range(row):
for c in range(col):
if ImageArray[row][col][0] < 255 or ImageArray[row][col][0] ==0:
if ImageArray[r][c][0] < 255 and ImageArray[r][c][0] != 0: # 外框有个黑色边框,增加条件判断
if x_top > r:
x_top = r # 获取最小x_top
if x_bottom < r:
x_bottom = r # 获取最大x_bottom
if x_left > c:
x_left = c # 获取最小x_left
if x_right < c:
x_right = c # 获取最大x_right
#print(x_left, x_top, x_right, x_bottom)
cropped = image.crop((x_left - 5, x_top - 5, x_right + 5, x_bottom + 5)) # (left, upper, right, lower)
cropped.save(r".\imgs{}.png".format(“hk_jg”))
print(“[*]处理滑块图片成功”)
现在开始引入带带弟弟(ddddocr)模块计算滑动距离了
模块引用:
import ddddocr知识点:
det = ddddocr.Dddd0cr(det=False,show_ad=False)
#创建实例
det.slide_match(hk_jg,bgsimple_target=True)
#传入处理好的滑块图片和有缺口的背景图片,实现计算距离,准确度很高,但是可能固定查5左右,要自己调试
def get_len(hk,bg):
“”"
调用ddddocr获取滑动距离
“”"
det = ddddocr.DdddOcr(det=False,ocr=False,show_ad=False)
with open(hk,“rb”) as f:
hk = f.read()
with open(bg,“rb”) as f:
bg = f.read()
res = det.slide_match(hk,bg,simple_target=True)
return res[“target”][0]
下一步就是利用selenium模块拖动滑块元素移动了
具体解释都在代码块里,这里再提一点,由于极验的滑块验证码会检验鼠标轨迹,所以必须模拟人手的鼠标滑动轨迹,所以我搞了一个加速的函数
get_tracks就是加速函数,这个函数各位直接拿去用就行,不用理解,在自动滑动的时候引用就行
def get_tracks(distance):
“”"
拿到移动轨迹,模拟人的滑动行为,先匀加速后匀减速
匀变速运动基本公式:
1.v=v₀+at
2.s=v₀t+1/2*at²
:param distance:滑块一次性快速移动到某一位置后剩下的距离,进行五等分
:return:位置/轨迹列表,列表内的一个元素代表0.3s的位移
“”"
v = 0 # 初速度
t = 0.3 # 单位时间为0.3s来统计轨迹,轨迹即0.3内的位移
tracks = [] # 位置/轨迹列表,列表内的一个元素代表0.3s的位移
current = 0 # 当前的位移
mid = distance * 4 / 5 # 到达mid值开始减速,前4/5匀加速,后1/5匀减速
while current < distance:
if current < mid: # 加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细
a = 2
else:
a = -3
v0 = v # 初速度
s = v0 * t + 0.5 * a * (t ** 2) # 0.3s内的位移
current += s # 当前的位置
tracks.append(round(s)) # 添加到轨迹列表
v = v0 + a * t # 速度已经达到v,该速度作为下次的初速度
return tracks # tracks:[第1个0.3s的移动距离,第2个0.3s的移动距离,…]
滑动函数如下所示
def slider_verification_code(driver,length):
“”"
滑动滑块验证码
“”"
#按住滑块按钮
silder = driver.find_element(By.XPATH,“/html/body/div[2]/div[2]/div[6]/div/div[1]/div[2]/div[2]”)
创建鼠标动态链,
subiao = ActionChains(driver)
点击指定元素并保持
subiao.click_and_hold(on_element=silder).perform()
滑动指定单位 xoffset代表水平方向的移动 正数为向右
subiao.move_to_element_with_offset(to_element=silder,xoffset=15,yoffset=15).perform()
time.sleep(0.5)
#使用加速度
tracks = get_tracks(length-15)
for track in tracks:
subiao.move_by_offset(xoffset=track,yoffset=0).perform()
放开鼠标
time.sleep(1)
subiao.release().perform()
#网络不给力情况
try:
continue_element = driver.find_element(By.XPATH, “/html/body/div[2]/div[2]/div[4]/div[3]”)
if continue_element:
print(“[*]出现网络不给力情况,立马开始重试”)
continue_element.click()
main()
except:
pass
没绕过情况
try:
#检测滑动验证码是否还存在
huadon = driver.find_element(By.CLASS_NAME,“geetest_slider_button”)
if huadon:
刷新
sx = driver.find_element(By.XPATH, “/html/body/div[2]/div[2]/div[6]/div/div[2]/div/a[2]”)
sx.click()
print(“[]绕过滑动验证码失败,开始下一次尝试\n")
main()
try:
#检测是否出现多次尝试失败情况
hk_anniu_element = driver.find_element(By.CLASS_NAME,“geetest_slider_button”)
except:
print("[]ERROR:多次尝试绕过验证码失败,立马开始重试\n”)
conshi_element = driver.find_element(By.XPATH,“/html/body/div[2]/div[2]/div[4]/div[3]”)
conshi_element.click()
time.sleep(2)
main()
except:
print(“[*]滑动验证码bypass成功\n”)
pass
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
86d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算