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