热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RPA界面元素智能自适应定位与操控技术金克

什么是RPA?RPA(Robotic Process Automation,机器人流程自动化)是通过特定的、可模拟人类在计算机界面上进行操作的技术,它可以按规则自动执行相应的流程任务,代替或辅助人类完

RPA界面元素智能自适应定位与操控技术-金克

什么是RPA?RPA(Robotic Process Automation,机器人流程自动化)是通过特定的、可模拟人类在计算机界面上进行操作的技术,它可以按规则自动执行相应的流程任务,代替或辅助人类完成相关的计算机操作,从而节约人力成本,提高生产效率windows server 2012

从RPA的定义就可以看出,对计算机界面的操控是RPA的核心之一windows server 2012。要实现对计算机界面的操控,就必须用到RPA界面元素定位和操控技术。

元素定位与操控技术

界面元素是指用于构建系统或应用程序的所有图形用户界面部分,例如窗口、输入框、按钮等windows server 2012。通过显示器、键盘、鼠标等计算机外部设备,人能够实现在指定输入框输入文本、点击指定按钮等操作,和操作系统以及业务系统进行交互。同样的,RPA要代替人完成这些操作,就需要能够定位和操控这些界面元素。

界面元素定位与操控方法有很多,主要区别在于是否使用GUI(Graphical User Interface, 图形用户接口)自动化技术windows server 2012。非GUI自动化技术有:绝对坐标定位、图像匹配定位、基于消息操作、模拟键鼠操作等。GUI自动化技术有:Win32、MSAA、UIA、JAB、SAP、Citrix Virtual Channel、RDP Virtual Channel、Selenium、Chrome Extension等。通常来说,GUI自动化技术能获取到的界面元素的信息更多,支持的操作也更多,但同时局限性也更大,一种GUI自动化技术往往只支持几个界面元素框架,实际使用起来也会更困难。

下面列举几种常用的自动化技术并给出优缺点分析windows server 2012

01 绝对坐标定位

绝对坐标,是指屏幕中固定的坐标位置,当界面元素总是处于屏幕中固定坐标位置时,就可以使用绝对坐标来进行定位windows server 2012。这个方法非常简单方便,在特定场景下非常好用。但是一般要求屏幕分辨率和应用窗口大小固定,而且无法保证定位到的界面元素是否正确。

02 图像匹配定位

图像匹配,在待匹配图像中寻找与目标图像相似性高的单个或多个目标,并获取目标的坐标位置windows server 2012。图像匹配可以和绝对坐标定位相结合,先使用绝对坐标定位,再用图像匹配做校验;也可以先划定屏幕中的某个区域,在此区域内进行图像匹配,以达到提高准确率、加速匹配过程的目的。

展开全文

图像匹配的方法非常多,模板匹配使用空间二维滑动模板进行匹配,将目标图像在待匹配图像中滑动;特征匹配提取图像的特征,再生成特征描述子,最后根据描述子的相似程度对两幅图像的特征之间进行匹配;深度学习也可用于图像匹配之中,例如,使用OCR技术可以定位到包含指定文本的图像windows server 2012

03 基于消息操作

这里的消息指的是操作系统的消息windows server 2012。Windows 是一个消息驱动的系统,Windows的消息提供了应用程序之间、应用程序与Windows 系统之间进行通信的手段。通过对应用程序窗口发送特定的消息,可以实现对指定界面元素的点击输入等操作。

RPA界面元素智能自适应定位与操控技术-金克

图1 Windows消息机制

04 模拟键鼠操作

模拟键鼠可分为消息模拟、API模拟、驱动模拟三种windows server 2012。消息模拟基于windows的消息机制,向目标窗口发送键鼠消息。API模拟就是用Windows提供的API实现模拟输入。驱动模拟就是通过驱动程序,在系统内核里面操作I/O端口,给连接键盘的集成电路发送指令,让它产生一个按下按键的信息,这样你的模拟输入对于所有程序来说就是从一个真实的设备发出的。

05 Win32 API

Win32 API是微软第一代应用程序可访问APIwindows server 2012。Win32 API出现在.NET之前,是底层的Windows API。它支持MFC、VB6、VCL、简单的WinForms等窗体。

Win32自动化技术基于HWND(窗口句柄),一般需要通过 FindWindow、 EnumWindows 来查找目标窗口的句柄,然后再调用其它 API,例如 GetWindowText、GetWindowRect等来获取窗口属性,以此来定位目标元素windows server 2012。定位到目标元素之后,可以通过Win32 API实现对目标元素的操控。例如使用SetWindowText来设置显示的文字,使用SetActiveWindow来激活窗口等。

优点:

对标准Windows控件支持良好

缺点:

过于底层,调用复杂windows server 2012。例如:Win32 API查询窗体需要逐层获取窗体句柄进行遍历查找

技术落后,用途不广windows server 2012。例如:Win32 API对新UI框架以及自定义控件的支持很差。

06 MSAA

MSAA(Microsoft Active Accessibility)是微软第二代应用程序可访问APIwindows server 2012。MSAA旨在帮助辅助技术产品与应用程序(或操作系统)的标准和自定义用户界面元素进行交互。它支持WFC、VB6、VCL、WinForms、WPF等窗体。

MSAA 主要基于 COM 技术windows server 2012。提供信息的应用程序被称为 Server;获取信息的应用程序被称为Client。首先Client调用AccessibleObjectFromWindow传入Server窗口的HWND。

然后AccessibleObjectFromWindow函数向Server发送WM_GETOBJECT消息windows server 2012。Server创建并实现了IAccessible,之后通过LresultFromObject 把IAccessible 返回给Client。最后Client调用IAccessible定位和操作Server中的界面元素。

优点:

相较Win32 API更简单易用windows server 2012。使用者只需要和 IAccessible 进行交互,也不需要直接使用windows消息来操作目标元素。

相较Win32 API支持了部分自定义控件windows server 2012。前提是开发人员在实现自定义控件的同时实现了 IAccessible 的接口。

缺点:

功能不全windows server 2012。MSAA技术的初衷是为了方便残疾人使用Windows 程序,对自动化来说还是不够,仅支持对界面元素的一些基本操作。

07 UIA

UIA(Microsoft Active Accessibility)是用于替代MSAA的应用程序可访问技术windows server 2012。和MSAA不同,UIA技术的初衷是提供UI的可访问性。它支持MFC、WinForms、WPF、Store apps、Qt等窗体。

UIA定义了全新的、针对UI自动化的接口和模式windows server 2012。分别是支持对界面元素进行遍历和条件化查询的TreeWalker和FindAll。定义了读写UI元素属性的UIA Property, 包括Name、 ID、Type、ClassName、Location、 Visibility等等。定义了UI元素行为的UIA Pattern, 比如Select、Expand、Resize、 Check、Value等等。还引入了UIA Event接口,可以让测试程序在某些事件发生后得到通知,比如新窗口打开事件等。

RPA界面元素智能自适应定位与操控技术-金克

图2 UIA架构图

优点:

支持的UI框架更丰富windows server 2012。例如WPF和Silverlight中的子窗口和控件并不是传统的HWND,所以Win32 API和MSAA无能为力,而UIA可以直接支持这两种程序。

兼容传统的Win32和MSAA模式windows server 2012。前面提到过,UIA技术的内部实现可以多样化。针对传统程序,UIA可以在内部实现中借用MSAA的接口和直接调用Win32 API。

高度抽象,易于使用windows server 2012。例如执行点击按钮操作, UIA 统一归类于Invoke, 无论是Win32、 WPF还是Silverlight按钮,都可以通过Invoke实现点击,不用关心具体实现方式是模拟键鼠还是调用Windows API。

缺点:

编码过程复杂windows server 2012。对于一个UI窗口,里面可能有几十个子控件或者子窗口。在编写测试代码的时候, 如果对这些子元素的获取,操作不能简化, 势必导致代码冗繁,难以维护。

08 JAB

JAB(Java Access Bridge)是一项在Microsoft Windows动态链接库(DLL)中公开Java Accessibility API的技术,使实现Java Accessibility API的 Java应用程序对Windows系统上的辅助技术可见windows server 2012

要使用JAB技术,需要在启动Java程序前配置好所需的JAB环境windows server 2012。Client需要事先加载WindowsAccessBridge.dll获取Server提供的接口,通过FindWindow获取窗口句柄,用IsJavaWindow来判断筛选出Java程序的窗口。拿到窗口后,可以根据窗口句柄获取虚拟机编号vmID 和根节点ac。之后就可以使用vmID和ac,通过之前Server提供的接口,来获取子节点界面元素的vmID和ac、获取界面元素的信息、以及调用界面元素支持的点击输入等方法。

JAB技术的初衷也是为了方便残疾人使用,因此对自动化技术的支持并不好windows server 2012

RPA界面元素智能自适应定位与操控技术-金克

图3 JAB架构图

09 SAP

SAP 提供了 Scripting Engine 来进行用户界面自动化windows server 2012。SAP Scripting Engine 是一套基于 COM 的接口,提供了 SAP 全面的脚本化支持。

10 Citrix Virtual Channel

Citrix 提供了 Virtual Channel 的机制来满足 Client 和 Server 之间的通讯需求windows server 2012。利用 Virtual Channel,我们可以向 Citrix 虚拟桌面发送任意指令、获取业务所需信息。Citrix 是基于 ICA (Independent Computing Architecture) 协议来实现的。

RPA界面元素智能自适应定位与操控技术-金克

图4 Citrix Virtual Channel

11 RDP Virtual Channel

RDP (Remote Desktop Protocol) 是微软开发的一套远程桌面协议windows server 2012。RDP 也提供了 Virtual Channel 机制来满足 Client 和 Server 之间的通讯需求。

RPA界面元素智能自适应定位与操控技术-金克

图5 RDP Virtual Channel

12 Selenium

Selenium是一个开源的Web自动化测试工具,它支持所有主流的浏览器,可以实现打开浏览器,获取网页界面元素数据,保存网页截屏等操作windows server 2012

RPA界面元素智能自适应定位与操控技术-金克

图6 Selenium执行过程

13 Chrome Extension

Chrome 浏览器插件是允许开发者自定义用户使用体验的一种技术windows server 2012。可以利用 Web 技术,如 HTML、CSS、Javascript 来自定义浏览体验。

智能定位与操控技术

从之前的介绍可以看到,系统和应用程序的界面元素框架种类繁多,不同应用程序需要的自动化技术不尽相同,例如Chrome浏览器需要使用Web自动化技术、Oracle ERP需要使用Java自动化技术、SAP需要使用SAP自动化技术;同一种应用程序在不同操作系统上,自动化的实现方式也有所差别,例如大多数RPA产品都依赖Windows的.Net框架来操控应用程序,在Linux等操作系统上完全无法使用windows server 2012

以Chrome浏览器为例,多数RPA产品会选择使用开源的Selenium来实现对Chrome浏览器的自动化操控windows server 2012。Selenium是一个著名的Web应用测试工具,它提供了丰富的API接口,可以非常方便的被Python、Java等语言调用,同时也存在驱动版本必须和浏览器版本严格对应,以及容易被网页检测到等缺点。Selenium无法用于操控其他应用程序,因此需要单独为浏览器设计一整套自动化控制模块。较为成熟的RPA产品通常会选择自研浏览器插件,用插件实现相同的功能。自研浏览器插件可以将浏览器和其他应用程序的自动化接口进行统一,但是遗憾的是,很多RPA产品并没有这么做。将浏览器作为特例或许会方便熟悉网页测试技术的开发者快速上手,但对于不熟悉相关技术的开发者,无疑增加了巨大的学习成本。

由于上述原因,RPA流程开发需要考虑流程共涉及几种自动化技术,会在几种操作系统上运行windows server 2012。RPA开发人员不仅需要了解业务系统的每一部分使用了何种自动化技术,在开发中选用正确的模块,还需要了解流程会在哪些操作系统上运行,为每种操作系统开发一个单独的流程。随着RPA涉及业务系统的范围扩大,以及国产操作系统的普及,流程开发成本将大幅提高。

RPA界面元素智能自适应定位与操控技术将这些自动化技术进行了统一,对不同操作系统做了兼容windows server 2012。在RPA流程开发过程中不需要区分自动化技术,同一流程可以在不同操作系统中直接运行,能大幅降低开发成本。

智能定位与操控的技术实现

RPA界面元素智能自适应定位与操控技术融合了当前主流的自动化技术,通过高度抽象实现不同自动化技术的统一调用,通过基于规则的自动化技术切换器实现不同自动化技术的智能切换windows server 2012

RPA界面元素智能自适应定位与操控技术-金克

图7 智能元素捕获器架构图

以捕获和操作使用JAB自动化技术的Java应用程序为例windows server 2012。使用者先用界面元素分析器捕获目标元素,此时根据鼠标点击的位置,界面元素分析器可以获得目标元素所在的窗口以及窗口所属的应用程序并拿到窗口和应用程序的信息。根据这些信息,自动化技术切换器将根据规则选择最合适的自动化技术。在这个例子中会智能切换到JAB自动化技术。接下来,界面元素分析器会调用“获取指定位置下的目标元素”这个方法获取目标元素,该方法的底层实现基于JAB自动化技术,该目标元素所具有的属性和支持的方法也都是通过JAB自动化技术得到的。这些属性和方法也是抽象的,通过JAB自动化技术获取到的属性role会被映射为标准的control,通过JAB自动化技术获取到的方法Click会被映射为标准的Invoke。使用者想要实现点击目标元素,只需要按照统一的规则调用Invoke方法即可,不需要关心该方法底层是如何实现的。

定位目标元素还存在一个很常见的问题,目标元素的属性和在UI中的位置偶尔会发生变化windows server 2012。例如有些窗口标题会带版本号,一旦更新应用程序就会发生变化。当这些发生变化时,就有可能定位失败。为了更好地定位元素,用户界面被抽象为了一个文档对象模型(Document Object Model),支持使用CSS语法和XPath语法的元素选择器定位目标元素,元素选择器是一段文本,包含了元素的属性和层级关系,支持模糊匹配。

RPA界面元素智能自适应定位与操控技术-金克

图8 DOM 结构

文档对象模型常用于操纵HTML和XML数据,它将整个文档抽象为逻辑上的对象,然后定义了访问和操作这些文档的方法windows server 2012。文档对象模型独立于任何系统平台和编程语言,使用文档对象模型提供的方法,可以构建文档、导航其结构以及添加、修改或删除元素和内容。用户界面也可以抽象成一个文档对象模型,形成一个树结构,每个界面元素都是用户界面树的一个节点,每个节点都是一个抽象的元素对象,有相同的属性和方法。在界面元素分析器和应用程序的通信过程中,跨系统兼容的自动化技术切换器会根据获取到的应用程序信息按照规则自动切换,对接相应的自动化技术接口,用获取到的界面元素信息来构建抽象元素对象以及文档对象模型。

在元素分析器界面,可以看到用户界面树的整体结构和每个界面元素的各种属性,通过定位语句,可以定位到满足定位语句的目标元素windows server 2012。定位语句采用自研语法解析技术,同时支持CSS语法和XPath语法,支持按属性精准匹配、前缀匹配、后缀匹配和模糊匹配,支持描述元素间的后代关系、父子关系和兄弟关系,自由度极高,适应用户界面变化能力强。捕获元素后会自动生成适合的元素选择器,使用者也可以在此基础上手动修改以提高定位的灵活性和准确度。

RPA界面元素智能自适应定位与操控技术-金克

图9 Windows元素捕获器

RPA界面元素智能自适应定位与操控技术同样支持国产操作系统,国产操作系统大多是基于Linux改造的,借助Qt-at-spi技术,可以通过Linux的调试接口获取到图形界面上应用程序的界面元素windows server 2012。针对不同的国产操作系统,具体实现细节有所区别。通过封装,实现了各国产操作系统和Windows操作系统接口的统一。

RPA界面元素智能自适应定位与操控技术-金克

图10 UOS元素捕获

目前RPA界面元素智能自适应定位与操控技术已兼容WIN32、UIA、MSAA、JAVA、SAP、Chrome、IE、Firefox、X11等多种自动化技术windows server 2012。借助自动化技术智能切换方案,使用过程中选择器会智能切换自动化技术。切换方案同时支持自定义配置,可以应对特殊场景的需求。达观全能界面元素选择器的可拓展性很强,新的自动化技术可以通过公共接口无缝接入,改造和升级都十分方便,不会影响现有的RPA流程。

RPA界面元素智能自适应定位与操控技术同时兼容多种操作系统,包括Windows7 SP1以上的主流Windows操作系统、MAC系统、国产麒麟、统信、中科方德系统等windows server 2012。RPA流程可以轻松在这些系统间迁移,相同应用程序的同一界面元素定位语句完全相同,相同操作的底层实现会根据当前运行的系统自动切换。相比之下,其他RPA产品多是基于Windows的Net框架实现的界面元素定位和操控,无法迁移到其他操作系统中运行的。

未来展望

01 兼容更多自动化技术

目前,还有一些自动化技术没做到兼容,例如Citrix虚拟化应用、RDP远程桌面等windows server 2012。这些场景下仍然需要开发者采用相应的技术,做针对性开发。后续RPA界面元素智能自适应定位与操控技术将加入对更多自动化技术的支持,进一步优化RPA开发者的体验。

02 兼容更多操作系统

当下,国产操作系统发展迅速,麒麟、统信、中科方德等国产操作系统的市场越来越大,后续在这些国产操作系统上开发和运行RPA流程的需求也会越来越多windows server 2012。除此之外,移动设备上也有一些运行RPA流程的需求。兼容这些操作系统也同样在开发计划之内。

03 开发基于图像的自动化技术

虽然大多数应用程序都支持自动化技术,但仍有少数应用缺乏相关支持windows server 2012。达观全能界面元素定位和操控技术将依托公司的自研AI能力,开发图像自动化技术来解决这一问题。该技术会将用户界面按照不同层级进行智能分割,提取出不同层级的图像作为元素对象,通过图像技术构造用户界面树并提取出元素对象的属性信息。这一技术将彻底解决应用程序不支持自动化技术的问题,真正做到通用且无侵入的定位和操控界面元素。

作者简介

金克:达观数据技术副总裁,负责达观数据RPA产品团队组建和研发windows server 2012。在加入达观之前,联合创立“飞语云通讯”并担任CTO,在系统工程开发、大规模并发网络、Go语言程序设计等方面有丰富的经验,先后在格尔软件,爱克发医疗,盛大创新院,飞语等公司就职,有十余年的软件开发经验,带领团队参与了信息安全,医疗影像,云存储,支付和计费系统、云通讯平台等的研发工作。2021年上海“张江工匠”获得者。


推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
author-avatar
金针菇滚滚夹着五根水葱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有