Есть ли способ выполнить наведение мыши (навести курсор на элемент), используя привязки Selenium и Python? - PullRequest
39 голосов
/ 24 ноября 2011

Чтение здесь , очевидно, раньше существовал класс RenderedWebElement с методом hover. Однако он был создан исключительно для Java (я искал документацию по привязкам Python безрезультатно) и с тех пор устарел для Java.

A hover нельзя выполнить ни с помощью action_chains, ни с использованием объекта WebElement.

Есть идеи, как это сделать для Python? Я был здесь , но он использует RenderedWebElement и, следовательно, не слишком помогает.

Я использую: Python 2.7, Windows Vista, Selenium 2, привязки Python

РЕДАКТИРОВАТЬ: Существует метод mouse_over для объекта selenium.selenium.selenium, но я не могу найти способ создать экземпляр без уже запущенного автономного сервера.

РЕДАКТИРОВАТЬ Пожалуйста, просмотрите комментарии к ответу, помеченному как ответ, только на тот случай, если у вас возникли неправильные представления, как у меня!

Ответы [ 2 ]

71 голосов
/ 24 ноября 2011

Для выполнения парения вам нужно использовать метод move_to_element.

Вот пример

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

firefox = webdriver.Firefox()
firefox.get('http://foo.bar')
element_to_hover_over = firefox.find_element_by_id("baz")

hover = ActionChains(firefox).move_to_element(element_to_hover_over)
hover.perform()
2 голосов
/ 11 июля 2018

@ AutomatedTester предоставил сообществу отличное решение!

Ниже описано, как я его использовал.

Я использовал сигнал для правильного выхода из phantomJS, поскольку он иногда зависает в текущем процессе.

Я предпочитаю использовать find_element_by_xpath, поскольку xpath можно легко найти в chrome.

Вот как это делается: правый клик -> осмотр -> правый клик -> Копировать -> CopyXpath

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import signal

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)

def hover(browser, xpath):
    element_to_hover_over = browser.find_element_by_xpath(xpath)
    hover = ActionChains(browser).move_to_element(element_to_hover_over)
    hover.perform()



browser.service.process.send_signal(signal.SIGTERM)  # kill the specific phantomjs child proc
browser.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...