故事:
解决验证码的方法之一,如谷歌ReCaptcha,是试图模仿人类鼠标动作:动作,悬停和点击.
问题:
如何通过Selenium将鼠标移动到B样条轨迹之后的特定元素?
请注意,常规browser.actions().mouseMove(elm).perform();会直接"跳"到元素并且太快.我的理解是,这是一个减慢运动速度的问题,在B样条轨迹的数学模型之后,从一点到另一点平滑地"跳跃".
我们使用的是Protractor/JavaScript,但问题实际上与语言无关. 请注意,我并不是要尝试解决验证码,也不是为了"使用验证码解决新恶意机器人在这里和那里违反使用条款"的空间.我只是好奇并渴望在测试自动化领域获得更多技能.
我需要在python中计算3D bspline曲线.我查看了scipy.interpolate.splprep和其他一些scipy模块,但找不到任何能让我满意的东西.所以我在下面写了自己的模块.代码工作正常,但速度很慢(测试函数运行在0.03秒,考虑到我只需要100个带有6个控制顶点的样本,这似乎很多).
有没有办法通过一些scipy模块调用来简化下面的代码,这可能会加快它的速度?如果没有,我可以对我的代码做些什么来改善其性能?
import numpy as np
# cv = np.array of 3d control vertices
# n = number of samples (default: 100)
# d = curve degree (default: cubic)
# closed = is the curve closed (periodic) or open? (default: open)
def bspline(cv, n=100, d=3, closed=False):
# Create a range of u values
count = len(cv)
knots = None
u = None
if not closed:
u = np.arange(0,n,dtype='float')/(n-1) * (count-d)
knots = np.array([0]*d + range(count-d+1) + [count-d]*d,dtype='int')
else:
u …Run Code Online (Sandbox Code Playgroud)