actionchains是selenium裏面專門處理鼠標相關的操做如:鼠標移動,鼠標按鈕操做,按鍵和上下文菜單(鼠標右鍵)交互。
這對於作更復雜的動做很是有用,好比懸停和拖放。css
actionchains也能夠和快捷鍵結合起來使用,如ctrl,shif,alt結合鼠標一塊兒使用web
當你使用actionchains對象方法,行爲事件是存儲在actionchains對象隊列。當你使用perform(),事件按順序執行。code
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()
不管哪一種方式,操做都是按照調用的順序執行挨個執行!orm
1.如下提到的Keys類,是selenium裏面的鍵盤事件類,導入方法:對象
from selenium.webdriver.common.keys import Keysblog
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 的組合鍵功能utf-8
# coding:utf-8 # 做者:上海-悠悠 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys import time driver = 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.pyelement