1. 程式人生 > >selenium+python自動化93-鼠標事件(ActionChains)源碼詳解

selenium+python自動化93-鼠標事件(ActionChains)源碼詳解

cnblogs driver offset .py IT release and 鼠標位置 chains

ActionChains簡介

actionchains是selenium裏面專門處理鼠標相關的操作如:鼠標移動,鼠標按鈕操作,按鍵和上下文菜單(鼠標右鍵)交互。
這對於做更復雜的動作非常有用,比如懸停和拖放。

actionchains也可以和快捷鍵結合起來使用,如ctrl,shif,alt結合鼠標一起使用

當你使用actionchains對象方法,行為事件是存儲在actionchains對象隊列。當你使用perform(),事件按順序執行。

  • 方法一:可以寫一長串
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")

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

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

無論哪種方式,操作都是按照調用的順序執行挨個執行!

方法介紹

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”類。

源碼可以在以下目錄查看:Lib\site-packages\selenium\webdriver\common\action_chains.py

技術分享圖片

selenium+python自動化93-鼠標事件(ActionChains)源碼詳解