अजगर के साथ माउस को नियंत्रित करना


206

पायथन में माउस कर्सर को कैसे नियंत्रित करता है, अर्थात इसे कुछ निश्चित स्थिति में ले जाएं और विंडोज के नीचे क्लिक करें?


1
क्या आप उपयोगकर्ता के हस्तक्षेप के बिना कोड में माउस आंदोलन करना चाहते हैं?
रहुल

अधिक जानकारी वास्तव में उपयोगी होगी ...
गेब्रियल हर्ले

मैं विंडोज में wotk और मैं किसी भी टूलकिट का उपयोग नहीं करते। मैं पायथन के लिए वास्तव में नया हूं और मैंने पहले कभी किसी जीयूआई के साथ काम नहीं किया। मैं कहां से शुरू करूं? मुझे क्या पांडुलिपि पढ़नी चाहिए?
साशा

2
आपको ऐसा करने के लिए एक अजगर की आवश्यकता क्यों है, आप खुद ऐसा कर सकते हैं? अधिक गंभीर नोट पर, आपको इसकी आवश्यकता क्यों है, उद्देश्य क्या है, थोड़ा और अधिक विवरण बहुत अच्छा होगा
अनुराग उनियाल

2
सिर्फ FYI करें यदि आप अपनी मशीन को लॉक करने से रोकने के लिए इसका उपयोग कर रहे हैं तो आप अपनी कंपनी या संगठनों की सुरक्षा नीति का उल्लंघन कर सकते हैं क्योंकि यह ऑटो कंप्यूटर लॉकिंग गुणों को दरकिनार करने का एक साधन है। Ive ने इसका उपयोग कुछ स्थानों पर किया है, कोई समस्या नहीं है हमेशा अपने Sys Admins के साथ जांच करना सुनिश्चित करें। Ive देखा कि लोग इस तरह से मामूली चीजों पर अपनी नौकरी खो देते हैं।
एलियनअनार्चिस्ट

जवाबों:


329

WinXP पर परीक्षण किया गया, पायथन 2.6 (3.x भी परीक्षण किया गया) मेरे मामले में pywin32 (pywin32-214.win32-py2.6.exe ) स्थापित करने के बाद :

import win32api, win32con
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)

11
win32api.SetCursorPos((x,y))win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))खेल जैसे अन्य एप्लिकेशन के साथ बेहतर एकीकरण के लिए मेरे अनुभव से प्रतिस्थापित किया जाना बेहतर है।
फाल्कन

1
@ ऑब्सेसिव्सओℲ सिर्फ MOUSEEVENTF_ABSOLUTE ध्वज उतारें। विवरण के लिए: msdn.microsoft.com/en-us/library/windows/desktop/…
फाल्कन

क्या मैं माउस की गति / त्वरण को नियंत्रित करने के लिए इस लाइब्रेरी का उपयोग कर सकता हूं?
किसी ने

यह 50+ खिड़कियों के बक्से (डिजिटल साइनेज कियोस्क) में गैर-मानक पायथन मॉड्यूल की स्थापना (और संबंधित प्रबंधन की समीक्षा और अनुमोदन) की आवश्यकता नहीं होने का लाभ था।
ब्रिचिन्स

4
python3.xकार्यों में भी परीक्षण किया गया है, जवाब को संपादित करने के लिए स्वतंत्र महसूस करें
व्हाट्सएप

132

PyAutoGUI मॉड्यूल के साथ प्रयास करें । यह मल्टीप्लायर है।

pip install pyautogui

इसलिए:

import pyautogui
pyautogui.click(100, 100)

इसकी अन्य विशेषताएं भी हैं:

import pyautogui
pyautogui.moveTo(100, 150)
pyautogui.moveRel(0, 10)  # move mouse 10 pixels down
pyautogui.dragTo(100, 150)
pyautogui.dragRel(0, 10)  # drag mouse 10 pixels down

यह सभी win32con सामान के माध्यम से जाने से बहुत आसान है।


14
महान! यह बहु मंच है!
लेस

पयुटोगुई एक महान मॉड्यूल है, लेकिन दुर्भाग्य से बहुत धीमा है। उबंटू में यह प्रति सेकंड 2-3 बार कर्सर ले जाता है। अतुल्य! Pyuserinput 1000x तेज है।
व्लादिस्लाव सवैंको

1
Pyutogui को स्थापित करने की कोशिश कर रहे लोगों के लिए, यहां stackoverflow.com/questions/5892297/… देखें और अनुमति की समस्या होने पर अपने कमांड के सामने sudo लगाना सुनिश्चित करें।
रेटोडेयरडेविल

5
"PyAutoGUI धीमा है" एक सुरक्षा विशेषता के कारण जो प्रत्येक कॉल के बाद 0.1 सेकंड का ठहराव जोड़ता है। यदि आपकी स्क्रिप्ट नियंत्रण से बाहर है, तो आप माउस को उस 0.1 सेकंड में शीर्ष-बाएँ कोने में बंद कर सकते हैं। इसे अक्षम करने के लिए, pyautogui.PAUSE = 0 चलाएं (हालांकि यह अनुशंसित नहीं है, क्योंकि आप स्क्रिप्ट को रोकने के लिए माउस / कीबोर्ड का उपयोग नहीं कर सकते।)
अल स्वेगार्ट

76

आप उपयोग कर सकते हैं win32apiया ctypesमॉड्यूल को नियंत्रित करने के लिए माउस या किसी जीयूआई के लिए Win32 एपीआई का उपयोग करने के लिए

यहाँ win32api का उपयोग करके माउस को नियंत्रित करने के लिए एक मजेदार उदाहरण है:

import win32api
import time
import math

for i in range(500):
    x = int(500+math.sin(math.pi*i/100)*500)
    y = int(500+math.cos(i)*100)
    win32api.SetCursorPos((x,y))
    time.sleep(.01)

Ctypes का उपयोग करके एक क्लिक:

import ctypes

# see http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx for details
ctypes.windll.user32.SetCursorPos(100, 20)
ctypes.windll.user32.mouse_event(2, 0, 0, 0,0) # left down
ctypes.windll.user32.mouse_event(4, 0, 0, 0,0) # left up

11
आपके ctypes कोड ने बिना किसी अतिरिक्त पुस्तकालयों के मेरे लिए काम किया! (विंडोज 7 पर अजगर 2.6)
आत्मनिरीक्षण

1
बिना किसी बाहरी पुस्तकालय के उपयोग के! धन्यवाद
अग्रवाल अक्षत

2
धन्यवाद! मैं यह नहीं कह सकता कि 3 थ्री पार्टी लाइब्रेरियों की तरह हैं, जिन्हें आप इसके साथ कर सकते हैं, हालाँकि सभी 3 लाइब्रेरियाँ इनस्टॉल या समस्या निवारण करने के लिए पागल हैं। यह ctypes सॉल्यूशन पहला देशी पायथन सॉल्यूशन है और यह मेरे द्वारा आए हर दूसरे से बेहतर काम करता है।
डकपंचर

कहां के लिए प्रलेखन है SetCursorPos?
आर्टऑफवर्फ

22

एक अन्य विकल्प क्रॉस-प्लेटफॉर्म ऑटोपाय पैकेज का उपयोग करना है । इस पैकेज में माउस घुमाने के लिए दो अलग-अलग विकल्प हैं:

यह कोड स्निपेट कर्सर को तुरंत स्थिति में ले जाएगा (200,200):

import autopy
autopy.mouse.move(200,200)

यदि आप इसके बजाय कर्सर को स्क्रीन पर दिए गए स्थान पर ले जाना चाहते हैं, तो आप smooth_move कमांड का उपयोग कर सकते हैं:

import autopy
autopy.mouse.smooth_move(200,200)

21

क्रॉस प्लेटफॉर्म की जाँच करें PyMouse: https://github.com/pepijndevos/PyMouse/


8
PyMouse साथ ले लिया है PyUserInput फिट बिल्कुल अनुरोध, उपयोग और पार मंच करने के लिए सरल,। बिग +1
user336851

@ user336851, क्या आप जानते हैं कि कैसे tap spaceऔर tap screen shot keyPyUswerInput का उपयोग करके?
user3768495

@ user336851, इस समय PyUserInputटूट गया है। कह नहीं सकता कि यह अच्छी तरह से काम करता है या नहीं क्योंकि मैं टूटी हुई निर्भरता के कारण इसे स्थापित करने के लिए भी नहीं मिल सकता।
डकपंचर

20

लिनक्स

from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()

स्रोत: अजगर माउस कोड की 5 लाइनों (केवल लिनक्स) में चलते हैं


20
"पायथन कंट्रोलिंग माउस मूवमेंट" के लिए एक गूगल अब इस पेज को देखता है कि कैसे मेटा।
कोपा

2
पूर्णता के लिए, चूंकि प्रश्न ने माउस क्लिक को अनुकरण करने के लिए भी कहा था, इसलिए मैं जोड़ूंगा: Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();नींद () प्रेस और रिलीज के बीच कॉल और लक्ष्य एप्लिकेशन के आधार पर आवश्यक हो सकता है या नहीं।
user336851

4
@ कोपस - आपके Google में दिखने वाले परिणाम का मतलब कुछ भी नहीं है। तुम एक बुलबुले में हो। यह उसी अवधि के लिए एक डकडकू खोज में दिखाता है - यह कुछ वास्तविक है। यही कारण है कि हर कोई अपने आप को पुन: पेश कर सकता है और देख सकता है। वह मेटा है।
ArtOfWarfare

1
VNC सत्र में माउस को नियंत्रित करने के लिए, आपको "d = display.Display (': 1')" जैसे डिस्प्ले नंबर की आवश्यकता होती है जहां: 1 डिस्प्ले नंबर है।
ज़ेफर

12

Pynput सबसे अच्छा समाधान है जो मैंने पाया है, दोनों विंडोज और मैक के लिए। सुपर आसान कार्यक्रम के लिए, और बहुत अच्छी तरह से काम करता है।

उदाहरण के लिए,

from pynput.mouse import Button, Controller

mouse = Controller()

# Read pointer position
print('The current pointer position is {0}'.format(
    mouse.position))

# Set pointer position
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(
    mouse.position))

# Move pointer relative to current position
mouse.move(5, -5)

# Press and release
mouse.press(Button.left)
mouse.release(Button.left)

# Double click; this is different from pressing and releasing
# twice on Mac OSX
mouse.click(Button.left, 2)

# Scroll two steps down
mouse.scroll(0, 2)

मैंने अभी एक विंडोज कंप्यूटर पर एक पुराना प्रोग्राम चलाने की कोशिश की और यह काम नहीं किया, इसलिए कृपया उपयोग करने से पहले इसका परीक्षण करें। यह कार्यक्रम कम से कम दोनों का समर्थन करने का दावा करता है।
प्रो क्यू

मैंने कुछ परीक्षण किया, और यह पता चला कि मेरा मुद्दा यह था कि मैक पर, समन्वय मूल्यों के रूप में फ्लोट करना ठीक काम करता है, लेकिन विंडोज पर, निर्देशांक पूर्णांक होना आवश्यक है। यह मॉड्यूल क्रॉस-प्लेटफॉर्म है।
प्रो क्यू

मैंने जीथब रिपॉजिटरी में एक मुद्दा जोड़ा है कि क्या वे इसे बेहतर कर सकते हैं: github.com/moses-palmer/pynput/issues/79
Pro Q

ऐसा लग रहा है कि यह मुद्दा तय हो गया है।
प्रो क्यू

8

त्वरित और गंदे कार्य जो लाइब्रेरी के clicksउपयोग से विंडोज 7 पर कहीं भी क्लिक करेंगे ctypes। कोई डाउनलोड आवश्यक नहीं।

import ctypes

SetCursorPos = ctypes.windll.user32.SetCursorPos
mouse_event = ctypes.windll.user32.mouse_event

def left_click(x, y, clicks=1):
  SetCursorPos(x, y)
  for i in xrange(clicks):
   mouse_event(2, 0, 0, 0, 0)
   mouse_event(4, 0, 0, 0, 0)

left_click(200, 200) #left clicks at 200, 200 on your screen. Was able to send 10k clicks instantly.

7

के रूप में 2020 , आप उपयोग कर सकते हैं माउस :

import mouse
mouse.move("500", "500")
mouse.left_click()

विशेषताएं

  • सभी चूहों उपकरणों पर वैश्विक घटना हुक (फोकस की परवाह किए बिना घटनाओं को पकड़ता है)।
  • सुनो और माउस घटनाओं भेजता है।
  • विंडोज और लिनक्स के साथ काम करता है (sudo की आवश्यकता है)।
  • शुद्ध पायथन, संकलित किए जाने वाले कोई सी मॉड्यूल नहीं।
  • शून्य निर्भरता। तुच्छ स्थापित करने और तैनात करने के लिए, बस फ़ाइलों की प्रतिलिपि बनाएँ।
  • अजगर 2 और 3
  • उच्च स्तरीय एपीआई (जैसे रिकॉर्ड और प्ले) शामिल हैं।
  • इवेंट स्वचालित रूप से अलग थ्रेड में कैप्चर किए जाते हैं, मुख्य प्रोग्राम को ब्लॉक नहीं करते हैं।
  • परीक्षण किया और प्रलेखित।

2

यदि आप माउस को स्थानांतरित करना चाहते हैं, तो इसका उपयोग करें:

import pyautogui
pyautogui.moveTo(x,y)

यदि आप क्लिक करना चाहते हैं, तो इसका उपयोग करें:

import pyautogui
pyautogui.click(x,y)

यदि आपने pyautoguiइंस्टॉल नहीं किया है, तो आपके पास सीएमडी से जुड़ा अजगर होना चाहिए। CMD पर जाएं और लिखें:pip install pyautogui

यह pyautoguiपायथन 2.x के लिए स्थापित होगा ।

पायथन 3.x के लिए, आपको संभवतः उपयोग करना होगा pip3 install pyautoguiया python3 -m pip install pyautogui


आप कॉल करना चाहते हैं pyautogui.moveTo(x, y)क्योंकि move()कर्सर को उसकी वर्तमान स्थिति के सापेक्ष ले जाता है।
अल स्वेगार्ट

आह, क्षमा करें, मैंने आपकी मूल टिप्पणी को गलत समझा। हां, दोनों कार्य काम करते हैं। वर्तमान कर्सर स्थान के सापेक्ष चलते moveTo()समय एक निरपेक्ष स्थान पर move()जाता है।
अल स्वेगार्ट

1

एक अन्य विकल्प माउस लाइब्रेरी होगा , मैं व्यक्तिगत रूप से इसका उपयोग करता हूं क्योंकि यह अपेक्षाकृत सरल और क्रॉस-प्लेटफॉर्म है।

यहाँ आप इसका उपयोग कैसे कर सकते हैं:

import mouse
# move 100 right and 100 down with a duration of 0.5 seconds
mouse.move(100, 100, absolute=False, duration=0.5)
# left click
mouse.click('left')
# right click
mouse.click('right')

यहाँ स्रोत है: पायथन में अपने माउस को कैसे नियंत्रित करें


1

स्वीकृत उत्तर ने मेरे लिए काम किया लेकिन यह अस्थिर था (कभी-कभी क्लिक पुन: व्यवस्थित नहीं होता) इसलिए मैंने एक अतिरिक्त MOUSEEVENTF_LEFTUP जोड़ा । तब यह मज़बूती से काम कर रहा था

import win32api, win32con
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)

0

बहुत आसान 1- स्थापित pakage:

pip install mouse

2- परियोजना में पुस्तकालय जोड़ें:

import mouse

3- उदाहरण के लिए इसका उपयोग करें:

mouse.right_click()

इस url में सभी फ़ंक्शन का वर्णन करें जिन्हें आप इसका उपयोग कर सकते हैं:

https://github.com/boppreh/mouse

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.