一、鼠標事件
在 WebDriver 中, 將這些關於鼠標操作的方法封裝在 ActionChains 類提供。
ActionChains 類提供了鼠標操作的常用方法。
ActionChains 類的成員源碼如下圖所示:
下面我們通過一張表對上圖中對外使用的成員進行分類(即帶下划線的成員不放入下表):
分類 | 函數名 | 描述 |
---|---|---|
鼠標操作 | def click(self, on_element=None) | 鼠標左鍵單擊 |
鼠標操作 | def click_and_hold(self, on_element=None) | 鼠標左鍵按鍵,不釋放 |
鼠標操作 | def context_click(self, on_element=None) | 鼠標右擊 |
鼠標操作 | def double_click(self, on_element=None) | 鼠標左鍵雙擊 |
鼠標操作 | def drag_and_drop(self, source, target) | 鼠標拖曳動作,將指定元素位置拖曳到目標元素位置,來移動元素 |
鼠標操作 | def drag_and_drop_by_offset(self, source, xoffset, yoffset) | 鼠標拖曳動作,將指定元素按沿x、y方向拖曳指定距離來移動元素 |
鼠標操作 | def move_by_offset(self, xoffset, yoffset) | 將鼠標光標沿x、y方向移動指定距離,來實現鼠標的移動 |
鼠標操作 | def move_to_element(self, to_element) | 將鼠標光標移動到指定的元素上 |
鼠標操作 | def move_to_element_with_offset(self, to_element, xoffset, yoffset) | 將鼠標光標移動到指定的元素相對元素左上角位置偏移(xoffset、yoffset)的位置 |
鼠標操作 | def release(self, on_element=None) | 釋放鼠標,與click_and_hold函數配對使用 |
鍵盤操作 | def key_down(self, value, element=None) | 按下指定的鍵盤按鍵 |
鍵盤操作 | def key_up(self, value, element=None) | 釋放已按下的鍵盤按鍵(與key_down配套使用) |
鍵盤操作 | def send_keys(self, *keys_to_send) | 鍵盤輸入 |
鍵盤操作 | def send_keys_to_element(self, element, *keys_to_send) | 給指定元素(可輸入元素)進行鍵盤輸入 |
其他 | def perform(self) | 執行所有存儲的動作 |
其他 | def reset_actions(self) | 清空所有存儲的動作 |
其他 | def pause(self, seconds) | 在指定的時間內暫定所有的輸入 |
實例代碼如下:
from selenium.webdriver import Chrome
from selenium.webdriver import ActionChains import time driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.get('https://www.baidu.com') ''' 搜索點擊查詢博客園 driver.find_element_by_id("kw").send_keys("博客園") driver.find_element_by_id("su").click() ''' #鼠標懸移至“更多產品” above = driver.find_element_by_class_name("bri") ActionChains(driver).move_to_element(above).perform() time.sleep(5) driver.quit()
二、鍵盤事件
Keys()類提供了鍵盤上幾乎所有按鍵的方法。 前面了解到, send_keys()方法可以用來模擬鍵盤輸入,
除此 之外, 我們還可以用它來輸入鍵盤上的按鍵, 甚至是組合鍵, 如 Ctrl+A、 Ctrl+C 等。
selenium 提供了比較完整的鍵盤操作,在使用的模擬鍵盤操作之前需要我們導入
from selenium.webdriver.common.keys import Keys即可,然后就可以來模擬鍵盤操作。
#導入Keys 模塊,然后我們看看Keys 模塊定義了那些按鍵 from selenium.webdriver.common.keys import Keys
導入模塊以后,我們可以看看具體的定義按鍵內容,我已經把經常使用的按鍵注釋標記。
NULL = '\ue000' CANCEL = '\ue001' # ^break HELP = '\ue002' BACKSPACE = '\ue003' BACK_SPACE = BACKSPACE #刪除鍵 TAB = '\ue004' #TAB鍵 CLEAR = '\ue005' RETURN = '\ue006' ENTER = '\ue007' #回車鍵 SHIFT = '\ue008' #Shift鍵 LEFT_SHIFT = SHIFT CONTROL = '\ue009' LEFT_CONTROL = CONTROL #Ctrl 鍵 ALT = '\ue00a' #Alt 鍵 LEFT_ALT = ALT PAUSE = '\ue00b' ESCAPE = '\ue00c' #ECS鍵 SPACE = '\ue00d' #空格鍵 PAGE_UP = '\ue00e' #PgUp 鍵 PAGE_DOWN = '\ue00f' #PgDwon 鍵 END = '\ue010' #END 鍵 HOME = '\ue011' #HOME 鍵 LEFT = '\ue012' #左鍵 ARROW_LEFT = LEFT UP = '\ue013' #上鍵 ARROW_UP = UP RIGHT = '\ue014' ARROW_RIGHT = RIGHT #右鍵 DOWN = '\ue015' #下鍵 ARROW_DOWN = DOWN INSERT = '\ue016' #insert鍵 DELETE = '\ue017' #del鍵 SEMICOLON = '\ue018' #';'鍵 EQUALS = '\ue019' #'='鍵 #數字鍵盤 NUMPAD0 = '\ue01a' # number pad keys NUMPAD1 = '\ue01b' NUMPAD2 = '\ue01c' NUMPAD3 = '\ue01d' NUMPAD4 = '\ue01e' NUMPAD5 = '\ue01f' NUMPAD6 = '\ue020' NUMPAD7 = '\ue021' NUMPAD8 = '\ue022' NUMPAD9 = '\ue023' MULTIPLY = '\ue024' # '*' 鍵 ADD = '\ue025' # '+' 鍵 SEPARATOR = '\ue026' #','鍵 SUBTRACT = '\ue027' # '-' 鍵 DECIMAL = '\ue028' # '.'鍵 DIVIDE = '\ue029' #'/'鍵 F1 = '\ue031' # function keys F2 = '\ue032' F3 = '\ue033' F4 = '\ue034' F5 = '\ue035' F6 = '\ue036' F7 = '\ue037' F8 = '\ue038' F9 = '\ue039' F10 = '\ue03a' F11 = '\ue03b' F12 = '\ue03c' META = '\ue03d' COMMAND = '\ue03d'
組合鍵,比如我們經常使用的Ctrl + A ,Ctrl + C 等都是組合鍵。我們先看個例子
在使用按鍵操作的時候我們需要借助一下send_keys()來模擬操作,Keys.CONTROL 也就是我們鍵盤上的Ctrl鍵,下面是幾個常用的組合鍵。
send_keys(Keys.CONTROL,'a') #全選(Ctrl+A)
send_keys(Keys.CONTROL,'c') #復制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘貼(Ctrl+V)
下面我們來練個手,看看鍵盤操作和組合鍵如何使用吧
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys import time driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.get('https://www.baidu.com') #搜索點擊查詢博客園,多輸入一個園字 driver.find_element_by_id("kw").send_keys("博客園園") time.sleep(2) #backspace回格鍵,刪除多輸入一個的 園 driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) time.sleep(2) #輸入空格鍵,重新輸入python driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys("Python") #ctrl+a 全選輸入框的內容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') time.sleep(2) #ctrl+x 剪切輸入框的內容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') time.sleep(2) #ctrl+v 粘貼內容到輸入框 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') time.sleep(2) #通過回車鍵來代替單擊操作 driver.find_element_by_id("su").send_keys(Keys.ENTER) time.sleep(5) driver.quit()
除了上面介紹的鍵盤操作和組合鍵以外,還有一些其他常用的非組合鍵鍵盤操作,其實我們上面實例中已經介紹過一些了。
回車鍵 Keys.ENTER
刪除鍵 Keys.BACK_SPACE
空格鍵 Keys.SPACE
制表鍵 Keys.TAB
回退鍵 Keys.ESCAPE
刷新鍵 Keys.F5