পাইথন দিয়ে মাউস নিয়ন্ত্রণ করছে


206

পাইথনের মাউস কার্সারটিকে কীভাবে নিয়ন্ত্রণ করতে হয়, অর্থাৎ এটি নির্দিষ্ট অবস্থানে নিয়ে যায় এবং উইন্ডোজ এর অধীনে ক্লিক করুন?


1
আপনি কি ব্যবহারকারীদের হস্তক্ষেপ ছাড়াই কোডে মাউস আন্দোলন করতে চান?
রাহুল

আরও তথ্য সত্যই সহায়ক হবে ...
গ্যাব্রিয়েল হারলি

আমি উইন্ডোজে দেখেছি এবং আমি কোনও টুলকিট ব্যবহার করি না। আমি পাইথনে সত্যিই নতুন এবং আমি এর আগে কখনও কোনও জিইউআইয়ের সাথে কাজ করি না। আমি কোথা থেকে শুরু করব? আমি কোন মানুয়াল পড়া উচিত?
সাশা

2
কেন এটি করার জন্য আপনার অজগর দরকার, আপনি নিজেই তা করতে পারেন? আরও গুরুতর নোটের ভিত্তিতে, আপনার এটির প্রয়োজন কেন, উদ্দেশ্য কী, তার আরও কিছু বিশদ দুর্দান্ত হবে
অনুরাগ ইউনিয়াল

2
কেবল এফওয়াইআই যদি আপনি নিজের মেশিনটিকে লক করা থেকে রক্ষা করতে এটি ব্যবহার করে থাকেন তবে আপনি নিজের সংস্থা বা সংস্থাগুলির সুরক্ষা নীতি লঙ্ঘন করতে পারেন কারণ এটি স্বয়ংক্রিয় কম্পিউটার লকিংয়ের বৈশিষ্ট্যগুলিকে সঙ্কুচিত করার একটি মাধ্যম। Ive এটিকে কিছু জায়গায় ব্যবহার করেছেন কোনও সমস্যা নেই কেবল সর্বদা আপনার সিস অ্যাডমিনগুলি দিয়ে পরীক্ষা করে নেওয়া নিশ্চিত করুন। আমি দেখেছি লোকেরা এই জাতীয় ছোটখাট কাজের কারণে তাদের চাকরি হারাতে পারে।
AlienAnarchist

উত্তর:


329

উইনএক্সপি , পাইথন ২.6 ( আমার ক্ষেত্রে পাইওয়ুইন -2২-১14.উই।

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
@ অবসেসিভ এসএসওℲ কেবলমাত্র মাউসইভেন্টফ_এবসলুট পতাকাটি সরিয়ে ফেলুন। বিশদগুলির জন্য: এমএসডিএন.মাইক্রোসফট
ফ্যালকন

আমি কি এই লাইব্রেরিটি মাউসের গতি / ত্বরণ নিয়ন্ত্রণ করতে ব্যবহার করতে পারি?
কেউ 21

এটিতে 50+ উইন্ডোজ বাক্স (ডিজিটাল সিগনেজ কিওস্ক) জুড়ে অ-মানক পাইথন মডিউলগুলির ইনস্টলেশন (এবং সম্পর্কিত পরিচালনার পর্যালোচনা এবং অনুমোদনের) প্রয়োজন না হওয়ার সুবিধা ছিল।
brichins

4
python3.xকাজগুলিতেও পরীক্ষিত , উত্তরটি
নির্দ্বিধায় নির্ধারণ করুন

132

পাইআউটোজিইউআই মডিউল দিয়ে চেষ্টা করুন । এটি মাল্টিপ্লাটফর্ম।

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

সমস্ত উইন 32 আইকন স্টাফের মধ্য দিয়ে যাওয়ার চেয়ে এটি অনেক সহজ।


14
গ্রেট! এটি মাল্টি প্ল্যাটফর্ম!
les

পিয়াটোগুই একটি দুর্দান্ত মডিউল, তবে দুর্ভাগ্যক্রমে খুব ধীর। উবুন্টুতে এটি প্রতি সেকেন্ডে 2-3 বার কার্সার স্থানান্তর করে। অবিশ্বাস্য! পাইউসারিনপুট 1000x দ্রুত।
ভ্লাদিস্লাভ সাবচেঙ্কো

1
Pyautogui ইনস্টল করার চেষ্টা মানুষের জন্য, এখানে দেখুন stackoverflow.com/questions/5892297/... এবং আপনার কমান্ড সামনে উবুন্টু করা আপনার কাছে অনুমতি সংক্রান্ত সমস্যা রয়েছে নিশ্চিত করুন।
retodareevil

5
সুরক্ষা বৈশিষ্ট্য যা প্রতিটি কলের পরে 0.1 সেকেন্ড বিরতি যোগ করে এমন সুরক্ষা বৈশিষ্ট্যের কারণে "পাইআউটোজিআইআই ধীর গতি"। যদি আপনার স্ক্রিপ্টটি নিয়ন্ত্রণের বাইরে চলে যায় তবে আপনি এটি বন্ধ করতে 0.1 টি সেকেন্ডের মধ্যে মাউসটিকে উপরের বাম কোণে স্ল্যাম করতে পারেন। এটি নিষ্ক্রিয় করতে, পিউটোগুই চালান Aপাসু = 0 (যদিও এটি প্রস্তাবিত নয়, কারণ আপনি স্ক্রিপ্টটি থামানোর জন্য মাউস / কীবোর্ড ব্যবহার করতে পারবেন না))
আল সুইগার্ট ২৪'১৮

76

আপনি মাউস বা যে কোনও জিআইআই নিয়ন্ত্রণের জন্য উইন 32 এপিস ব্যবহার করতে win32apiবা ctypesমডিউলটি ব্যবহার করতে পারেন

এখানে 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)

টাইপ ব্যবহার করে ক্লিক করুন:

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
আপনার সিটিপস কোডটি কোনও অতিরিক্ত লাইব্রেরি ছাড়াই আমার জন্য কাজ করেছিল! (উইন্ডোজ 7 এ অজগর 2.6)
ইন্ট্রিপিয়ন

1
কোনও বাহ্যিক গ্রন্থাগার ব্যবহার ছাড়াই! আপনাকে ধন্যবাদ
অক্ষত আগরওয়াল

2
ধন্যবাদ! আমি দাঁড়াতে পারছি না যে 3 য় পক্ষের লাইব্রেরি রয়েছে যা দিয়ে আপনি এটি করতে পারেন, তবে 3 টি লাইব্রেরি ইনস্টল করতে বা সমস্যা সমাধানে মাতামাতি করছে। এই সিটিপস সলিউশনটি প্রথম নেটিভ অজগর সমাধান এবং এটি আমি যেভাবে এসেছি তার চেয়ে ভাল কাজ করে।
ডাকপঞ্চার

ডকুমেন্টেশন কোথায় SetCursorPos?
আর্টঅফ ওয়ারফেয়ার

22

আর একটি বিকল্প হ'ল ক্রস-প্ল্যাটফর্ম অটোপাই প্যাকেজটি ব্যবহার করা । এই প্যাকেজের মাউসটি সরানোর জন্য দুটি পৃথক বিকল্প রয়েছে:

এই কোড স্নিপেট তাত্ক্ষণিকভাবে কার্সারকে অবস্থানে নিয়ে যাবে (200,200):

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

আপনি যদি পরিবর্তে কার্সারটি দৃশ্যমানভাবে কোনও নির্দিষ্ট স্থানে নিয়ে যেতে চান তবে আপনি স্মুথ_মোভ আদেশটি ব্যবহার করতে পারেন:

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

21

ক্রস প্ল্যাটফর্ম পাইমাউসটি দেখুন: https://github.com/pepijndevos/PyMouse/


8
PyMouse সঙ্গে বাতিল করা হয়েছে PyUserInput তড়কা ঠিক অনুরোধ, ব্যবহার এবং ক্রস প্ল্যাটফর্ম সহজ। বড় +1
ব্যবহারকারী 336851

@ ব্যবহারকারী 336851, কীভাবে tap spaceএবং tap screen shot keyপাইউসওয়্যার ইনপুট ব্যবহার করে জানেন?
ব্যবহারকারী 3768495

@ ব্যবহারকারী 336851, এই মুহুর্তে 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();লক্ষ্য (আবেদনের উপর নির্ভর করে) প্রেস এবং রিলিজের মধ্যে ঘুম () কল প্রয়োজন হতে পারে বা নাও হতে পারে।
ব্যবহারকারী 336851

4
@ কোপাস - আপনার গুগলে প্রদর্শিত ফলাফলের অর্থ কিছুই নয়। আপনি একটি বুদ্বুদ মধ্যে আছেন। এটি একই শব্দটির জন্য একটি ডাকডকগো অনুসন্ধানে প্রদর্শিত হবে - এটি বাস্তব something এটি এমন কিছু যা প্রত্যেকে নিজের জন্য পুনরুত্পাদন করতে এবং দেখতে পারে। এটাই মেটা।
আর্টঅফ ওয়ারফেয়ার

1
ভিএনসি সেশনে মাউস নিয়ন্ত্রণ করতে আপনার ডিসপ্লে নম্বরটিও প্রয়োজন যেমন "ডি = ডিসপ্লে। ডিসপ্লে (': 1')" যেখানে: 1 হ'ল ডিসপ্লে নম্বর।
জাফার

12

উইন্ডোজ এবং ম্যাক উভয়ের জন্য পাইপুট হ'ল সেরা সমাধান। প্রোগ্রাম করা সহজ, এবং খুব ভাল কাজ করে।

উদাহরণ স্বরূপ,

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)

আমি কেবল একটি উইন্ডোজ কম্পিউটারে একটি পুরানো প্রোগ্রাম চালানোর চেষ্টা করেছি এবং এটি কার্যকর হয়নি, সুতরাং দয়া করে ব্যবহার করার আগে এটি পরীক্ষা করে দেখুন। এই প্রোগ্রামটি অন্তত উভয়কে সমর্থন করার দাবি করে।
প্রো প্রশ্ন

আমি কিছু পরীক্ষা করেছি এবং এটি প্রমাণিত হয়েছে যে আমার সমস্যাটি হ'ল ম্যাকের উপর, স্থানাঙ্কিক মান হিসাবে ভাসমান হওয়া ঠিক কাজ করে তবে উইন্ডোজে স্থানাঙ্কগুলি পূর্ণসংখ্যা হওয়া দরকার। এই মডিউলটি ক্রস প্ল্যাটফর্ম।
প্রো প্রশ্ন

তারা এটি উন্নত করতে পারে কিনা তা দেখার জন্য আমি গিথুব
Pro Q

দেখে মনে হচ্ছে সমস্যাটি ঠিক হয়ে গেছে since
প্রো প্রশ্ন

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()

বৈশিষ্ট্য

  • সমস্ত ইঁদুর ডিভাইসে গ্লোবাল ইভেন্ট হুক (ফোকাস নির্বিশেষে ইভেন্টগুলি ক্যাপচার করে)।
  • শুনুন এবং মাউস ইভেন্ট প্রেরণ।
  • উইন্ডোজ এবং লিনাক্সের সাথে কাজ করে (সুডোর প্রয়োজন)।
  • খাঁটি পাইথন, সংকলনের জন্য কোনও সি মডিউল নেই।
  • জিরো নির্ভরতা। তাত্ক্ষণিকভাবে ইনস্টল করতে এবং স্থাপন করতে, কেবল ফাইলগুলি অনুলিপি করুন।
  • পাইথন 2 এবং 3
  • উচ্চ স্তরের এপিআই অন্তর্ভুক্ত করে (যেমন রেকর্ড এবং প্লে।
  • ইভেন্টগুলি স্বয়ংক্রিয়ভাবে পৃথক থ্রেডে ক্যাপচার হয়, মূল প্রোগ্রামটি অবরুদ্ধ করে না।
  • পরীক্ষিত এবং নথিভুক্ত।

2

আপনি যদি মাউসটি সরাতে চান তবে এটি ব্যবহার করুন:

import pyautogui
pyautogui.moveTo(x,y)

আপনি যদি ক্লিক করতে চান তবে এটি ব্যবহার করুন:

import pyautogui
pyautogui.click(x,y)

আপনি যদি pyautoguiইনস্টল না করে থাকেন , আপনার অবশ্যই সিএমডির সাথে পাইথন যুক্ত থাকতে হবে। সিএমডি যান এবং লিখুন:pip install pyautogui

এটি pyautoguiপাইথন ২.x এর জন্য ইনস্টল করবে।

পাইথন ৩.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

গৃহীত উত্তরটি আমার পক্ষে কাজ করেছিল তবে এটি অস্থির ছিল (কখনও কখনও ক্লিকগুলি রেজিস্টার করতে পারে না) তাই আমি একটি অতিরিক্ত মাউসইভেন্টএফএলএফটিআপ যোগ করেছি । তারপরে এটি নির্ভরযোগ্যভাবে কাজ করছিল

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- ইনস্টল প্যাকেজ:

pip install mouse

2- প্রকল্পে লাইব্রেরি যুক্ত করুন:

import mouse

3- উদাহরণস্বরূপ এটি ব্যবহার করুন:

mouse.right_click()

এই url এ আপনি এটি ব্যবহার করতে পারেন এমন সমস্ত ফাংশন বর্ণনা করে:

https://github.com/boppreh/mouse

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.