1. 程式人生 > >(轉)python selenium-webdriver 元素操作之滑鼠和鍵盤事件

(轉)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) ——傳送某個鍵到指定元素