Есть ли способ выполнить наведение мыши (наведите указатель мыши на элемент), используя привязки Selenium и Python?
Читая здесь, по-видимому, раньше был класс RenderedWebElement
с методом hover
. Это, однако, было сделано исключительно для Java (я искал документацию по привязкам Python безрезультатно) и с тех пор устарело для Java.
hover
не могут быть выполнены с использованием action_chains
, ни с помощью WebElement
объекта либо.
Есть идеи, как это сделать для Python? Я был здесь, но он использует RenderedWebElement
и, следовательно, не слишком помогает.
Я использую: Python 2.7, Windows Vista, Selenium 2, Python Bindings
РЕДАКТИРОВАТЬ: Существует метод mouse_over
для объекта selenium.selenium.selenium
но я не могу найти способ создать экземпляр без уже работающего автономного сервера.
РЕДАКТИРОВАТЬ Пожалуйста, просмотрите комментарии ответа помечены как ответ только в случае, если у вас есть неправильные представления, как я!
Ответы
Ответ 1
Чтобы сделать зависание, вам нужно использовать метод 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
@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()