หนึ่งจะควบคุมเคอร์เซอร์ของเมาส์ใน Python เช่นย้ายไปยังตำแหน่งที่แน่นอนและคลิกภายใต้ Windows ได้อย่างไร
หนึ่งจะควบคุมเคอร์เซอร์ของเมาส์ใน Python เช่นย้ายไปยังตำแหน่งที่แน่นอนและคลิกภายใต้ Windows ได้อย่างไร
คำตอบ:
ทดสอบบน WinXP, Python 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)
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))
ในประสบการณ์ของฉันสำหรับการรวมที่ดีขึ้นกับแอปพลิเคชันอื่น ๆ เช่นเกม
python3.x
งานด้วยเช่นกัน
ลองด้วย โมดูล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
คุณสามารถใช้win32api
หรือctypes
โมดูลเพื่อใช้ win32 apis สำหรับควบคุมเมาส์หรือ gui ใด ๆ
นี่คือตัวอย่างที่สนุกในการควบคุมเมาส์โดยใช้ 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
SetCursorPos
อะไร?
อีกตัวเลือกหนึ่งคือการใช้แพ็คเกจ AutoPyข้ามแพลตฟอร์มแพคเกจแพ็คเกจนี้มีสองตัวเลือกที่แตกต่างกันสำหรับการเลื่อนเมาส์:
ข้อมูลโค้ดนี้จะเลื่อนเคอร์เซอร์ไปที่ตำแหน่งทันที (200,200):
import autopy
autopy.mouse.move(200,200)
หากคุณต้องการให้เคอร์เซอร์เคลื่อนย้ายอย่างชัดเจนทั่วทั้งหน้าจอไปยังตำแหน่งที่ระบุคุณสามารถใช้คำสั่ง smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
ตรวจสอบ PyMouse แพลตฟอร์มข้าม: https://github.com/pepijndevos/PyMouse/
tap space
และtap screen shot key
โดยใช้ PyUswerInput?
PyUserInput
เสีย ไม่สามารถพูดได้ว่ามันใช้งานได้ดีหรือไม่เพราะฉันไม่สามารถติดตั้งได้เนื่องจากการพึ่งพาที่ขาด
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
ที่มา: งูหลามย้ายเมาส์ใน 5 บรรทัดของรหัส (Linux เท่านั้น)
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();
การเรียก sleep () ระหว่างการกดและปล่อยอาจจะหรืออาจไม่จำเป็นขึ้นอยู่กับแอปพลิเคชันเป้าหมาย
Pynputเป็นทางออกที่ดีที่สุดที่ฉันพบทั้งสำหรับ Windows และ Mac ง่ายสุดในการเขียนโปรแกรมและทำงานได้ดีมาก
ตัวอย่างเช่น,
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)
ฟังก์ชั่นที่รวดเร็วและสกปรกซึ่งจะทำให้คลิกซ้ายได้ทุกที่ทุกclicks
เวลาบน Windows 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.
ตั้งแต่ปี2020คุณสามารถใช้เมาส์ได้ :
import mouse
mouse.move("500", "500")
mouse.left_click()
คุณสมบัติ
หากคุณต้องการเลื่อนเมาส์ใช้สิ่งนี้:
import pyautogui
pyautogui.moveTo(x,y)
หากคุณต้องการคลิกใช้สิ่งนี้:
import pyautogui
pyautogui.click(x,y)
หากคุณยังไม่ได้pyautogui
ติดตั้งคุณต้องมีงูใหญ่ติดอยู่กับ CMD ไปที่ CMD และเขียน:pip install pyautogui
สิ่งนี้จะติดตั้งpyautogui
สำหรับ Python 2.x
สำหรับงูหลาม 3.x คุณอาจจะต้องใช้หรือpip3 install pyautogui
python3 -m pip install pyautogui
pyautogui.moveTo(x, y)
เพราะmove()
เลื่อนเคอร์เซอร์เทียบกับตำแหน่งปัจจุบัน
moveTo()
ย้ายไปยังตำแหน่งที่แน่นอนในขณะที่move()
ย้ายสัมพันธ์กับตำแหน่งเคอร์เซอร์ปัจจุบัน
อีกทางเลือกหนึ่งคือห้องสมุดเมาส์ฉันใช้มันเองเพราะมันค่อนข้างง่ายและข้ามแพลตฟอร์ม
นี่คือวิธีการใช้งาน:
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')
นี่คือแหล่งที่มา: วิธีควบคุมเมาส์ของคุณใน Python
คำตอบที่ได้รับการยอมรับทำงานให้ฉัน แต่มันก็ไม่แน่นอน (บางครั้งจะไม่คลิก regsiter) ดังนั้นฉันเพิ่มเพิ่มเติม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)
ง่ายมาก 1- ติดตั้ง pakage:
pip install mouse
2- เพิ่มไลบรารีในโครงการ:
import mouse
3 - ใช้มันเช่น:
mouse.right_click()
ใน url นี้อธิบายถึงฟังก์ชั่นทั้งหมดที่คุณสามารถใช้ได้: