前言:
? ? ? ? 若是讀者學(xué)過爬蟲工具Selenium,對pyautogui必能快速上手,只需要不斷實踐復(fù)習(xí)即可熟練掌握。若是沒學(xué)過當(dāng)然沒關(guān)系,我會以初學(xué)者的角度盡可能詳細(xì)地向你解讀新手遇到的許多問題。
? ? ? ? 請注意:在本文章中,我會import pyautogui as auto????????
? ? ? ? 在本內(nèi)容中,我會使用最為常用的屬性、方法,若是有其他的功能想要實現(xiàn),請詢問GPT或文心一言,在AI那里會得到詳細(xì)的回答,我只是作為一個初學(xué)者把某些晦澀難懂的概念以一個更為通俗易懂的角度說明白。
? ? ? ? 若是認(rèn)為本文章有可以改進(jìn)的地方,希望能夠給我留個言,我希望借此機(jī)會提升我的編寫能力,將來我也會通過發(fā)布文章的方式來進(jìn)行學(xué)習(xí),非常感謝!
提醒事項
? ? ? ? 由于涉及到鼠標(biāo)的控制,用戶可能會因為程序設(shè)計錯誤對鼠標(biāo)拾取控制,造成程序失控甚至無法使用鼠標(biāo)結(jié)束程序,最后可能需要使用下列方式結(jié)束程序:
? ? ? ? 1、Windows: Ctrl + Alt + Del? ? ? ? MacOS: Command + Shift + Option + Q
? ? ? ? 2、在設(shè)計程序的時候,每次啟用pyautogui的方法之后設(shè)定暫停3秒再繼續(xù)下一步
pyautogui.PAUSE = 3
? ? ? ? 3、直接按下Ctrl + C ,讓程序產(chǎn)生KeyboardInterrupt異常從而終止(建議使用)
預(yù)備知識:屏幕坐標(biāo)
? ? ? ? 對鼠標(biāo)而言,屏幕坐標(biāo)的原點在屏幕左上角(0,0),即平面直角坐標(biāo)系的第四象限。根據(jù)自己屏幕的像素不同,右下角對應(yīng)的x和y的值也不同
import pyautogui as auto
width, height = auto.size()
print(width, height)
通過以上代碼,可以獲得屏幕的像素規(guī)格。?
鼠標(biāo)的相關(guān)操作
import pyautogui as auto
import time
# 獲得當(dāng)前的x和y坐標(biāo)
xaxis, yaxis = auto.position()
print(f"你最初的鼠標(biāo)位置是:{xaxis},{yaxis}")
# 以絕對位置移動鼠標(biāo)到指定位置 duration:持續(xù)時間
auto.moveTo(x=10, y=0, duration=0.5)
auto.moveTo(900, 600, 1)
auto.moveTo(900, 0, 0.5)
auto.moveTo(0, 600, 1)
# 以相對位置移動鼠標(biāo) moveRel中的Rel代表的是relative:相對的
auto.moveRel(xOffset=300, yOffset=0, duration=0.5)
auto.moveRel(600,200,0.5)
# 鼠標(biāo)點擊操作,參數(shù)為1、x坐標(biāo) 2、y坐標(biāo) 3、所選按鍵 4、移動到目標(biāo)坐標(biāo)所用時間
# 5、點擊次數(shù) 6、鼠標(biāo)點擊之間的間隔
auto.click(x=2900, y=1950, button="left", duration=0.5, clicks=2, interval=1)
auto.moveTo(2100,1950,duration=0.2)
#
auto.mouseDown(button='left') # 使用mousedown來實現(xiàn)鼠標(biāo)按住操作
time.sleep(1) # 保持鼠標(biāo)左鍵按住不動1秒
auto.mouseUp() # 松開鼠標(biāo),此處我把鼠標(biāo)放在圖標(biāo)上,卻沒有打開菜單,不知道為什么
time.sleep(5) # 給我個時間打開系統(tǒng)自帶的畫圖軟件以便展示拖拽
auto.moveTo(1000,1000)
auto.dragTo(1500,1500) # 按住鼠標(biāo)左鍵拖拽到目標(biāo)坐標(biāo)
time.sleep(5) # 在5秒內(nèi)自行打開瀏覽器查看效果
auto.scroll(-200) # 執(zhí)行這一條之后我用瀏覽器測試卻只向下滾動了接近450像素點
以上代碼的坐標(biāo)是基于我電腦的坐標(biāo),我的電腦的分辨率是3200*2000?,請讀者根據(jù)自身電腦設(shè)置坐標(biāo)
注意事項:
? ? ? ? 1、在執(zhí)行一條會讓鼠標(biāo)移動到屏幕的四個頂點的時候,程序會自動終止。這是為了防止程序出現(xiàn)錯誤從而導(dǎo)致用戶無法關(guān)閉程序而設(shè)置的安全防護(hù),所以請不要碰到屏幕的四個頂點。若一定要碰,請百度查詢解決方案。
? ? ? ? 2、不建議使用moveRel這類相對移動方法,因為我們可以自行用微信截圖來獲取屏幕上任何一個位置的具體坐標(biāo)。
? ? ? ? 3、通過一個click() 方法我們可以實現(xiàn)鼠標(biāo)雙擊或多擊的操作,也可以實現(xiàn)右鍵、中鍵的操作
? ? ? ? 通過調(diào)整button = '?' 來實現(xiàn)? ? ? ? 可選left middle right? ? ? ? 默認(rèn)是left
? ? ? ? 4、mouseDown() 方法可以配合time.sleep(n)來實現(xiàn)長按幾秒
? ? ? ? 5、moveTo() 方法會自動將鼠標(biāo)抬起然后移動到其他的位置,所以不可以用mouseDown和moveTo兩個方法來實現(xiàn)拖拽的功能,只能依靠dragTo。
? ? ? ? 6、滾動功能scroll中的參數(shù)為正時表示鼠標(biāo)滾輪向上滾動,為負(fù)即為向下滾動。但是目前我不清楚這個參數(shù)代表什么,設(shè)置為2000在我這里只能滾動差不多450像素點的內(nèi)容。
?
鍵盤的相關(guān)操作
import pyautogui as auto
import time
# 獲得當(dāng)前的x和y坐標(biāo)
xaxis, yaxis = auto.position()
print(f"你最初的鼠標(biāo)位置是:{xaxis},{yaxis}")
print(("請在5秒內(nèi)打開記事本以讓程序模擬鍵盤輸入"))
time.sleep(5)
# 傳入一段文字,設(shè)置每0.1秒傳入一個字符
auto.typewrite(message='hello', interval=0.1)
# 傳入列表、元組也可以,因為傳入是按照一個一個字符進(jìn)行的
auto.typewrite(['w','o','r','l','d'], 0.1)
auto.keyDown('h') # 按下h鍵不動
# 雖然按住h鍵保持1秒,但是也只能輸出一個字符,因為此方法只能用來模擬鍵盤操作,不能用來傳入字符串
time.sleep(1)
auto.keyUp('h') # 按下了h鍵,使用結(jié)束自然要放開按鍵
# 表達(dá)特殊按鍵
auto.typewrite(['M','n','g','left','left','i'],0.1)
auto.keyDown('shift')
auto.press('8') # 按下8鍵后松開
auto.keyUp('shift')
?注意事項:
? ? ? ? 1、typewrite() 用來輸入文本? ? ? ? keyDown()和keyUp() 都只是用來操作按鍵,不能用來輸入文本? ? ? ? press()用來點按一次按鍵? ? ? ??
? ? ? ? 2、鍵盤中有一些鍵如del鍵,若要按下del鍵,則要寫為auto.keyDown("delete")才可以,按一下左方向鍵要用auto.keyDown("left")才可以,每一個此類特殊鍵位都有相對應(yīng)的表達(dá)方式。
?文章來源:http://www.zghlxwxcb.cn/news/detail-828612.html
熱鍵(快捷鍵)
import pyautogui as auto
# hotkey:熱鍵 按照順序按下所有按鍵,從右往左釋放按鍵,兩次按鍵之間間隔0.1秒
auto.hotkey('ctrl','shift','right',interval=0.1)
auto.keyDown('ctrl')
auto.keyDown('shift')
auto.keyDown('right')
auto.keyUp('ctrl')
auto.keyUp('shift')
auto.keyUp('right')
?????????不知道為什么我的這兩種方式調(diào)用我網(wǎng)易云的全局快捷鍵都無效,若有人知道且愿意告訴我,我感激不盡!文章來源地址http://www.zghlxwxcb.cn/news/detail-828612.html
到了這里,關(guān)于python使用pyautogui控制鼠標(biāo)與鍵盤(無屏幕內(nèi)容)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!