zoukankan      html  css  js  c++  java
  • python中调用sikuli和java autoit

    注意:适用于62位windows7系统,32位只能作参考

    1.下载sikuli的jar包

    下载地址:https://launchpad.net/sikuli

    我使用的版本为:sikulixsetup-1.1.2.jar

    2.安装sikuli环境

    在D盘新建一个目录sikuli,将sikulixsetup-1.1.2.jar复制到该目录中,双击sikulixsetup-1.1.2.jar文件,

    运行该jar包如下图所示,点击 是

    勾选 Pack2 即安装 sikulix 的 api 包,点击 Setup Now
    点击 确认窗口的 是

     

    安装完成后,sikuli 目录中会自动生成一个 sikulixapi.jar 包,这是以后我们 Python 脚本要使
    用的包,后续需要引用此包
    3.下载 JPype1(调用 Java 程序的 Python 第三方库)
    官方下载地址:https://pypi.org/project/JPype1/
    4.安装 JPype1 第三方库
    离线安装方式(推荐):
    将 JPype1-0.6.3-py3.5-win-amd64.egg.rar 压缩包下载到本地
    下载地址:链接:https://pan.baidu.com/s/1Jy1hfcLITZsjvnZDtMsRfw  提取码:1p3g 
    1)先将 JPype1-0.6.3-py3.5-win-amd64.egg.rar 包解压到 Python35Libsite-packages 目录中(即
    Python 安装目录)
    2)再用记事本修改 easy-install.pth 文件,末尾换行加入:./jpype1-0.6.3-py3.5-win-amd64.egg
    3)重新进入 Python 命令行模式,输入 import jpype 没报错即表示成功
    在线安装方式:
     
    5.JRE 环境配置
    由于利用 Python 加载使用 Jar 包,所以需要开启 JVM(Java 虚拟机)环境,需要配置 Java
    开发环境,环境配置请参见另外一份名为 Python+Eclipse+Selenium 环境搭建的说明文章
    确认如:C:Program FilesJavajdk1.8.0_151jreinserver 目录下有 jvm.dll 文件即可
    6.项目中引用 
    在需要加载使用 JVM 的代码中,加入以下代码即可:

    import jpype
    #引用jvm
    jvm_path=r"C:Program FilesJavajdk1.8.0_151jreinserverjvm.dll"
    #开启jvm
    jpype.startJVM(jvm_path)
    #测试
    jpype.java.lang.System.out.println("Hello world!")
    #关闭虚拟机
    jpype.shutdownJVM()

    常见问题:

    1.命令行中导包提示找不到模块,但 eclipse 中不会报错

    原因:Windows 系统环境未知原因导致

    解决办法:不影响使用可暂不管

    2.命令行中导包没问题,但 eclipse 中启动 JVM 虚拟机时, python 会提示停止运行
    原因:Windows 系统环境未知原因导致
    解决办法:重装系统…..
     
    3.eclipse 中编写好测试脚本后,可运行,但导包时提示 Unresolved import:
    jpype,如下图:
    原因:安装 jpype 第三方库后,未更新 eclipse 对应的解释器
    解决办法:重新配置下解释器,参考下面窗口的步骤,删除了重新配置。如果还是提示
    Unresolved,则关掉脚本重新打开就好了
     
     
     
    https://www.cnblogs.com/jaww/p/9544992.html

    python+autoit用法

     

    一、自己封装的一些使用到的autoit库

    复制代码
    import autoit
    
    class MouseControl(object):
        '''
        AutoIt鼠标相关操作
        '''
        def __init__(self):
            '''
            Constructor
            '''
            
        def click(self, title, text, x, y, button="main", clicks=1):
            '''
            :description 执行鼠标点击操作
            '''
            pos = autoit.win_get_pos(title, text=text)
            autoit.mouse_click(button, x + pos[0], y + pos[1], clicks=clicks)
            
        def move(self, title, text, x, y):
            '''
            :description 移动鼠标指针
            '''
            pos = autoit.win_get_pos(title, text=text)
            autoit.mouse_move(x + pos[0], y + pos[1])
            
        def drag(self, title, text, x1, y1, x2, y2):
            '''
            :description 执行鼠标拖拽操作
            '''
            pos = autoit.win_get_pos(title, text=text)
            autoit.mouse_click_drag(x1 + pos[0], y1 + pos[1], x2 + pos[0], y2 + pos[1])
            
        def wheel(self, direction="up"):
            '''
            :description 产生向上或向下滚动鼠标滚轮事件.仅支持NT/2000/XP及更高.
            '''
            autoit.mouse_wheel(direction)
    
    mouseControl.py
    复制代码
    复制代码
    import autoit
    
    class ProcessControl(object):
        '''
        AutoIt进程相关操作
        '''
        
        def __init__(self, processName):
            '''
            Constructor
            '''
            self.processName = processName
            
        def close(self):
            '''
            :description 终止某个进程
            :return 1:成功; 0:失败.
            '''
            return autoit.process_close(self.processName)
            
        def exists(self):
            '''
            :description 检查指定进程是否存在
            :return PID:成功; 0:进程不存在.
            '''
            return autoit.process_exists(self.processName)
    
    processControl
    复制代码
    复制代码
    import autoit
    
    class WinControl(object):
        '''
        AutoIt窗口相关操作
        '''
    
        def __init__(self, title, text=''):
            '''
            Constructor
            '''
            self.title = title
            self.text = text
            
        def activate(self):
            '''
            :description 激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
            :return PID:窗口存在; 0:窗口不存在.
            '''        
            return autoit.win_activate(self.title, text=self.text)
            
        def close(self):
            '''
            :description 关闭指定窗口.
            :return 1:成功; 0:窗口不存在.
            '''        
            return autoit.win_close(self.title, text=self.text)
            
        def exists(self):
            '''
            :description 检查指定的窗口是否存在.
            :return 1:窗口存在; 0:窗口不存在.
            '''
            return autoit.win_exists(self.title, text=self.text)
            
        def getPos(self):
            '''
            :description 获取指定窗口的坐标位置和大小等属性.
            :return Returns left, top, right, bottom    (x1,y1,x2,y2)
            '''
            return autoit.win_get_pos(self.title, text=self.text)
        
        def getProcess(self):
            '''
            :description 获取指定窗口关联的进程ID(PID).
            :return PID:成功, -1:失败.
            '''
            return autoit.win_get_process(self.title, text=self.text)  
        
        def getText(self, buf_size=256):
            '''
            :description 获取指定窗口中的文本.
            :return  指定窗口里包含的文本:成功; 0:失败(没有匹配的窗口).
            '''        
            return autoit.win_get_text(self.title, buf_size, text=self.text)
              
        def kill(self):
            '''
            :description 强行关闭指定窗口.
            :return  1:无论成功失败.
            '''        
            return autoit.win_kill(self.title, text=self.text)
            
        def move(self, x, y, width, height):
            '''
            :description 移动指定的窗口或调整窗口的大小.
            :return PID:成功, 0:失败(窗口不存在).
            '''
            return autoit.win_move(self.title, x, y, width, height, text=self.text)         
        
        def setState(self, flag):
            '''
            :description 显示,隐藏,最小化,最大化或还原一个窗口.
            :param flag: The "show" flag of the executed program:
    = 显示
    = 最小化/隐藏
    = 最大化
    = 还原
            :return 1:成功, 0:失败(窗口不存在).
            '''
            return autoit.win_set_state(self.title, flag, text=self.text)
            
        def wait(self, timeout=5):
            '''
            :description 暂停脚本的执行直至指定窗口存在(出现)为止.
            timeout 单位为秒.
            :return PID:成功, 0:失败(超时).
            '''
            return autoit.win_wait(self.title, timeout, text=self.text)            
            
        def waitActive(self, timeout=5):
            '''
            :description 暂停脚本的执行直至指定窗口被激活(成为活动状态)为止.
            timeout 单位为秒.
            :return PID:成功, 0:失败(超时).
            '''
            return autoit.win_wait_active(self.title, timeout, text=self.text)         
            
        def waitClose(self, timeout=5):
            '''
            :description 暂停脚本的执行直至所指定窗口不再存在为止.
            timeout 单位为秒.
            :return 1:成功, 0:失败(超时).
            '''
            return autoit.win_wait_close(self.title, timeout, text=self.text)        
            
        def waitNotActive(self, timeout=5):
            '''
            :description 暂停脚本的执行直至指定窗口不是激活状态为止.
            timeout 单位为秒.
            :return 1:成功, 0:失败(超时).
            '''
            return autoit.win_wait_not_active(self.title, timeout, text=self.text)              
            
        def controlClick(self, control, button="main", clicks=1):
            '''
            :description 向指定控件发送鼠标点击命令.
            '''
            autoit.control_click(self.title, control, text=self.text, button=button, clicks=clicks)
            
        def controlCommand(self, control, command, extra="", buf_size=256):
            '''
            :description 向指定控件发送命令.
            :param command, extra:                         :return
                        "IsVisible", ""                    1:可见; 0:不可见
                        "IsEnabled", ""                    1:可用; 0:禁用
                        "ShowDropDown", ""                弹出/下拉 组合框(ComboBox)的列表.
                        "HideDropDown", ""                收回/隐藏 组合框(ComboBox)的列表.
                        "AddString", "string"                在 ListBox 或 ComboBox 的编辑框后面附加指定字符串.
                        "DelString", 出现次序                                删除在 ListBox 或 ComboBox 的编辑框中指定的字符串(从0开始).
                        "FindString", "string"                返回在 ListBox 或 ComboBox 的编辑框中与指定字符串匹配项目的出现次序(从0开始).
                        "SetCurrentSelection", 出现次序            通过指定出现次序(从0开始)把 ListBox 或 ComboBox 的当前选择项设为指定的项目.
                        "SelectString","string"            通过指定字符串把 ListBox 或 ComboBox 的当前选择项设为匹配字符串的项目.
                        "IsChecked", ""                    若目标按钮(复选框/单选框)被选中则返回值为1,否则为0.
                        "Check", ""                        使目标按钮(复选框/单选框)变为选中状态.
                        "UnCheck", ""                        使目标按钮(复选框/单选框)变为非选中状态.
                        "GetCurrentLine", ""                    返回在目标编辑框中插入符(caret,光标)的所在行号.
                        "GetCurrentCol", ""                    返回在目标编辑框中插入符(caret,光标)的所在列号.
                        "GetCurrentSelection", ""                返回 ListBox 或 ComboBox 控件当前选中的项目名.
                        "GetLineCount", ""                        返回目标编辑框中的总行数.
                        "GetLine", 行号                                        返回目标编辑框中指定行的文本内容.
                        "GetSelected", ""                    返回目标编辑框中的(用户用鼠标或其它方式)选定的文本.
                        "EditPaste", 'string'                在目标编辑框中插入符(caret)所在位置后插入指定字符串.
                        "CurrentTab", ""                    返回在 SysTabControl32 控件中当前显示的标签编号(从1开始).
                        "TabRight", ""                        使 SysTabControl32 控件切换到(右边的)下一个标签.
                        "TabLeft", ""                        使 SysTabControl32 控件切换到(左边的)下一个标签. 
                        "SendCommandID", 命令 ID            模拟 WM_COMMAND 消息. 通常用于 ToolbarWindow32 控件 - 使用Au3Info的工具栏标签得到命令ID.
            '''        
            return autoit.control_command(self.title, control, command, buf_size, text=self.text, extra=extra)
            
        def controlListView(self, control, command, extra1, extra2="", buf_size=256):
            '''
            :description 向指定的 ListView32 控件发送命令.
            :param command, extra1, extra2:                         :return
                        "DeSelect", 从[, 到]                        取消选定从"从"开始直到"到"的一个或多个项目. 
                        "FindItem", "搜索字符串" [, 子项目]            返回与给定字符串匹配的项目的位置.若未找到指定字符串则返回值为 -1. 
                        "GetItemCount"                                返回列表中项目的数量. 
                        "GetSelected" [, 选项]                        返回当前选中项目的位置.若 选项=0(默认)则只返回选中的第一个项目;若 选项=1 则返回由竖线"|"作为分隔符的所有选中项目,例如:"0|3|4|10".若没有选中任何项目则返回一个空字符串"". 
                        "GetSelectedCount"                            返回选中项目的数量. 
                        "GetSubItemCount"                            返回子项目的数量. 
                        "GetText", 项目, 子项目                                            返回指定项目/子项目的文本. 
                        "IsSelected", 项目                                                    若指定项目被选中则返回值为1,否则返回值为0. 
                        "Select", 从[, 到]                            选中一个或多个项目(请参考第一个命令). 
                        "SelectAll"                                    选中所有项目. 
                        "SelectClear"                                取消所有项目的选中状态. 
                        "SelectInvert"                                切换当前的选中状态. 
                        "ViewChange", "视图"                        切换当前的视图.可用的视图包括"list"(列表),"details"(详细信息),"smallicons"(小图标),"largeicons"(大图标). 
            '''        
            return autoit.control_list_view(self.title, control, command, buf_size, text=self.text, extra1=extra1, extra2=extra2)        
        
        def controlDisable(self, control):
            '''
            :description 禁用或使某控件变成灰色不可用状态.
            :return 1:成功; 0:失败.
            '''        
            return autoit.control_disable(self.title, control, text=self.text)
            
        def controlEnable(self, control):
            '''
            :description 使灰色按钮/控件变为"可用"状态.
            :return 1:成功; 0:失败.
            '''        
            return autoit.control_enable(self.title, control, text=self.text)        
            
        def controlFocus(self, control):
            '''
            :description 设置输入焦点到指定窗口的某个控件上.
            :return 1:成功; 0:失败.
            '''        
            return autoit.control_focus(self.title, control, text=self.text)  
            
        def controlGetText(self, control):
            '''
            :description 获取指定控件上的文本.
            :return 文本内容:成功; 空:失败.
            '''        
            return autoit.control_get_text(self.title, control, text=self.text)   
            
        def controlSend(self, control, send_text, mode=0 ):    
            '''
            :description 向指定的控件发送字符串.
            :param mode: 0:按特殊字符含义发送(默认); 1:原样发送.
            :return 1:成功; 0:失败(窗口/控件未找到).
            '''        
            return autoit.control_send(self.title, control, send_text, mode, text=self.text)   
            
        def controlSetText(self, control, control_text):
            '''
            :description 修改指定控件的文本.
            :return 1:成功; 0:失败(窗口/控件未找到).
            '''        
            return autoit.control_set_text(self.title, control, control_text, text=self.text)   
               
        def controlTreeView(self, control, command, extra, buf_size=256):
            '''
            :description 发送一个命令到 TreeView32 控件.(子节点不好用*)
            :param command, extra                             :return
            "Check", "项目"                                             选中一个项目 (如果项目支持选中,这里指项目带有选择框). 
            "Collapse", "项目"                                          折叠一个项目节点,使它隐藏它的子项目. 
            "Exists", "项目"         *都返回1*                      如果项目存在返回 1,否则返回 0. 
            "Expand", "项目"                                           展开一个项目节点,使它显示它的子项目. 
            "GetItemCount", "项目"                                 返回所选项目的子项目数量. 
            "GetSelected" [, 使用索引]                             返回当前所选项目的文本参考信息(如果使用索引设置为1将会返回所选项目索引位置). 
            "GetText", "项目"                                          返回项目文本. 
            "IsChecked"                                                  返回项目选中状态. 1:被选中, 0:未被选中, -1:没要选择框. 
            "Select", "项目"                                             选择一个项目. 
            "Uncheck", "项目"                                         取消项目选中状态 (如果项目支持选中,这里指项目带有选择框). 
            '''        
            return autoit.control_tree_view(self.title, control, command, text=self.text, buf_size=buf_size, extra=extra)          
            
        def statusbarGetText(self, part=1, buf_size=256):
            '''
            :description 获取标准状态栏控件的文本.
            :return 文本内容:成功; 空字符串:失败(无法读取文本).
            '''        
            return autoit.statusbar_get_text(self.title, self.text, part, buf_size)  
        
    
    winControl
    复制代码

    有些控件操作没有原生的autoit支持的好,比如对树控件的操作,经常会有问题,如果遇到出现问题只能再换autoit写au3文件直接运行了......

    二、遇到的坑

    1. 在等待窗口出现时,比较了try和while方法,觉得还是while方法比较方面和好用,尤其是你将等待出现的窗口可能有好几种不同的窗口时,用while+if就很方便。

    复制代码
    def isclientupdate():
            '''判断包是否需要升级'''
            w_clientupdate = winControl.WinControl(title_update)
            w_clientupdate_choice = winControl.WinControl(title_choice)
            flag = True
            count = 0
            while flag:
                if w_clientupdate.exists():
                    clientupdate()
                    flag = False
                elif w_clientupdate_choice.exists():
                    w_clientupdate_choice.controlClick('Button2')
                    clientupdate()
                    flag = False
                else:
                    time.sleep(1)
                    count += 1
                    if count == 5:
                        clientlogin()
                        flag = False
    复制代码
     
     
     
     
     

    autoit 简单使用-- 操作windows窗口

    autoit 简单使用

    autoit中文交流论坛: http://www.autoitx.com/index.php

    1 下载 autoit 中文安装包 : https://yunpan.cn/OcPfVIDB68Aisv  访问密码 722d

    2 将压缩包解压到需安装的目录文件中. 安装文件

    3 桌面空白处,"鼠标右键单击, 新建-aotoit V3 Script",  新建 .au3 文件

    4 鼠标选中新建的.au3文件, "右键单击- Edit Script" ,进入脚本编辑界面. 类似一个文本编辑器.

    5 运行安装目录中的 : Au3Info.exe 文件( AutoIt 窗口信息工具).出现如下窗口.   

      

    AU3Info 简介:

    可帮助您获取指定窗口的详细信息. 主要包含了下列信息:

    •   窗口标题
    •   窗口中的文本(可见的和隐藏的)
    •   窗口大小和坐标
    •   状态栏的内容
    •   鼠标的坐标
    •   鼠标下面像素的颜色
    •   鼠标下面 控件 的详细信息

    使用 AU3Info 只需要运行它(在命令行或开始菜单)即可.

    AU3Info 是顶层窗口, 以便在任何时候都可以阅读它获取的信息.

    一旦鼠标移动到某个激活的窗口, AU3Info 将立即显示从该窗口获取的可用信息.

    在 AU3Info 获取信息的帮助下, 你就能立刻进行一些自动化操作了!

    捕捉像素/鼠标的信息时, 可能很困难, 因为它们是不断变化的!

    为了解决这个问题, 按下 CTRL+ALT+F 组合键可以暂停 AU3Info 的捕捉, 再按一次 CTRL+ALT+F 恢复捕捉.

    4 通过AU3Info 捕获相应空间的 类别名. 以备"脚本编辑"使用.

     如下图是,实现了: "向标题为"打开"的windows窗口,的地址栏,输入E: , 并转到E盘目录"  的操作.

    5 保存脚本,  鼠标选中 .au3 文件, 右击 , 运行脚本;   脚本运行没问题后, 可生成 可执行文件(.exe)直接使用,或供 其他程序调用.

  • 相关阅读:
    iOS项目中的网络请求和上下拉刷新封装
    iOS 自定义转场动画浅谈
    python中通过xlwt、xlrd和xlutils操作xls
    Python: PS 滤镜--水波特效
    Python: PS 滤镜--旋涡特效
    Python: PS 滤镜--USM 锐化
    Python: PS 滤镜--素描
    Python: PS 图像调整--饱和度调整
    Python: PS 图像特效 — 模糊玻璃
    Python: PS 滤镜--表面模糊
  • 原文地址:https://www.cnblogs.com/my-blogs-for-everone/p/15308869.html
Copyright © 2011-2022 走看看