Проблема аналогична описанной здесь.
Я хочу перевести мышь из точки а в точку б по заданной мной кривой. Итак, мне нужны координаты местоположения a и b. Точка a — это текущее местоположение мыши, а точка b — элемент, который я могу найти. Я могу найти позицию элемента, используя следующее:
element = driver.find_element_by_class_name("insertnamehere")
x, y = element.location["x"], element.location["y"]
К сожалению, я не могу использовать аналогичные методы Selenium для определения текущего местоположения мыши (насколько мне известно). Итак, я должен найти мышь следующим образом:
import pyautogui
x_mouse, y_mouse = pyautogui.position()
Pyautogui дает местоположение экрана, которое, как описано выше, связанный вопрос, не является тем, что дает element.location. Но связанное решение у меня не работает на интересующем меня сайте. То есть я не получаю совпадающие координаты. Это вот этот.
Я подозреваю, что это потому, что локатор Selenium не считает элемент карты частью веб-страницы и возвращает координаты относительно списков (часть, которую вы можете прокручивать). Итак, вот несколько идей, которые я пробовал:
- Преобразуйте местоположение на экране в местоположение Selenium или наоборот.
Это сложно, потому что я думаю, что формула (от экрана к Selenium) будет зависеть от моего монитора, поэтому в целом не будет работать.
- Поместите мышь на веб-элемент так, чтобы точка a могла быть расположена с использованием Selenium .location.
Возможно, это лучшее решение, но мне пришлось бы перейти к элементу с помощью ActionChains(driver).move_to_element(), что противоречит цели определения пути мыши a -> b.
- Либо найдите местоположение мыши, используя метод местоположения Selenium, либо найдите элемент с точки зрения экранных координат.
Я пробовал pyautogui locateOnScreen(). Кажется многообещающим, и я, вероятно, просто сделаю это таким образом.
pgnext = driver.find_element_by_class_name("zsg-pagination-next")
, что дало мне [965, 459] в экранных координатах. Но когда я нашел элемент в экранных координатах с помощью locateCenterOnScreen pyautogui, я получил [1620, 675]. Не уверен, что вызывает несоответствие. 21.06.2019