全部产品
云市场

第十二课:win32的操作方法

更新时间:2019-09-18 15:38:57

win32模块是用来向用户提供一系列操作Windows控件的SDK,让用户通过简单的参数和方法调用来实现一些复杂的操作。要使用win32模块,需要使用rpa.win32进行操作。在学习此课程前请点击下方链接,熟悉API文档,SDK的具体功能作用在此不再赘述,传送门:https://www.yuque.com/aliyun_rpa/api_document/chq8kx

教程内容:本教程包含三节内容,分别为窗口操作、应用操作、元素操作

1. Window操作

场景介绍

以IE浏览器为例,创建浏览器窗口,执行窗口相关的一系列操作。

案例实现

1.1 新建应用

点击【新建编码模式应用】,选择【机器人类型】,再点击【确认新建】。屏幕录制 2019-07-23 下午3.55.19.mov (2.11MB)视频-1

1.2 代码编写

本段代码提供了一个简单的浏览器操作代码示例,按照示例进行代码敲写,示例代码的注释(带有“#”的行数为注释行)中详细解释了语句及SDK的作用,带有print语句的操作执行的结果在日志中查看,操作所包含win32的sdk有:win_activate、win_close、catch、win_minimize、win_maximize、win_exists

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa3 as rpa # 使用V3引擎
  4. import win32
  5. def start():
  6. # Window窗口操作
  7. window_operation()
  8. def window_operation():
  9. urls=['www.taobao.com','www.baidu.com','www.aliyun.com']
  10. for url in urls:
  11. rpa.ie.create(url)
  12. sleep(1)
  13. # # 依次激活各个网页
  14. rpa.win32.win_activate('淘宝网')
  15. sleep(1)
  16. rpa.win32.win_activate('百度')
  17. sleep(1)
  18. rpa.win32.win_activate('阿里云')
  19. # 关闭打开的页面
  20. rpa.win32.win_close('阿里云')
  21. sleep(1)
  22. rpa.win32.win_close('百度')
  23. sleep(1)
  24. rpa.win32.catch('淘宝网',mode='start') #捕获根据标题淘宝页面,mode默认为start可不填
  25. #最小化窗口
  26. rpa.win32.win_minimize('淘宝网')
  27. sleep(1)
  28. #最大化窗口
  29. rpa.win32.win_maximize('淘宝网')
  30. sleep(1)
  31. #判断窗口是否存在,日志中输出如果为True则窗口存在
  32. exist = rpa.win32.win_exists('淘宝网')
  33. print(exist)
  34. rpa.ie.closeall()

1.3 调试预览

打开上方调试预览,点击开始按钮运行程序,运行效果如下方视频所示。

未命名.mov (11.76MB)视频2-页面运行

2. 应用操作

场景介绍

创建应用以记事本(notepad.exe)为例,以记事本为例,创建记事本应用,执行应用相关的一系列操作

案例实现

2.1 新建应用

点击【新建编码模式应用】,选择【机器人类型】,再点击【确认新建】屏幕录制 2019-07-23 下午3.55.19.mov (2.11MB)视频3-新建应用

2.2 代码编写

2.2.1 代码示例

本段代码提供了一个简单的记事本应用操作的示例,按照示例进行代码敲写,示例代码的注释(带有“#”的行数为注释行)中详细解释了语句及SDK的作用,带有print语句的操作执行的结果在日志中查看,操作所包含win32的sdk有:wait、input、element_count、get_element、text、click、pos、expand、collapse、winclose

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa3 as rpa # 使用V3引擎
  4. def start():
  5. # 打开记事本应用
  6. rpa.it.shellExecute(r"C:\windows\system32\notepad.exe")
  7. sleep(1)
  8. # wait 等待加载控件,控件加载成功为True,加载失败为Flase
  9. rpa.win32.wait("编辑区")
  10. print(rpa.win32.wait("编辑区"))
  11. # 输入 Hello world
  12. rpa.win32.input(element="编辑区",value='Hello world')
  13. sleep(2)
  14. #控件元素操作
  15. # 1.获取控件元素
  16. element = rpa.win32.get_element("编辑区")
  17. #element.pos()获取元素坐标
  18. print(element.pos())
  19. # 输入 element.input
  20. element.input(value="欢迎使用RPA",replace=False)
  21. sleep(2)
  22. # element_count为获取元素("编辑区")个数
  23. count = rpa.win32.element_count("编辑区")
  24. print("元素个数为:%s"%count)
  25. # 获取指定控件元素
  26. wnd = rpa.win32.get_element('文件(F)')
  27. # expand 展开节点
  28. wnd.expand()
  29. sleep(2)
  30. # collapse 节点折叠
  31. wnd.collapse()
  32. sleep(2)
  33. # click 点击操作
  34. rpa.win32.click("文件(F)",button="left")
  35. sleep(1)
  36. rpa.win32.click("保存")
  37. sleep(1)
  38. rpa.win32.input("文件名",r"\\Mac\Home\Desktop\win32记事本.txt")
  39. sleep(1)
  40. rpa.win32.click("保存文件")
  41. #获取控件文本
  42. text = rpa.win32.text('编辑后控件')
  43. print("获取控件文本为:%s"%text)
  44. #关闭记事本应用
  45. rpa.win32.win_close('win32记事本')

2.2.2 控件录制

该应用运行需要录制代码中调用的相关元素:
1.录制编辑区
2.录制菜单栏上方选项”文件(F)”
3.点击选项”文件(F)”,弹出下拉框,录制(快捷键F2)下拉框内”保存”为单独的控件
4.点击选项”文件(F)”,在下拉框内点击保存,弹出文件保存页面
5.在文件保存页面内分别录制文件名(N)和保存**项,控件录制完成
录制工具的详细教学请参考链接进行学习:https://www.yuque.com/aliyun_rpa/api_document/wq81t7录制元素.mov (48.65MB)
视频4-录制控件**

2.3 调试预览

点击studio工具栏内调试运行选项,程序运行如下方视频所示:未命名1.mov (7.23MB)视频5-程序运行

3. 元素操作

场景介绍

本小节内容提供了一个win32场景汇总的测试应用,该应用内包含了所有的SDK,前面教学案例中已有的SDK在此不做演示,希望同学们课下寻找对应场景练习熟悉win32的SDK,应用传送门:

案例实现

3.1 新建应用

点击【新建编码模式应用】,选择【机器人类型】,再点击【确认新建】

屏幕录制 2019-07-23 下午3.55.19.mov (2.11MB)视频6-应用创建

3.2 代码编写

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa3 as rpa
  4. import subprocess
  5. import os
  6. def start():
  7. global project_path,exe_path
  8. project_path = rpa.params['project_path']
  9. exe_path=os.path.join(project_path,'resources\win32_test\exe\\')
  10. win32_get_select_items_comboBox()
  11. win32_set_get_datetimepicker_time()
  12. win32_wincheck_chkbox_wfm()
  13. win32_screeenshot()
  14. win32_mouse_move()
  15. def win32_get_select_items_comboBox():
  16. try:
  17. winform_path=os.path.join(exe_path,'winform\WinForm.exe')
  18. rpa.it.run(r''+winform_path)
  19. wnd = rpa.win32.catch('WinForm')
  20. items = wnd.get_select_items('comboBox',mode='all', index = 1)
  21. if items == ['1234','12345']:
  22. print('comboBox的item获取成功,获取到的数组为:'+str(items))
  23. else:
  24. print('comboBox的item获取失败')
  25. except Exception as e:
  26. print('Exception:e ->' + str(e))
  27. finally:
  28. rpa.win32.win_close('WinForm')
  29. def win32_set_get_datetimepicker_time():
  30. try:
  31. winform_path=os.path.join(exe_path,'winform\WinForm.exe')
  32. rpa.it.run(r''+winform_path)
  33. rpa.win32.set_datetimepicker("Time",year=2019,month=8,day=8,hour=8,minute=30,second=30)#1.给日期控件进行日期赋值
  34. sleep(3)
  35. time = rpa.win32.get_datetimepicker(element="Time")#2.设置时间之后获取该控件日期
  36. result=(time == [2019,8,8,8,30,30])
  37. print('校验日期控件的赋值和取值:'+'设置了[2019,8,5,8,30,30]'+'取到的值为:'+str(result))
  38. except Exception as e:
  39. print('Exception:e ->' + str(e))
  40. finally:
  41. rpa.win32.win_close('WinForm')
  42. def win32_wincheck_chkbox_wfm():
  43. """
  44. 在winform中,checkbox 勾选、取消勾选校验
  45. """
  46. try:
  47. winform_path=os.path.join(exe_path,'winform\WinForm.exe')
  48. subprocess.Popen([winform_path],shell=True)
  49. wnd = rpa.win32.catch('WinForm')
  50. # 勾选
  51. rpa.win32.check("cb_Name",value=True)
  52. sleep(2)
  53. value = rpa.win32.check("cb_Name")
  54. print('cb_name 勾选操作是否成功:'+str(value))
  55. # 取消勾选
  56. rpa.win32.check("cb_Name",value=False)
  57. sleep(2)
  58. value = rpa.win32.check("cb_Name")
  59. print('cb_name 取消勾选操作是否成功:'+str(not value))
  60. # set_check勾选
  61. wnd.set_checked(element='cb_Sex',value=True)
  62. sleep(2)
  63. value = rpa.win32.check("cb_Sex")
  64. print('cb_sex 勾选操作是否成功:'+str(value))
  65. #获取元素勾选,勾选为True,未勾选为False
  66. state = wnd.get_checked('cb_Sex')
  67. print(state)
  68. # 取消勾选
  69. wnd.set_checked(element='cb_Sex',value=False)
  70. sleep(2)
  71. value = rpa.win32.check("cb_Sex")
  72. print('cb_sex 取消勾选操作是否成功:'+str(not value))
  73. state = wnd.get_checked('cb_Sex')
  74. print('cb_name 勾选:状态为:'+str(state))
  75. except Exception as e:
  76. print('Exception e:'+str(e))
  77. finally:
  78. rpa.win32.win_close('WinForm')
  79. # screenshot(self, element, file, *, index=1, parent_element=None, timeout=10)
  80. def win32_screeenshot():
  81. winform_path=os.path.join(exe_path,'winform\WinForm.exe')
  82. subprocess.Popen([winform_path],shell=True)
  83. cnd = rpa.win32.catch('WinForm')
  84. cnd.screenshot('日历',file=r'\\Mac\Home\Desktop\日历控件截图.jpg')
  85. rpa.win32.win_close('WinForm')
  86. def win32_mouse_move():
  87. winform_path=os.path.join(exe_path,'winform\WinForm.exe')
  88. subprocess.Popen([winform_path],shell=True)
  89. cnd = rpa.win32.catch('WinForm')
  90. cnd.mouse_move(element='comboBox')
  91. text = cnd.text('mouse_move')
  92. if text == '移入comboBox':
  93. alert.msgbox(title='提示',msg='mouse_move已成功移入!',disapper_time=2)
  94. rpa.win32.win_close('WinForm')

3.3 控件录制

本案例需要录制的元素如下方视频所示:未命名录制.mov (39.59MB)视频7-控件录制

3.4 调试运行

点击studio工具栏内调试运行选项,程序运行如下方视频所示:未命名.mov (9.36MB)视频8-调试运行