python - pestaña - selenium scraping
¿Hay alguna forma de realizar un mouseover(desplazarse sobre un elemento) utilizando enlaces de Selenium y Python? (3)
@AutomatedTester le ha dado a la comunidad una gran solución.
A continuación es cómo lo usé.
Utilicé la señal para salir de phantomJS correctamente ya que a veces se cuelga en el proceso actual.
Prefiero usar find_element_by_xpath ya que xpath se puede encontrar fácilmente en chrome.
Así es como: haga clic derecho -> inspeccionar -> haga clic derecho -> Copiar -> 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()
Al leer here , al parecer, solía haber una clase RenderedWebElement con un método hover. Sin embargo, era exclusivamente para Java (se buscó la documentación de enlaces de python here en vano) y desde entonces ha quedado obsoleta para Java.
No se puede realizar un vuelo estacionario usando action_chains ( lista de métodos ) ni usando un objeto webelement ( lista de métodos ) tampoco.
¿Alguna idea de cómo hacer esto para Python? He estado here pero usa RenderedWebElement y, por lo tanto, no ayuda demasiado.
Python 2.7, Windows Vista, Selenium 2, enlaces de Python
EDITAR: Hay un método "mouse_over" para un objeto selenium.selenium.selenium, pero no puedo encontrar una manera de crear una instancia sin tener el servidor independiente ejecutándose.
La pregunta ha sido respondida: por favor revisa los comentarios de la respuesta marcada como respuesta por si acaso tienes ideas erróneas como las que hice.
Hice una sub-class
de ActionChains
para simplificar el código.
class Hover(ActionChains):
def hover(browser, element):
return ActionChains(browser).move_to_element(element).perform()
Entonces se puede usar así:
self.browser = driver
contact_link = self.browser.find_element_by_link_text(
''Contact'')
Hover.hover(self.browser, contact_link)
Para move_to_element
, move_to_element
usar el método move_to_element
.
Aquí hay un ejemplo
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()