如何利用Python獲取鼠標(biāo)在屏幕上的具體位置以及動(dòng)作
在Python中,要獲取鼠標(biāo)在屏幕上的具體位置以及動(dòng)作,并判斷鼠標(biāo)是否在瀏覽器內(nèi),我們可以使用pyautogui庫(kù)。pyautogui是一個(gè)非常強(qiáng)大的庫(kù),可以用來(lái)模擬鼠標(biāo)操作、屏幕截圖、獲取屏幕尺寸和分辨率等。
安裝pyautogui
首先,確保你已經(jīng)安裝了pyautogui。如果還沒(méi)有安裝,可以通過(guò)pip安裝:
pip install pyautogui
獲取鼠標(biāo)位置
你可以使用pyautogui.position()來(lái)獲取鼠標(biāo)的當(dāng)前位置。這個(gè)函數(shù)返回一個(gè)包含兩個(gè)元素的元組,分別表示鼠標(biāo)在屏幕上的X和Y坐標(biāo)。
import pyautogui # 獲取鼠標(biāo)當(dāng)前位置 x, y = pyautogui.position() print(f"Mouse position: X={x}, Y={y}")
監(jiān)聽(tīng)鼠標(biāo)動(dòng)作
pyautogui還允許你監(jiān)聽(tīng)鼠標(biāo)事件,例如鼠標(biāo)點(diǎn)擊、移動(dòng)等。你可以使用pyautogui.listen()方法來(lái)實(shí)現(xiàn)。但是,請(qǐng)注意,這種方法會(huì)阻塞你的腳本,直到你手動(dòng)停止監(jiān)聽(tīng)。如果你想在后臺(tái)持續(xù)監(jiān)聽(tīng),可以考慮使用線(xiàn)程或者異步編程。
import pyautogui def on_move(x, y): print(f"Mouse moved to: X={x}, Y={y}") def on_click(x, y, button): print(f"Mouse clicked at: X={x}, Y={y}, Button={button}")
# 監(jiān)聽(tīng)鼠標(biāo)移動(dòng)和點(diǎn)擊事件 pyautogui.listen(onMove=on_move, onClick=on_click)
判斷鼠標(biāo)是否在瀏覽器內(nèi)
要判斷鼠標(biāo)是否在瀏覽器內(nèi),你需要知道瀏覽器窗口的位置和大小。你可以使用pyautogui.getWindowsWithTitle()來(lái)獲取特定標(biāo)題的窗口信息,然后判斷鼠標(biāo)位置是否在這個(gè)窗口的區(qū)域內(nèi)。
import pyautogui # 假設(shè)瀏覽器窗口的標(biāo)題是 "Google Chrome" windows = pyautogui.getWindowsWithTitle('Google Chrome') if windows: window = windows[0] # 獲取第一個(gè)匹配的窗口,如果有多個(gè)則選擇第一個(gè) x, y = pyautogui.position() # 獲取當(dāng)前鼠標(biāo)位置 # 獲取窗口的位置和大小 window_x, window_y, width, height = window.left, window.top, window.width, window.height # 判斷鼠標(biāo)是否在瀏覽器窗口內(nèi) if window_x <= x <= window_x + width and window_y <= y <= window_y + height: print("Mouse is inside the browser.") else: print("Mouse is outside the browser.") else: print("Browser window not found.")
注意:
確保你的腳本有權(quán)限訪(fǎng)問(wèn)這些信息,尤其是在某些操作系統(tǒng)上可能需要額外的權(quán)限。
對(duì)于跨平臺(tái)的兼容性,特別是在Windows和MacOS上,確保你的代碼在不同平臺(tái)上都能正確運(yùn)行。例如,窗口的屬性和方法在不同平臺(tái)之間可能有所不同。
對(duì)于更復(fù)雜的窗口管理或自動(dòng)化任務(wù),考慮使用像pywinauto(針對(duì)Windows)或pyobjc(針對(duì)MacOS)這樣的庫(kù)來(lái)提供更精確的窗口控制和事件監(jiān)聽(tīng)。但對(duì)于簡(jiǎn)單的任務(wù),pyautogui已經(jīng)足夠強(qiáng)大且易于使用。
方法擴(kuò)展
下面小編為大家整理了一些其他Python獲取鼠標(biāo)位置的相關(guān)方法,希望對(duì)大家有所幫助
Python獲取鼠標(biāo)形狀和位置
import win32gui cur = win32gui.GetCursorInfo() print(cur) # 輸出的是一個(gè)元組,類(lèi)似于(1, 65561, (606, 699)) # 其中: # 第二個(gè)元素是鼠標(biāo)的形狀代碼 # 第三個(gè)元素是鼠標(biāo)的位置 # 鼠標(biāo)形狀代碼: # 65539:正常的鼠標(biāo)形狀 # 65541:文本輸入的形狀 # 65555:調(diào)整窗口大小的形狀 # 65567:超級(jí)鏈接的手指頭 # 65543:圓圈 # 65561:正常的鼠標(biāo)形狀+圓圈 # 如果想寫(xiě)一個(gè)等待鼠標(biāo)轉(zhuǎn)圈結(jié)束的代碼,應(yīng)該是這個(gè)樣子: import win32gui import time while win32gui.GetCursorInfo()[1] == 65543: time.sleep(1) print('轉(zhuǎn)圈結(jié)束')
用python獲取屏幕上鼠標(biāo)的坐標(biāo)
import pyautogui as pg import time def mouse_coordinate(): print('Press Ctrl-C to quit.') try: while True: # 獲取鼠標(biāo)下x, y坐標(biāo) x, y = pg.position() # 調(diào)整x, y輸出格式 positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4) print(positionStr, end='') time.sleep(0.2) print('\b' * len(positionStr), end='', flush=True) except KeyboardInterrupt: print('\nDone.') if __name__ == '__main__': mouse_coordinate()
python selenium獲取鼠標(biāo)位置
# 捕捉鼠標(biāo)移動(dòng)事件 self.scatter.scene().sigMouseMoved.connect(self.mouseover) # 捕捉到單擊事件后,需要做的動(dòng)作,在mouseover函數(shù)里完成,主要是提取點(diǎn)的坐標(biāo) from PySide2 import QtGui, QtWidgets, QtCore # from pyqtgraph.Qt import QtCore import pyqtgraph as pg import sys from random import randint import numpy as np FieldRadius = 100 class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('pyqtgraph作圖') # 創(chuàng)建 PlotWidget 對(duì)象 self.pw = pg.PlotWidget() # 設(shè)置圖表標(biāo)題 self.pw.setTitle("節(jié)點(diǎn)分布圖", color='008080', size='12pt') # 設(shè)置上下左右的label self.pw.setLabel("left","縱坐標(biāo)") self.pw.setLabel("bottom","橫坐標(biāo)") self.pw.setXRange(min=0, # 最小值 max=FieldRadius) # 最大值 # 設(shè)置Y軸 刻度 范圍 self.pw.setYRange(min=0, # 最小值 max=FieldRadius) # 最大值 # 顯示表格線(xiàn) self.pw.showGrid(x=True, y=True) # 背景色改為白色 self.pw.setBackground('w') # 居中顯示 PlotWidget self.setCentralWidget(self.pw) # 實(shí)時(shí)顯示應(yīng)該獲取 PlotDataItem對(duì)象, 調(diào)用其setData方法, # 這樣只重新plot該曲線(xiàn),性能更高 self.scatter = self.pw.plot(pen=None, symbol='o') self.i = 0 self.x = [] # x軸的值 self.new_point_x = 0 self.y = [] # y軸的值 self.new_point_y = 0 self.setMouseTracking(False) self.scatter.scene().sigMouseMoved.connect(self.mouseover) self.scatter.scene().sigMouseClicked.connect(self.mouse_clicked) # 啟動(dòng)定時(shí)器,每隔1秒通知刷新一次數(shù)據(jù) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.updateData) self.timer.start(100) def updateData(self): self.scatter.setData(self.x, self.y) # 鼠標(biāo)移動(dòng)事件,用于獲取精確坐標(biāo)(好像鼠標(biāo)單擊的坐標(biāo)不準(zhǔn)確) def mouseover(self,pos): # 參數(shù)pos 是像素坐標(biāo),需要 轉(zhuǎn)化為 刻度坐標(biāo) act_pos = self.scatter.mapFromScene(pos) if type(act_pos) != QtCore.QPointF: return # print("over_1:",act_pos.x(), act_pos.y()) self.new_point_x = act_pos.x() self.new_point_y = act_pos.y() # 鼠標(biāo)單擊事件,用于鼠標(biāo)單擊后事件的處理,包括: # 1)添加新坐標(biāo) def mouse_clicked(self,event): self.x.append(self.new_point_x) self.y.append(self.new_point_y) # print("my position is:",self.xx,self.yy) if __name__ == '__main__': app = QtWidgets.QApplication() main = MainWindow() main.show() app.exec_()
到此這篇關(guān)于如何利用Python獲取鼠標(biāo)在屏幕上的具體位置以及動(dòng)作的文章就介紹到這了,更多相關(guān)Python獲取鼠標(biāo)位置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Python使用turtle庫(kù)畫(huà)任意圖的問(wèn)題
這篇文章主要介紹了Python turtle庫(kù)畫(huà)任意圖,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04Python實(shí)現(xiàn)批量將PPT轉(zhuǎn)換成長(zhǎng)圖
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量將PPT轉(zhuǎn)換成長(zhǎng)圖,并且圖片名稱(chēng)與PPT文件名稱(chēng)相同,保存位置相同,感興趣的小伙伴可以了解下2023-08-08Python實(shí)現(xiàn)修改文件內(nèi)容的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)修改文件內(nèi)容的方法,結(jié)合實(shí)例形式分析了Python文件讀寫(xiě)、字符串替換及shell方法調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法
這篇文章主要介紹了python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例
這篇文章主要介紹了Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例,本文講解了連接服務(wù)器、創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建文檔并插入到數(shù)據(jù)庫(kù)等操作實(shí)例,需要的朋友可以參考下2015-03-03Python+wxauto實(shí)現(xiàn)微信自動(dòng)化操作
在眾多自動(dòng)化工具中,Python的wxauto庫(kù)以其強(qiáng)大的功能和簡(jiǎn)單易用的特點(diǎn),為我們打開(kāi)了微信自動(dòng)化操作的大門(mén),下面我們就來(lái)看看它的具體操作吧2025-02-02在OpenCV里實(shí)現(xiàn)條碼區(qū)域識(shí)別的方法示例
這篇文章主要介紹了在OpenCV里實(shí)現(xiàn)條碼區(qū)域識(shí)別的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12使用Python和XML實(shí)現(xiàn)文件復(fù)制工具的完整代碼
在本篇博客中,我們將學(xué)習(xí)如何使用 wxPython 構(gòu)建一個(gè)簡(jiǎn)單的文件復(fù)制工具,并將文件路徑和目標(biāo)目錄的配置信息保存到 XML 文件中,通過(guò)這種方式,我們可以在下次運(yùn)行程序時(shí)輕松加載之前保存的配置,需要的朋友可以參考下2024-08-08