当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 鼠标记录/重放 不完全脚本
帖子发表于 : 2009-10-17 21:20 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
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)


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 鼠标记录/重放 不完全脚本
帖子发表于 : 2009-10-17 21:25 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
do what?


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 鼠标记录/重放 不完全脚本
帖子发表于 : 2009-10-17 21:28 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
eexpress 写道:
do what?

就是记录鼠标的移动到一个文件里面,然后又可以重放这个记录阿。
类似于按键精灵之类的


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 鼠标记录/重放 不完全脚本
帖子发表于 : 2009-10-17 21:34 
头像

注册: 2007-02-18 19:33
帖子: 2180
地址: lyric.im
系统: OSX
送出感谢: 0 次
接收感谢: 1
赞小萝莉,快点搞个GUI的测试软件出来


_________________
既然你诚心诚意地问了
我就大慈大悲地告诉你
为了防止世界被破坏
为了维护世界的和平
贯彻爱与真实的罪恶
可爱而又迷人的反派角色
武藏,小次郎
我们是穿越银河的火箭队,白洞白色的明天在等着我们。就是这样!!喵~~


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 鼠标记录/重放 不完全脚本
帖子发表于 : 2009-10-18 21:48 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
:em20 没有几个人赏识。。。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译