web-dev-qa-db-fra.com

Existe-t-il un moyen d'effectuer un survol de la souris (survoler un élément) à l'aide de sélénium et des liaisons Python)?

En lisant ici , il y avait apparemment une classe RenderedWebElement avec une méthode hover. Cependant, il a été exclusivement conçu pour Java (J'ai cherché dans la documentation de liaisons Python en vain) et a depuis été déconseillé pour Java).

Un hover ne peut pas être exécuté à l'aide de action_chains ni en utilisant un objet WebElement non plus.

Des idées sur la façon de faire cela pour Python? J'ai été ici mais il utilise RenderedWebElement et n'aide donc pas trop.

J'utilise: Python 2.7, Windows Vista, Selenium 2, Python Liaisons

EDIT: Il existe une méthode mouse_over pour un Selenium.selenium.Selenium objet mais je ne peux pas trouver un moyen de créer une instance sans que le serveur autonome soit déjà en cours d'exécution.

[~ # ~] modifier [~ # ~] Veuillez parcourir les commentaires de la réponse marqués comme réponse juste au cas où vous auriez des idées fausses comme je l'ai fait !

41
Ashwin

Pour faire un survol, vous devez utiliser le move_to_element méthode.

Voici un exemple

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()
74
AutomatedTester

@AutomatedTester a donné à la communauté une excellente solution!

Voici comment je l'ai utilisé.

J'ai utilisé le signal pour quitter correctement phantomJS car il se bloque parfois dans le processus actuel.

Je préfère utiliser find_element_by_xpath car xpath peut être facilement trouvé dans Chrome.

Voici comment: clic droit -> inspecter -> clic droit -> Copier -> 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()
2
hyukkyulee