Расположение элемента на экране в Selenium (с использованием Python) - PullRequest
0 голосов
/ 20 июня 2019

Проблема похожа на описанную здесь .

Я хочу перевести мышь из точки a в точку b вдоль кривой, которую я определяю. Итак, мне нужны координаты местоположения 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) будет зависеть от моего монитора, поэтому не будет работать вообще.

  • Поместите мышь на веб-элемент так, чтобы точка a могла быть найдена с помощью .location Selenium.

Возможно, это лучшее решение, но мне нужно было бы перейти к элементу с помощью ActionChains (driver) .move_to_element (), что лишает цели определения пути мыши a -> b.

  • Либо найдите местоположение мыши, используя метод определения местоположения Selenium, либо найдите элемент в терминах экранных координат.

Я пробовал метод locateOnScreen () pyautogui. Кажется многообещающим, и я, вероятно, просто сделаю это таким образом.

1 Ответ

0 голосов
/ 21 июня 2019

Если вы пытаетесь получить абсолютные значения x и y (значения x и y относительно экрана), используйте приведенную ниже логику.

# maximize the browser window so that you can get the absolute x and y based on the window inner and outer heights
driver.maximize_window()
# navigate to OP
driver.get("/9051171/raspolozhenie-elementa-na-ekrane-v-selenium-s-ispolzovaniem-python")
# get ask question element
askQuestion = driver.find_element_by_link_text("Ask Question")
# get the browser panel height
panel_height = driver.execute_script('return window.outerHeight - window.innerHeight;')
# get absolute x value
abs_x = askQuestion.location['x']

# get y value (this is relative y value - meaning y value with in browser)
y = askQuestion.location['y']
abs_y = y + panel_height
# print the absolute x and y values
print ("Absolute x : " + abs_x)
print ("Absolute y : " + abs_y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...