selenium3 + python - action_chains源码分析

ActionChains简介

actionchains是selenium里面专门处理鼠标相关的操做如:鼠标移动,鼠标按钮操做,按键和上下文菜单(鼠标右键)交互。
这对于作更复杂的动做很是有用,好比悬停和拖放。css

actionchains也能够和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一块儿使用html

当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。web

  • 方法一:能够写一长串
    • 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()
  • 方法二:能够分几步写

    menu = driver.find_element_by_css_selector(".nav")spa

    hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") orm

    actions = ActionChains(driver) htm

    actions.move_to_element(menu) 对象

    actions.click(hidden_submenu) actions.perform()blog

 

方法介绍 

1.如下提到的Keys类,是selenium里面的键盘事件类,导入方法:队列

from selenium.webdriver.common.keys import Keys事件

2.鼠标事件使用导入方法:

from selenium.webdriver.common.action_chains import ActionChains

class ActionChains(object):
def __init__(self, driver):
self._driver = driver
self._actions = []

def perform(self):

# 执行行为事件

def click(self, on_element=None):
点击:
- 若是参数不写,那么点击的是当前鼠标位置
- 若是参数写定位到的元素对象element,那就是点这个元素

def click_and_hold(self, on_element=None):
鼠标左键按住某个元素
- 若是参数不写,那么点的是当前鼠标位置
- 若是参数写定位到的元素对象element,那就是点这个元素

def context_click(self, on_element=None):
鼠标右键点击
- 若是参数不写,那么点的是当前鼠标位置
- 若是参数写定位到的元素对象element,那就是点这个元素

def double_click(self, on_element=None):
双击鼠标
- 若是参数不写,那么点的是当前鼠标位置
- 若是参数写定位到的元素对象element,那就是点这个元素

def drag_and_drop(self, source, target):
按住源元素上的鼠标左键,而后移动到目标元素并释放鼠标按钮
- source: 按住鼠标的元素位置
- target: 松开鼠标的元素位置

def drag_and_drop_by_offset(self, source, xoffset, yoffset):
按住源元素上的鼠标左键,而后移动到目标偏移量并释放鼠标按钮。
- source: 按住鼠标的元素位置
- xoffset: X
轴的偏移量
- yoffset: Y
轴的偏移量

def key_down(self, value, element=None):
只发送一个按键,而不释放它。只应用于修饰键(控制、alt和shift)。

- value: 要发送的修饰符键。值在“Keys”类中定义。
- element: 定位的元素
若是element参数不写就是当前鼠标的位置

举个例子,按住
ctrl + c::

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

def key_up(self, value, element=None):

# 释放按键,配合上面的一块儿使用

def move_by_offset(self, xoffset, yoffset):
将鼠标移动到当前鼠标位置的偏移量

- xoffset: X轴
做为一个正整数或负整数移动到x偏移量
- yoffset: Y轴
偏移,做为正整数或负整数。

def move_to_element(self, to_element):
鼠标悬停
- to_element: 定位须要悬停的元素

def move_to_element_with_offset(self, to_element, xoffset, yoffset):
经过指定元素的偏移量移动鼠标。偏移量与元素的左上角相对
- to_element: 定位须要悬停的元素
- xoffset: X
轴偏移量
- yoffset: Y
轴偏移量

def release(self, on_element=None):
释放一个元素上的鼠标按钮。

- 若是参数不写,那么是当前鼠标位置
- 若是参数写定位到的元素对象element,那就是这个元素.

def send_keys(self, *keys_to_send):
发送到当前焦点元素
要发送的按键。修饰符键常数能够在“Keys”类。

def send_keys_to_element(self, element, *keys_to_send):
发送到定位到的元素上
- element: 定位的元素
- keys_to_send: 要发送的按键。修饰符键常数能够在“Keys”类。

1.实现Ctrl +F5 的组合键功能

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.common.keys import Keys

import time driver = webdriver.Chrome()

driver.get("https://www.baidu.com")

time.sleep(3) # 实现Ctrl+F5刷新

ActionChains(driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()

 

 

转载:http://www.javashuo.com/article/p-zlyhoyts-kk.html

相关文章
相关标签/搜索