Nano Hash - криптовалюты, майнинг, программирование

Определение положения экрана элемента в Selenium (с использованием Python)

Проблема аналогична описанной здесь.

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


Ответы:


1

Если вы пытаетесь получить абсолютные значения 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("https://stackoverflow.com/questions/56688961/locating-elements-screen-position-in-selenium-using-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)
20.06.2019
  • Это не сработало, когда я попробовал это на zillow.com/homes. Я использовал предоставленный вами код, чтобы найти этот элемент: pgnext = driver.find_element_by_class_name("zsg-pagination-next"), что дало мне [965, 459] в экранных координатах. Но когда я нашел элемент в экранных координатах с помощью locateCenterOnScreen pyautogui, я получил [1620, 675]. Не уверен, что вызывает несоответствие. 21.06.2019
  • Что озадачивает, так это то, что код явно работает на большинстве сайтов, так что, вероятно, в Zillow есть что-то, что его портит... 21.06.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..