標籤:[] 指定元素 調用 find 有用 滑鼠右鍵 控制 自動 結合
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”類。
舉個案例
1.實現Ctrl +F5 的按鍵組合功能
# coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keysimport timedriver = webdriver.Firefox()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()
源碼可以在以下目錄查看:Lib\site-packages\selenium\webdriver\common\action_chains.py
selenium+python自動化94-行為事件(ActionChains)源碼詳解