前言
在web自動化下載操作時,有時候會彈出下載框,這種下載框不屬於web的頁面,是沒辦法去定位的(你可能首先想到的是,定位!定位!定位)
有時候我們並不是非要去定位到這個按鈕再去點擊,學會使用鍵盤的快捷鍵操作,也能達到一樣的效果。
PyKeyboard鍵盤操作
PyUserInput模塊里面主要有兩個類
- PyMouse,專門模擬鼠標操作
- PyKeyboard,專門模擬鍵盤上的操作
先用手工在鍵盤上操作下,記住操作步驟:按Tab鍵+Eneter鍵
因為暫無上圖中的場景,那么咱可以使用alert窗口
參考:Selenium3+python3自動化(十四)--alert\confirm\prompt
點擊【prompt】按鈕,默認在輸入框上,按一次tab鍵切換到【確定】按鈕上,按二次tab鍵切換到【取消】按鈕上
參考代碼
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard # from pymouse import PyMouse import time driver=webdriver.Chrome() driver.get("file:///C:/Users/Administrator/Desktop/1.html") driver.find_element_by_id("prompt").click() kb=PyKeyboard() #發送tab鍵 kb.press_key(kb.tab_key) kb.release_key(kb.tab_key) time.sleep(2) #發送回車 kb.press_key(kb.enter_key) kb.release_key(kb.enter_key)
這里用到了兩個方法,一個時press_key按住Tab/Enter鍵,另外一個是release_key釋放按鍵。其實還有個方法tap_key
tap_key模擬點擊
先看下tap_key源碼是怎么設計的,實際上tap_key就是封裝的press_key和release_key這2個方法
- character 傳對應的鍵盤事件
- n=1 默認只點一次
- interval=0 如果有多次點擊操作,中間的間隙時間,默認sleep時間為0
def tap_key(self, character='', n=1, interval=0): """Press and release a given character key n times.""" for i in range(n): self.press_key(character) self.release_key(character) time.sleep(interval)
改成tap_key操作
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard # from pymouse import PyMouse import time driver=webdriver.Chrome() driver.get("file:///C:/Users/Administrator/Desktop/1.html") driver.find_element_by_id("prompt").click() kb=PyKeyboard() #發送tab鍵 # kb.press_key(kb.tab_key) # kb.release_key(kb.tab_key) # kb.tap_key(kb.tab_key) #tap_key方法,點擊一次 kb.tap_key(kb.tab_key,2) #tap_key方法,點擊2次 time.sleep(2) #發送回車 # kb.press_key(kb.enter_key) # kb.release_key(kb.enter_key) kb.tap_key(kb.enter_key)
PyKeyboard其它操作
除了能模擬tab,enter這種操作,也能模擬在輸入框輸入內容
基本操作方法;如輸入h:tap_key("h")
如下,在彈出框的輸入框輸入
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard # from pymouse import PyMouse import time driver=webdriver.Chrome() driver.get("file:///C:/Users/Administrator/Desktop/1.html") driver.find_element_by_id("prompt").click() kb=PyKeyboard() def input_s(x): for i in x: kb.tap_key(i) kb.tap_key(kb.enter_key) input_s("hello") #發送tab鍵 kb.tap_key(kb.tab_key) #tap_key方法,點擊一次 time.sleep(2) #發送回車 kb.tap_key(kb.enter_key)
如下,在瀏覽器下的輸入框中輸入,並搜索
# coding:utf-8 from selenium import webdriver from pykeyboard import PyKeyboard import time driver=webdriver.Chrome() driver.get("https://www.baidu.com") k=PyKeyboard() k.tap_key('h') #一次只能輸入一個字母 k.tap_key(k.enter_key) #將字母鍵入輸入框 time.sleep(2) k.tap_key(k.enter_key)#百度一下