Селен - человекоподобное движение - B - Сплайн - PullRequest
0 голосов
/ 19 февраля 2019

Я слышал, что вы можете уклониться от ReCaptcha, перемещая мышь в виде b-сплайна.Уже построена функция (которая принимает в качестве входных данных несколько точек 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()

Что здесь не так:

  • Должна быть автоматическая настройка для каждогоперемещение от элемента к другому элементу, что на самом деле неудобно.

  • Мне нужно подобрать точки (т.е. точки = []) по расширению. Есть ли другой способ сделать это?

  • Не работает должным образом, b-сплайн генерируется неправильно, если X больше, чем следующий X, он не работает хорошо.

...