selenium selenium-webdriver automation protractor bots

selenium - Movimientos de ratón similares a los humanos a través de Selenio



selenium-webdriver automation (1)

Puede usar scipy.interpolate para interpolar curvas B-spline como puede ver en esta question

Aquí usaré uno de los ejemplos de B-spline para obtener valores de xey

import numpy as np import scipy.interpolate as si #curve base points = [[0, 0], [0, 2], [2, 3], [4, 0], [6, 3], [8, 2], [8, 0]]; #curve base 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) #x interolate values y_i = si.splev(ipl_t, y_list) #y_interpolate values

Con valores de xey, puede mover el cursor del mouse con ActionChains

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains url = "https://codepen.io/falldowngoboone/pen/PwzPYv" driver = webdriver.Chrome(executable_path="/home/selenium/chromedriver2.25") driver.get(url) action = ActionChains(driver); startElement = driver.find_element_by_id(''drawer'') #First, go to your start point or Element action.move_to_element(startElement); action.perform(); for mouse_x, mouse_y in zip(x_i, y_i): action.move_by_offset(mouse_x,mouse_y); action.perform(); print(mouse_x, mouse_y)

La historia:

Uno de los enfoques para resolver captchas, como Google ReCaptcha, es tratar de imitar las acciones del mouse humano : movimientos, deslizamiento y clics.

Algunos usuarios informaron que realizar movimientos de mouse como curvas B-spline les funcionaba.

La pregunta:

¿Cómo mover el mouse a un elemento particular siguiendo la trayectoria B-spline a través de Selenium?

Tenga en cuenta que el browser.actions().mouseMove(elm).perform(); regular.actions browser.actions().mouseMove(elm).perform(); "saltaría" al elemento recto y demasiado rápido. Según entiendo, se trata de disminuir la velocidad de movimiento, "saltar" de un punto a otro sin problemas siguiendo el modelo matemático de la trayectoria B-spline.

Estamos usando Protractor / JavaScript, pero la pregunta es realmente independiente del idioma. Tenga en cuenta que no estoy tratando de resolver el captcha, o contribuir a la creación de "captcha que hace que los nuevos bots malvados violen los términos de uso aquí y allá". Solo tengo curiosidad y estoy ansioso por obtener más habilidades en el espacio de automatización de pruebas.