Apakah Anda perlu membuat gerakan mouse dalam kode tanpa campur tangan pengguna?
rahul
Informasi lebih lanjut akan sangat membantu ...
Gabriel Hurley
Saya bekerja di Windows dan saya tidak menggunakan toolkit apa pun. Saya benar-benar baru di Python dan saya tidak pernah bekerja dengan GUI sebelumnya. Dari mana saya memulai? Mannual apa yang harus saya baca?
Sasha
2
mengapa Anda perlu python untuk melakukan itu, Anda bisa melakukannya sendiri? pada catatan yang lebih serius, mengapa Anda membutuhkannya, apa tujuannya, sedikit lebih detail akan lebih bagus
Anurag Uniyal
2
Hanya FYI jika Anda menggunakan ini untuk menjaga mesin Anda dari penguncian Anda bisa melanggar kebijakan keamanan perusahaan atau organisasi Anda karena ini merupakan cara untuk menghindari properti penguncian komputer otomatis. Saya pernah menggunakan ini di beberapa tempat, tidak ada masalah, selalu pastikan untuk memeriksa dengan Admin Sys Anda. Saya pernah melihat orang kehilangan pekerjaan karena hal-hal kecil seperti ini.
AlienAnarchist
Jawaban:
329
Diuji pada WinXP, Python 2.6 (3.x juga diuji) setelah menginstal pywin32 (pywin32-214.win32-py2.6.exe dalam kasus saya):
win32api.SetCursorPos((x,y))lebih baik diganti oleh win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))pengalaman saya untuk integrasi yang lebih baik dengan aplikasi lain seperti game.
dapatkah saya menggunakan perpustakaan ini untuk mengontrol kecepatan / akselerasi mouse?
Seseorang Seseorang
Ini memiliki keuntungan karena tidak memerlukan instalasi (dan tinjauan manajemen serta persetujuan terkait) modul Python non-standar di 50+ kotak windows (kios signage digital).
brichins
4
diuji dalam python3.xkarya juga, jangan ragu untuk mengedit jawabannya
Pyautogui adalah modul yang hebat, tapi sayangnya sangat lambat. Di Ubuntu, kursor bergerak 2-3 kali per detik. Luar biasa! Pyuserinput 1000x lebih cepat.
Vladyslav Savchenko
1
Untuk orang yang mencoba memasang pyautogui, lihat di sini stackoverflow.com/questions/5892297/... dan pastikan untuk menempatkan sudo di depan perintah Anda jika Anda memiliki masalah izin.
retodaredevil
5
"PyAutoGUI lambat" karena fitur keamanan yang menambahkan jeda 0,1 detik setelah setiap panggilan. Jika skrip Anda tidak terkendali, Anda dapat membanting mouse ke sudut kiri atas dalam 0,1 detik untuk menghentikannya. Untuk menonaktifkan ini, jalankan pyautogui.PAUSE = 0 (meskipun ini tidak disarankan, karena Anda tidak dapat menggunakan mouse / keyboard untuk menghentikan skrip.)
Al Sweigart
75
Anda dapat menggunakan win32apiatau ctypesmodul untuk menggunakan win32 apis untuk mengendalikan mouse atau gui apa pun
Berikut ini adalah contoh yang menyenangkan untuk mengontrol mouse menggunakan 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)
Satu klik menggunakan 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
kode ctypes Anda bekerja untuk saya tanpa perpustakaan tambahan! (python 2.6 di windows 7)
intrepion
1
Tanpa menggunakan perpustakaan eksternal! Terima kasih
Akshat Agarwal
2
Terima kasih! Saya tidak tahan bahwa ada seperti 3 perpustakaan pihak ke-3 yang dapat Anda lakukan dengan ini, namun semua 3 perpustakaan menjengkelkan untuk menginstal atau memecahkan masalah. Solusi ctypes ini adalah solusi python asli pertama dan bekerja lebih baik daripada yang saya temui.
DuckPuncher
Di mana dokumentasi untuk SetCursorPos?
ArtOfWarfare
22
Pilihan lain adalah menggunakan paket AutoPy lintas-platform . Paket ini memiliki dua opsi berbeda untuk menggerakkan mouse:
Cuplikan kode ini akan langsung memindahkan kursor ke posisi (200.200):
import autopy
autopy.mouse.move(200,200)
Jika Anda ingin kursor bergerak melintasi layar ke lokasi tertentu, Anda dapat menggunakan perintah smooth_move:
PyMouse telah digantikan dengan PyUserInput , sesuai persis dengan permintaan, mudah digunakan dan lintas platform. Besar +1
pengguna336851
@ user336851, apakah Anda tahu cara menggunakan tap spacedan tap screen shot keymenggunakan PyUswerInput?
user3768495
@ user336851, Saat ini PyUserInputrusak. Tidak dapat mengatakan apakah itu berfungsi dengan baik atau tidak karena saya bahkan tidak dapat menginstalnya karena dependensi yang rusak.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Sebuah google untuk "Python mengendalikan gerakan mouse" sekarang menemukan halaman ini, bagaimana meta.
Copas
2
Demi kelengkapan, karena pertanyaan juga diminta untuk mensimulasikan klik mouse, saya akan menambahkan: 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();panggilan sleep () antara pers dan rilis mungkin diperlukan atau mungkin tidak diperlukan tergantung pada aplikasi target.
user336851
4
@Copas - Hasil yang muncul di Google Anda tidak ada artinya. Anda berada dalam gelembung. Ini muncul dalam pencarian DuckDuckGo untuk istilah yang sama - itu sesuatu yang nyata. Itu adalah sesuatu yang dapat direproduksi dan dilihat sendiri oleh orang lain. Itu meta.
ArtOfWarfare
1
Untuk mengontrol mouse dalam sesi VNC, Anda memerlukan nomor tampilan juga seperti "d = display.Display (': 1')" di mana: 1 adalah nomor tampilan.
Zafer
12
Pynput adalah solusi terbaik yang saya temukan, baik untuk Windows maupun untuk Mac. Sangat mudah diprogram, dan bekerja dengan sangat baik.
Sebagai contoh,
from pynput.mouse importButton,Controller
mouse =Controller()# Read pointer positionprint('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)
Saya hanya mencoba menjalankan program lama di komputer Windows dan tidak berhasil, jadi silakan lakukan pengujian sebelum menggunakannya. Program ini setidaknya mengklaim mendukung keduanya.
Pro Q
Saya melakukan beberapa pengujian, dan ternyata masalah saya adalah bahwa pada Mac, mengapung sebagai nilai koordinat berfungsi dengan baik, tetapi pada Windows, koordinatnya harus bilangan bulat. Modul ini adalah lintas platform.
Fungsi cepat dan kotor yang akan mengklik kiri di mana saja clickspada Windows 7 menggunakan ctypesperpustakaan. Tidak diperlukan unduhan.
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.
Anda ingin memanggil pyautogui.moveTo(x, y)karena move()menggerakkan kursor relatif ke posisi saat ini.
Al Sweigart
Ah, maaf saya salah mengerti komentar asli Anda. Ya, kedua fungsi berfungsi. moveTo()bergerak ke lokasi absolut, sementara move()bergerak relatif ke lokasi kursor saat ini.
Al Sweigart
1
Alternatif lain adalah perpustakaan mouse , saya pribadi menggunakannya karena relatif sederhana dan lintas platform.
Inilah cara Anda dapat menggunakannya:
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')
Jawaban yang diterima berfungsi untuk saya tetapi tidak stabil (terkadang klik tidak akan berhasil) jadi saya menambahkan MOUSEEVENTF_LEFTUP tambahan . Kemudian itu bekerja dengan andal
Jawaban:
Diuji pada WinXP, Python 2.6 (3.x juga diuji) setelah menginstal pywin32 (pywin32-214.win32-py2.6.exe dalam kasus saya):
sumber
win32api.SetCursorPos((x,y))
lebih baik diganti olehwin32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
pengalaman saya untuk integrasi yang lebih baik dengan aplikasi lain seperti game.python3.x
karya juga, jangan ragu untuk mengedit jawabannyaCoba dengan modul PyAutoGUI . Ini multi platform.
Sehingga:
Ini juga memiliki fitur lain:
Ini jauh lebih mudah daripada melalui semua hal win32con.
sumber
Anda dapat menggunakan
win32api
atauctypes
modul untuk menggunakan win32 apis untuk mengendalikan mouse atau gui apa punBerikut ini adalah contoh yang menyenangkan untuk mengontrol mouse menggunakan win32api:
Satu klik menggunakan ctypes:
sumber
SetCursorPos
?Pilihan lain adalah menggunakan paket AutoPy lintas-platform . Paket ini memiliki dua opsi berbeda untuk menggerakkan mouse:
Cuplikan kode ini akan langsung memindahkan kursor ke posisi (200.200):
Jika Anda ingin kursor bergerak melintasi layar ke lokasi tertentu, Anda dapat menggunakan perintah smooth_move:
sumber
Lihat platform silang PyMouse: https://github.com/pepijndevos/PyMouse/
sumber
tap space
dantap screen shot key
menggunakan PyUswerInput?PyUserInput
rusak. Tidak dapat mengatakan apakah itu berfungsi dengan baik atau tidak karena saya bahkan tidak dapat menginstalnya karena dependensi yang rusak.Linux
Sumber: Python mouse bergerak dalam 5 baris kode (hanya Linux) .
sumber
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();
panggilan sleep () antara pers dan rilis mungkin diperlukan atau mungkin tidak diperlukan tergantung pada aplikasi target.Pynput adalah solusi terbaik yang saya temukan, baik untuk Windows maupun untuk Mac. Sangat mudah diprogram, dan bekerja dengan sangat baik.
Sebagai contoh,
sumber
Fungsi cepat dan kotor yang akan mengklik kiri di mana saja
clicks
pada Windows 7 menggunakanctypes
perpustakaan. Tidak diperlukan unduhan.sumber
Mulai tahun 2020 , Anda dapat menggunakan mouse :
fitur
sumber
Jika Anda ingin memindahkan mouse, gunakan ini:
Jika Anda ingin mengklik, gunakan ini:
Jika Anda belum
pyautogui
menginstal, Anda harus memasang python ke CMD. Pergi ke CMD dan tulis:pip install pyautogui
Ini akan menginstal
pyautogui
untuk Python 2.x.Untuk Python 3.x, Anda mungkin harus menggunakan
pip3 install pyautogui
ataupython3 -m pip install pyautogui
.sumber
pyautogui.moveTo(x, y)
karenamove()
menggerakkan kursor relatif ke posisi saat ini.moveTo()
bergerak ke lokasi absolut, sementaramove()
bergerak relatif ke lokasi kursor saat ini.Alternatif lain adalah perpustakaan mouse , saya pribadi menggunakannya karena relatif sederhana dan lintas platform.
Inilah cara Anda dapat menggunakannya:
Inilah sumbernya: Cara Mengontrol Mouse Anda dengan Python
sumber
Jawaban yang diterima berfungsi untuk saya tetapi tidak stabil (terkadang klik tidak akan berhasil) jadi saya menambahkan MOUSEEVENTF_LEFTUP tambahan . Kemudian itu bekerja dengan andal
sumber
sangat mudah 1- instal pakage:
2- tambahkan perpustakaan ke proyek:
3 - menggunakannya misalnya:
dalam url ini jelaskan semua fungsi yang dapat Anda gunakan:
https://github.com/boppreh/mouse
sumber