(轉)python selenium-webdriver 元素操作之滑鼠和鍵盤事件
參考資料:https://blog.csdn.net/zh175578809/article/details/76767748
參考資料2:https://blog.csdn.net/qq_41817302/article/details/79618654
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'
看到模組中包含了很多的按鍵但是真正實際使用的按鍵不多,所以我下面對按鍵的操作將一些方法介紹一下,就不會對所有的按鍵詳細介紹。
1.首先我們瞭解下組合鍵,什麼是組合鍵,比如我們經常使用的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)
我們下面使用Ctrl + A 來編寫一個例項,看一下組合鍵的使用。
#-*- coding:utf-8 -*- from selenium.webdriver.common.keys import Keys from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.find_element_by_id('kw').send_keys('AAAAAAAAAAAA') driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') #注意這裡組合鍵的輸入。 time.sleep(10) driver.quit()
2.下面常用的鍵,這些常用鍵主要是非組合鍵,直接輸入即可。
- 回車鍵 Keys.ENTER
- 刪除鍵 Keys.BACK_SPACE
- 空格鍵 Keys.SPACE
- 製表鍵 Keys.TAB
- 回退鍵 Keys.ESCAPE
- 重新整理鍵 Keys.F5
下面我們選擇一個常用的鍵,來編寫一個例子,使用回車鍵來代替滑鼠的click()鍵
#-*- coding:utf-8 -*- from selenium.webdriver.common.keys import Keys from selenium import webdriver import time driver = webdriver.Chrome() driver.maximize_window() driver.get("http://cn.bing.com/") driver.find_element_by_id('sb_form_q').send_keys('selenium') driver.find_element_by_id("sb_form_go").send_keys(Keys.ENTER) #通過回車鍵來代替滑鼠的左鍵 driver.quit()
二、滑鼠的操作
這裡有非常詳盡的說明:http://www.cnblogs.com/mengyu/p/6901489.html
詳解:https://blog.csdn.net/zb455405775/article/details/80675718
詳解2:https://www.cnblogs.com/yoyoketang/p/8711367.html
selenium 模擬按鍵F12實操:https://blog.csdn.net/xie_0723/article/details/51456266
前面的例子中,點選事件都是通過click()方法實現滑鼠的點選事件。其實在WebDriver中,提供了許多滑鼠操作的方法,這些操作方法都封裝在ActionChains類中,包括滑鼠右擊、雙擊、懸停和滑鼠拖動等功能。
ActionChains類提供的滑鼠操作事件
context_click():點選滑鼠右鍵
double_click():雙擊滑鼠
drag_and_drop():拖動滑鼠
move_to_element():滑鼠懸停
滑鼠懸停
頁面上有些下拉選單,在滑鼠放到元素上以後,下面的選單才會顯示出來。下面的圖片就是一個例子
百度首頁上的設定項,下面的選單預設不會顯示,將滑鼠停在上面後才會顯示,這就是滑鼠的懸停操作,選單顯示以後就可以對下面的項進行點選操作
進入搜尋設定的程式碼
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)
settings = driver.find_element_by_link_text('設定')
webdriver.ActionChains(driver).move_to_element(settings).perform()
time.sleep(1)
settings_search = driver.find_element_by_class_name('setpref')
settings_search.click()
time.sleep(3)
driver.close()
開啟頁面後,根據連結的文字資訊找到設定項,使用ActionChains的move_to_element()方法將滑鼠懸停在設定上,然後找到搜尋設定項
滑鼠的右擊、雙擊和拖動事件都是通過上述的方法呼叫,只要將方法替換一下就可以了。拖動事件需要傳入兩個引數,第一個引數是拖動的起點元素,第二個引數是終點元素
webdriver.ActionChains(driver).context_click("右擊的元素定位").perform() #右擊事件
webdriver.ActionChains(driver).double_click("雙擊的元素定位").perform() #雙擊事件
webdriver.ActionChains(driver).drag_and_drop("拖動的起點元素", "拖動的終點元素").perform() #拖動事件
Actionchains方法列表
click(on_element=None) ——單擊滑鼠左鍵
click_and_hold(on_element=None) ——點選滑鼠左鍵,不鬆開
context_click(on_element=None) ——點選滑鼠右鍵
double_click(on_element=None) ——雙擊滑鼠左鍵
drag_and_drop(source, target) ——拖拽到某個元素然後鬆開
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個座標然後鬆開
key_down(value, element=None) ——按下某個鍵盤上的鍵
key_up(value, element=None) ——鬆開某個鍵
move_by_offset(xoffset, yoffset) ——滑鼠從當前位置移動到某個座標
move_to_element(to_element) ——滑鼠移動到某個元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移動到距某個元素(左上角座標)多少距離的位置
perform() ——執行鏈中的所有動作
release(on_element=None) ——在某個元素位置鬆開滑鼠左鍵
send_keys(*keys_to_send) ——傳送某個鍵到當前焦點的元素
send_keys_to_element(element, *keys_to_send) ——傳送某個鍵到指定元素