Я пытаюсь сделать изображение jpg, которое представляет собой черно-белую подпись, и использую python, чтобы имитировать c движение мыши, которое подпишет его снова.
В настоящее время я использую cv2.imread(file_name, 1)
, чтобы открыть файл изображения,
Затем я использую numpy.all(image == [0, 0, 0], axis=-1)
, чтобы превратить изображение в массив истинного (все черные пиксели) и ложного
И затем я использую два для циклов go бросить массив и ActionChains
для имитации перехода к местоположению черного пикселя и щелкнуть один раз.
У меня есть несколько проблем с этим методом:
- Если изображение имеет большой размер или много черных пикселей, поэтому для окончательного sh нажатия всех пикселей требуется очень много времени
- Одиночные щелчки не имитируют c движения, поэтому холст, на котором я рисую получить результат, который не является точным, потому что он использует какое-то размытие или что-то, что должно выглядеть более естественно, когда люди используют свою мышь, чтобы подписать, и если подпись на рисунке слишком тонкая, так что результаты имеют небольшие промежутки между точками
* 10 19 *
Я ищу способ разобрать изображения и преобразовать их в список движений и изменить команды ActionChains
на что-то подобное :
ActionChains(driver).move_to_element(element).click_and_hold() \
.move_by_offset(0, 1) \
.move_by_offset(0, 1) \
.move_by_offset(-1, 1) \
.move_by_offset(-1, 0) \
.move_by_offset(-8, 8) \
.move_by_offset(-1, 0) \
.move_by_offset(-1, 1) \
.move_by_offset(-1, 0) \
.move_by_offset(-1, 1) \
.move_by_offset(-1, 1) \
.move_by_offset(-1, 1) \
.release().perform()
, который займет намного меньше времени и сможет обрабатывать большие подписи
Код (URL-адрес холста действителен, так что вы можете проверить его, просто используйте местный jpg):
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import cv2
import numpy as np
driver = webdriver.Chrome("../drivers/chromedriver.exe")
driver.get("http://szimek.github.io/signature_pad/")
element = driver.find_element_by_xpath("//canvas")
file_name = "C:/temp/signatures/adi.jpg"
image = cv2.imread(file_name, 1)
arr = np.all(image == [0, 0, 0], axis=-1)
actions = ActionChains(driver)
for x in range(len(arr)):
for y in range(len(arr[0])):
if arr[x][y]:
actions.move_to_element_with_offset(element, y, x).click()
actions.perform()
Спасибо.