Solo este truco puede jugar con el mouse y el teclado de python selenium

Este artículo presenta principalmente las operaciones de teclado y mouse de selenium de python (ActionChains) en detalle y le enseña a jugar con el mouse y el teclado de selenium. Los amigos interesados ​​pueden consultarlo.

Con el selenio para la automatización, a veces encontrará situaciones que necesitan simular las operaciones del mouse, como hacer clic, hacer doble clic, hacer clic con el botón derecho del mouse, arrastrar, etc. Y el selenio nos proporciona una clase para manejar tales eventos: ActionChains

selenium.webdriver.common.action_chains.ActionChains (controlador)

Básicamente, esta clase puede satisfacer todas nuestras necesidades para el funcionamiento del mouse.

1. Uso básico de ActionChains

En primer lugar, debe comprender el principio de ejecución de ActionChains. Cuando llame al método de ActionChains, no se ejecutará de inmediato. En su lugar, todas las operaciones se almacenarán en una cola en orden. Cuando llame al método perform () , se cambiará el tiempo en la cola. Ejecutar a su vez.

En este caso, podemos tener dos métodos de llamada: 

• Escritura en cadena

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu =  driver.find_element_by_css_selector(".nav #submenu1")
 
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

Escritura paso a paso:


3
4
5
6
7
 
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
 
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
 

Los dos métodos de escritura son esencialmente los mismos y ActionChains ejecutará todas las operaciones en orden.

2. Lista de métodos ActionChains

haga clic en (on_element = None) -haga clic en el botón izquierdo del mouse

click_and_hold (on_element = None) ——haga clic con el botón izquierdo del mouse sin soltarlo

context_click (on_element = None) -haga clic con el botón derecho del mouse

double_click (on_element = None) ——Haga doble clic en el botón izquierdo del mouse

drag_and_drop (fuente, destino) -arrastre a un elemento y luego suelte

drag_and_drop_by_offset (source, xoffset, yoffset) -arrastre a una determinada coordenada y luego suelte

key_down (valor, elemento = Ninguno) -presiona una tecla en un teclado

key_up (valor, elemento = Ninguno): suelta una clave

move_by_offset (xoffset, yoffset) -el ratón se mueve desde la posición actual a una determinada coordenada

move_to_element (to_element) -el ratón se mueve a un elemento

move_to_element_with_offset (to_element, xoffset, yoffset): mueve a la posición de qué tan lejos de un elemento (la coordenada de la esquina superior izquierda)

perform () - realiza todas las acciones en la cadena

release (on_element = None): suelta el botón izquierdo del ratón en la posición de un elemento

send_keys (* keys_to_send): envía una clave al elemento actualmente enfocado

send_keys_to_element (elemento, * keys_to_send) -envía una clave al elemento especificado 

A continuación, utilice ejemplos para ilustrar y demostrar el uso de cada método en detalle:

3. Ejemplo de código

1. Haga clic para operar

URL de muestra http://sahitest.com/demo/clicks.htm 

Código:

# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
 
 
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/clicks.htm')
 
click_btn = driver.find_element_by_xpath('//input[@value="click me"]') # 单击按钮
doubleclick_btn = driver.find_element_by_xpath('//input[@value="dbl click me"]') # 双击按钮
rightclick_btn = driver.find_element_by_xpath('//input[@value="right click me"]') # 右键单击按钮
 
 
ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perform() # 链式用法
 
print driver.find_element_by_name('t2').get_attribute('value')
 
sleep(2)
driver.quit()

resultado:

[CLIC] [DOUBLE_CLICK] [RIGHT_CLICK]

2. Movimiento del mouse

URL de ejemplo http://sahitest.com/demo/mouseover.htm 

Código de muestra:

# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
 
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/mouseover.htm')
 
write = driver.find_element_by_xpath('//input[@value="Write on hover"]') # 鼠标移动到此元素,在下面的input框中会显示“Mouse moved”
blank = driver.find_element_by_xpath('//input[@value="Blank on hover"]') # 鼠标移动到此元素,会清空下面input框中的内容
 
result = driver.find_element_by_name('t1')
 
action = ActionChains(driver)
action.move_to_element(write).perform() # 移动到write,显示“Mouse moved”
print result.get_attribute('value')
 
# action.move_to_element(blank).perform()
action.move_by_offset(10, 50).perform() # 移动到距离当前位置(10,50)的点,与上句效果相同,移动到blank上,清空
print result.get_attribute('value')
 
action.move_to_element_with_offset(blank, 10, -40).perform() # 移动到距离blank元素(10,-40)的点,可移动到write上
print result.get_attribute('value')
 
sleep(2)
driver.quit()

resultado

Mouse movido

Mouse movido

3. Arrastra y suelta

URL de ejemplo http://sahitest.com/demo/dragDropMooTools.htm 

Código:

# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
 
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
 
dragger = driver.find_element_by_id('dragger') # 被拖拽元素
item1 = driver.find_element_by_xpath('//div[text()="Item 1"]') # 目标元素1
item2 = driver.find_element_by_xpath('//div[text()="Item 2"]') # 目标2
item3 = driver.find_element_by_xpath('//div[text()="Item 3"]') # 目标3
item4 = driver.find_element_by_xpath('//div[text()="Item 4"]') # 目标4
 
action = ActionChains(driver)
action.drag_and_drop(dragger, item1).perform() # 1.移动dragger到目标1
sleep(2)
action.click_and_hold(dragger).release(item2).perform() # 2.效果与上句相同,也能起到移动效果
sleep(2)
action.click_and_hold(dragger).move_to_element(item3).release().perform() # 3.效果与上两句相同,也能起到移动的效果
sleep(2)
# action.drag_and_drop_by_offset(dragger, 400, 150).perform() # 4.移动到指定坐标
action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() # 5.与上一句相同,移动到指定坐标
sleep(2)
driver.quit()

resultado:

soltado soltado soltado soltado

En términos generales, el posicionamiento de coordenadas rara vez se usa. El método 1 en el ejemplo anterior es suficiente. Si observa el código fuente, encontrará que el método 2 es en realidad la implementación de drag_and_drop () en el método 1. Nota: Preste atención al tiempo de espera al arrastrar y usar, a veces fallará debido a que la velocidad es demasiado rápida.

4. Botón

Hay muchas formas de simular pulsaciones de teclas, que pueden realizarse mediante win32api, SendKeys o mediante el método send_keys () del objeto WebElement de Selenium. Aquí, la clase ActionChains también proporciona varios métodos para simular pulsaciones de teclas.

URL de ejemplo http://sahitest.com/demo/keypress.htm 

Codigo 1:



# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
 
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/keypress.htm')
 
key_up_radio = driver.find_element_by_id('r1') # 监测按键升起
key_down_radio = driver.find_element_by_id('r2') # 监测按键按下
key_press_radio = driver.find_element_by_id('r3') # 监测按键按下升起
 
enter = driver.find_elements_by_xpath('//form[@name="f1"]/input')[1] # 输入框
result = driver.find_elements_by_xpath('//form[@name="f1"]/input')[0] # 监测结果
 
# 监测key_down
key_down_radio.click()
ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()
print result.get_attribute('value')
 
# 监测key_up
key_up_radio.click()
enter.click()
ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()
print result.get_attribute('value')
 
# 监测key_press
key_press_radio.click()
enter.click()
ActionChains(driver).send_keys('a').perform()
print result.get_attribute('value')
driver.quit()
 

resultado:

clave abajo charCode = [0] keyCode = [17]
tecla CTRL arriba charCode = [0] keyCode = [16] NINGUNA
tecla presionada charCode = [97] keyCode = [0] NONE

Ejemplo 2:

URL de ejemplo http://sahitest.com/demo/label.htm 

Código:

# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from time import sleep
 
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
 
driver.get('http://sahitest.com/demo/label.htm')
 
input1 = driver.find_elements_by_tag_name('input')[3]
input2 = driver.find_elements_by_tag_name('input')[4]
 
action = ActionChains(driver)
input1.click()
action.send_keys('Test Keys').perform()
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # ctrl+a
action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # ctrl+c
 
action.key_down(Keys.CONTROL, input2).send_keys('v').key_up(Keys.CONTROL).perform() # ctrl+v
 
print input1.get_attribute('value')
print input2.get_attribute('value')
 
driver.quit()

resultado:

Llaves de
prueba Llaves de prueba

Copiar y pegar también se puede lograr con WebElement <input> .send_keys (). Puede probarlo o utilizar un método de nivel inferior. Win32api también es una de las formas de tratar las ventanas emergentes del sistema operativo. Si está interesado, también puede probar SendKeys, keybd_event

Lo anterior es todo el contenido de este artículo, espero que sea de utilidad para el estudio de todos.

Soy un ingeniero de desarrollo de Python y he compilado un conjunto de los últimos tutoriales de aprendizaje del sistema de Python, que incluyen scripts de Python básicos para desarrollo web, rastreadores, análisis de datos, visualización de datos, aprendizaje automático y colecciones de entrevistas. Aquellos que quieran estos materiales pueden prestar atención al editor, agregar Q skirt 851211580 para recoger materiales de aprendizaje de Python y videos de aprendizaje, ¡y la guía en línea del Gran Dios!

Supongo que te gusta

Origin blog.csdn.net/pyjishu/article/details/105417360
Recomendado
Clasificación