2024-10-19 16:43:25 +00:00
|
|
|
# 声明:本代码仅供学习和研究目的使用。使用者应遵守以下原则:
|
|
|
|
# 1. 不得用于任何商业用途。
|
|
|
|
# 2. 使用时应遵守目标平台的使用条款和robots.txt规则。
|
|
|
|
# 3. 不得进行大规模爬取或对平台造成运营干扰。
|
|
|
|
# 4. 应合理控制请求频率,避免给目标平台带来不必要的负担。
|
|
|
|
# 5. 不得用于任何非法或不当的用途。
|
|
|
|
#
|
|
|
|
# 详细许可条款请参阅项目根目录下的LICENSE文件。
|
|
|
|
# 使用本代码即表示您同意遵守上述原则和LICENSE中的所有条款。
|
|
|
|
|
|
|
|
|
2023-06-29 08:22:39 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# copy from https://github.com/aneasystone/selenium-test/blob/master/12-slider-captcha.py
|
|
|
|
# thanks to aneasystone for his great work
|
|
|
|
import math
|
2023-07-16 09:57:18 +00:00
|
|
|
from typing import List, Tuple
|
2023-06-29 08:22:39 +00:00
|
|
|
|
2023-07-29 07:35:40 +00:00
|
|
|
import numpy as np
|
|
|
|
|
2023-06-29 08:22:39 +00:00
|
|
|
|
|
|
|
# https://github.com/gdsmith/jquery.easing/blob/master/jquery.easing.js
|
|
|
|
def ease_in_quad(x):
|
|
|
|
return x * x
|
|
|
|
|
|
|
|
|
|
|
|
def ease_out_quad(x):
|
|
|
|
return 1 - (1 - x) * (1 - x)
|
|
|
|
|
|
|
|
|
|
|
|
def ease_out_quart(x):
|
|
|
|
return 1 - pow(1 - x, 4)
|
|
|
|
|
|
|
|
|
|
|
|
def ease_out_expo(x):
|
|
|
|
if x == 1:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 1 - pow(2, -10 * x)
|
|
|
|
|
|
|
|
|
|
|
|
def ease_out_bounce(x):
|
|
|
|
n1 = 7.5625
|
|
|
|
d1 = 2.75
|
|
|
|
if x < 1 / d1:
|
|
|
|
return n1 * x * x
|
|
|
|
elif x < 2 / d1:
|
|
|
|
x -= 1.5 / d1
|
|
|
|
return n1 * x * x + 0.75
|
|
|
|
elif x < 2.5 / d1:
|
|
|
|
x -= 2.25 / d1
|
|
|
|
return n1 * x * x + 0.9375
|
|
|
|
else:
|
|
|
|
x -= 2.625 / d1
|
|
|
|
return n1 * x * x + 0.984375
|
|
|
|
|
|
|
|
|
|
|
|
def ease_out_elastic(x):
|
|
|
|
if x == 0:
|
|
|
|
return 0
|
|
|
|
elif x == 1:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
c4 = (2 * math.pi) / 3
|
|
|
|
return pow(2, -10 * x) * math.sin((x * 10 - 0.75) * c4) + 1
|
|
|
|
|
|
|
|
|
2023-07-16 09:57:18 +00:00
|
|
|
def get_tracks(distance, seconds, ease_func) -> Tuple[List[int], List[int]]:
|
2023-06-29 08:22:39 +00:00
|
|
|
tracks = [0]
|
|
|
|
offsets = [0]
|
|
|
|
for t in np.arange(0.0, seconds, 0.1):
|
|
|
|
ease = globals()[ease_func]
|
|
|
|
offset = round(ease(t / seconds) * distance)
|
|
|
|
tracks.append(offset - offsets[-1])
|
|
|
|
offsets.append(offset)
|
|
|
|
return offsets, tracks
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
o, tl = get_tracks(129, 3, "ease_out_expo")
|
|
|
|
print(tl)
|