鼠标记录/重放 不完全脚本

软件和网站开发以及相关技术探讨
回复
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

鼠标记录/重放 不完全脚本

#1

帖子 xiooli » 2009-10-17 21:20

RT
需要安装python-xlib库
使用:
1) 记录鼠标轨迹:

代码: 全选

python smartmouse.py -r <record time> <storage file>
2) 重放鼠标轨迹:

代码: 全选

python smartmouse.py -p <storage file>
记录文件格式如下:

代码: 全选

6,8,sleep:2
6,8,click:1
6,8,sleep:3
315,4,click:1
315,4,sleep:2
800,662,click:3
800,662,sleep:2
780,662,click:1
前面两个分别是屏幕的x和y坐标,从第三个起是可选的,支持click, release, press 和 sleep
click, release, press 后边跟“:”,“:”后面的数字 1 表示左键,2 是中键,3 是右键, 4 是向上滚滚轮, 5 是向下滚滚轮。
sleep后面数字表示在该坐标点停留的时间,单位秒。

未完成部分,自动记录鼠标轨迹时候尚不能记录鼠标按键事件,有懂xlib的童鞋请提出建议或解决方法 :em42

源码:

代码: 全选

#!/usr/bin/python
#-*- coding: utf-8 -*-

# name: smartmouse.py
# useage: 
#       1) 记录鼠标轨迹
#           python smartmouse.py -r <record time> <storage file>
#       2) 重放鼠标轨迹
#           python smartmouse.py -p <storage file>
#
# coded by xiooli<xioooli[at]yahoo.com.cn>
# 2009.10.17

import Xlib.display as ds
import Xlib.X as X
import Xlib.ext.xtest as xtest

class mouse():
    '''mouse class which contains couple of mouse methods'''
    def __init__(self):
        self.display = ds.Display()

    def mouse_press(self,button):
        '''button= 1 left, 2 middle, 3 right, 4 middle up, 5 middle down'''
        xtest.fake_input(self.display,X.ButtonPress, button)
        self.display.sync()
    def mouse_release(self,button):
        '''button= 1 left, 2 middle, 3 right, 4 middle up, 5 middle down'''
        xtest.fake_input(self.display,X.ButtonRelease, button)
        self.display.sync()
    def mouse_click(self,button):
        '''button= 1 left, 2 middle, 3 right, 4 middle up, 5 middle down'''
        self.mouse_press(button)
        self.mouse_release(button)

    def goto_xy(self,x, y):
        '''move to position x y'''
        xtest.fake_input(self.display, X.MotionNotify, x = x, y = y)
        self.display.flush()

    def pos(self):
        '''get mouse position'''
        coord = self.display.screen().root.query_pointer()._data
        return (coord["root_x"],coord["root_y"])
    
    def screen_size(self):
        '''get screen size'''
        width = self.display.screen().width_in_pixels
        height = self.display.screen().height_in_pixels
        return (width,height)

i=0
def elapse():
    '''get elapse time, gap is 0.1 second'''
    global i
    i+=0.1
    return i

if __name__ == "__main__":
    
    import sys
    import time as tm
    
    t=0
    m=mouse()
    mouse_ev=""
    ev=[]
    m=mouse()
    EVDIC={ "press":m.mouse_press, 
            "release":m.mouse_release, 
            "click":m.mouse_click, 
            "sleep":tm.sleep }

    if sys.argv[1] == "-r":
        try:
            rctm=sys.argv[2]
        except:
            sys.exit(1)
        try:
            logfile=sys.argv[3]
        except:
            logfile="./mouse.log"

        f=open(logfile,"w")
        while t <= float(rctm):
            t=elapse()
            ps=m.pos()
            f.write(str(ps[0])+","+str(ps[1])+"\n")
            tm.sleep(0.1)
        f.close()
    elif sys.argv[1] == "-p":
        try:
            f=open(sys.argv[2])
        except:
            sys.exit(2)

        coord=f.readlines()
        f.close()

        for pos_xy in coord:
            try:
                pos_x,pos_y=pos_xy.replace("\n","").split(",")
            except ValueError:
                pos_x,pos_y,mouse_ev=pos_xy.replace("\n","").split(",")
                ev=mouse_ev.split(":")

            m.goto_xy(int(pos_x),int(pos_y))
            
            if ev and ev[1]:
                if ev[0] != "sleep":
                    EVDIC[ev[0]](int(ev[1]))
                else:
                    EVDIC[ev[0]](float(ev[1]))
                ev=[]

            tm.sleep(0.1)
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 鼠标记录/重放 不完全脚本

#2

帖子 eexpress » 2009-10-17 21:25

do what?
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 鼠标记录/重放 不完全脚本

#3

帖子 xiooli » 2009-10-17 21:28

eexpress 写了:do what?
就是记录鼠标的移动到一个文件里面,然后又可以重放这个记录阿。
类似于按键精灵之类的
头像
shellex
帖子: 2180
注册时间: 2007-02-18 19:33
系统: OSX
来自: lyric.im
联系:

Re: 鼠标记录/重放 不完全脚本

#4

帖子 shellex » 2009-10-17 21:34

赞小萝莉,快点搞个GUI的测试软件出来
既然你诚心诚意地问了
我就大慈大悲地告诉你
为了防止世界被破坏
为了维护世界的和平
贯彻爱与真实的罪恶
可爱而又迷人的反派角色
武藏,小次郎
我们是穿越银河的火箭队,白洞白色的明天在等着我们。就是这样!!喵~~
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 鼠标记录/重放 不完全脚本

#5

帖子 xiooli » 2009-10-18 21:48

:em20 没有几个人赏识。。。
回复