硒-类人运动-B-样条

时间:2019-02-19 04:29:57

标签: python selenium selenium-webdriver automation selenium-chromedriver

我听说您可以通过像b样条移动鼠标来逃避ReCaptcha。 已经建立了一个函数(该函数将屏幕上的一些X,Y点作为输入) 但是,它似乎并没有降到我想要的位置,而是降低了很多(负Y或负X),这都是不可接受的,因为我必须手动调整它。 (运动)

将numpy导入为np

将matplotlib.pyplot导入为plt

将scipy.interpolate导入为si

def spline(points):

    points = np.array(points)
    x = points[:,0]
    y = points[:,1]

    t = range(len(points))
    ipl_t = np.linspace(0.0, len(points) - 1, 100)

    x_tup = si.splrep(t, x, k=3)
    y_tup = si.splrep(t, y, k=3)

    x_list = list(x_tup)
    xl = x.tolist()
    x_list[1] = xl + [0.0, 0.0, 0.0, 0.0]

    y_list = list(y_tup)
    yl = y.tolist()
    y_list[1] = yl + [0.0, 0.0, 0.0, 0.0]

    x_i = si.splev(ipl_t, x_list)
    y_i = si.splev(ipl_t, y_list)

    return [x_i, y_i]

# points = [[80, 77], [265, 210], [811, 304], [938, 140], [960, 150], [999, 188], [1002, 75]]

然后调用它并实际移动鼠标

action = ActionChains(self.browser)
action.move_to_element(self.browser.find_element_by_xpath(xpath))
location = element.location

locationX = location['x']
locationY = location['y']

point_x, point_y = spline(array)

previousX, previousY = 30, 82 #manually adjusting
print(location)

# the spline function gives back X , Y coordinates
# now we have to adjust, by subtraction
for mouseX, mouseY in zip(point_x, point_y):

    value_x, value_y = mouseX - previousX, mouseY - previousY
    action.move_by_offset(value_x, value_y)
    previousX = mouseX
    previousY = mouseY
    self.smallsleep(x=0, y=0.05)

action.click()
self.smallsleep(x=0, y=1) #smallsleep is just sleep between (0.0,1.0)
action.perform()

这是怎么回事:

  • 从一个元素到另一个元素的每次移动都必须进行自动调整,这确实很不方便。

  • 我必须通过扩展来获取点(即点= []),还有另一种方法吗?

  • 效果不好,如果X大于下一个X,则b样条不能正确生成。

0 个答案:

没有答案