记录 UiPath 学习中遇到的一些问题以及解决办法

这里有一些入门UiPath的实例: https://github.com/SharathRaju489/UiPath

-------2021.04.13---------

问 1.在开发中,当我们想点击那些失去焦点后隐藏的按钮时。发现我们切换到uipath studio之后,想要点击的按钮已经被隐藏,无法选中

问 1 解决方案:使用click -> attach windows/attach browser ->click。举例我们要点击文本框(notepad)中的Format中的Font:

                       1:使用click,点击notepad中的Format

                       2:使用Attach windows,选择attach windows作用域时,先点击Indicate window on screen,再按F2,点击Format,等待3秒,选中作用域为点击Format后的区域

                       3:使用click,点击获取目标时,按下F2,打开notepad上的Format,目标选择Format下的font

问 1 主要技术:主要使用F2延时选中功能。使用F2延迟选中功能,可参考以下地址中的视频:内容乌鸦 (uipath.com)

---------------------------------2020-05-27   通过UiPath识别图片内容

   使用OCR组件,需要下载对应的package。经过测试,中文识别不行。英文识别一般,有些字母无法识别出(如:W)

-------------------------------获取邮件中的附件

使用get outlook Mail Message组件

获取附件名称(mailItem是单个邮件的附件,里面有可能包含多个附件):

 CType( mailItem.Attachments.FirstOrDefault,Attachment).Name 

---------------------打开循环打开excel时,报错:Call was rejected by callee.

根本原因是在操作excel时,有其他excel进程没有关闭,只需要关闭excel进程。

   第一种情况:调用Kill Process组件,需要引入包:UiPath.Core.Activities,设置ProcessName="Excel"。

   第二种情况:打开的Excel中,存在透视表(pivot table)。解决办法是将透视表的“(打开excel时刷星)Refresh data when opening the file” 关掉就行,如下图。我猜测出现这个原因是数据刷新时,做了关闭excel处理时,进程没有彻底被关闭。

  最后,经过测试,出现这类问题,和excel的文件类型,以及是否存在宏无关,就和透视表(piovt table)有关系,如有其他码友遇到相同问题可以@我,一起看看

---------------------uipath如何强制关闭excel的piovt table的打开时刷新选项(方向:调用VBA的形式。难点:只要涉及到打开excel,就会报错(访问被拒绝))

    最终这个问题还是通过使用VBS解决了这个问题。然后使用uipath中的 invoke vbscript组件调用关闭了pivot table的自动刷新。代码有点长,请查看我的另外一个博文(vbs 关闭excel的piovt table自动刷新),有代码

---------------------通过ExtractData获取SAP列表时,报错:Inject JS script is not supported for this element. 为SAP本身设置的问题,修改SAP属性即可,按如下图设置即可(option里打开此设置)。另外,如果RPA去操作SAP时,提示:A Script is attempting to acess SAP GUI.解决办法是一样的:

----------------通过ExtractData 获取SAP中列表数据,如果获取的数据里不全,且数据中出现乱数据(我的表现为0000XXX),这是因为SAP使用的应该是懒加载,在数据未加载完成时,RPA已经执行:ExtractData。两种处理方法:1,加一个延时,2,做一个翻译,使用PGDN,翻到最后一页后再用ExtractData。推荐使用第二种,因为一般不知道数据什么时候加载完

-----------------今天遇到一个比较棘手的问题。再SAP中执行翻页操作时,当一条数据存在于当前页,但是数据只显示一半的时候,使用click组件时,无法选中,暂时不知道怎么解决这个问题

    临时解决方案:还是使用PGDN(SendHotkey组件),每次翻页的时候,都去检查当前页是否有自己要的选项。如果有就:1、使用up(SendHotkey) 2、查找是否存在自己需要的选项(如没有,继续PGDN) 3、点击需要的选项

 这种方法还是会有一定概率出现无法选中的问题,亲测还是能解决部分问题

-------2020.07.27---------- 在RPA中进行加密的问题。测试了博文:ttps://blog.csdn.net/weixin_45000314/article/details/98937190 提供的三种方法可以用,但是都可以通过message明文输出。想过自己封装package方式,但是考虑到RPA是通过模拟人操作,在程序执行给输入框赋值时,都是明文。不知道有没有其他小伙伴有啥好想法,求助求助

---------------我们创建项目时,选择类型为:Template后,保存项目时,会提示错误:Could not load file or assembly 'Microsoft.windows.design.extensibility,version=4.3.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.the system cannot find the file specified.  根本原因就是系统中没有找到Microsoft.windows.design.extensibility。可以通过安装.net framework(不能安装runtime)解决大部分电脑的问题。还有一种情况是安装了.net framework后依然报错,此时,我们需要手动将Microsoft.Windows.Design.Extensibility.dll注册到电脑中(网上找注册教程注册dll文件 - J.Y - 博客园 (cnblogs.com))。

------------- 在Orchestrator中使用azure key vault(如果在orchestrator中创建凭据存储时没有AzureKeyVault选项时,下面的连接也可以解决):

https://docs.uipath.com/orchestrator/docs/about-credential-stores

---------------自己根据属性找到web页面的标签:<webctrl css-selector='table[jsname=NLtp9]' />

---------------Selector中,给属性添加变量 titel='{{变量}}'

---------------DataTable中存在时间列,但是列的类型为String,我们在查询时,需要将string转换成datetime格式再进行查询,解决方法如下:

           1、如果项目是VB类型:dt.Select().ToList().Where(Function(row as DataRow) cDate(row("xxx"))<DateTime.Now).ToArray()或者使用Bala的DateTime ParseTo Datatable ,需要下载包:BalaReva.EasyDataTable.Activities

          2、如果项目是C#类型: 还在寻求答案中。。。

--------------初始化list:new List(Of Int32)(New Int32(){1, 3, 4, 6, 7})

时间转换,月份为英文:

DateTime.Now.ToString("MMM yyyyy",CultureInfo.CreateSpecificCulture("en-GB")) ;  // Nov 2017 简写月份

DateTime.Now.ToString("MMMM yyyyy",CultureInfo.CreateSpecificCulture("en-GB")) ;  // November 2017 全写月份

// 使用Invoke code组件, 

io_item 为外部传入

  try

    {

        //JProperty jp = new JProperty("A","A");

JProperty jp = io_item;

        jp.AddAnnotation(new JProperty("A_key", "A_value"));

       io_item = jp;

Console.WriteLine(io_item.First["A_key"]);

    }

    catch (Exception ex)

    {

Console.WriteLine(ex.Message);

        throw ex;

    }

如果在开发时,需要注入引用,在Imports中进行添加

"sdsd[k(enter)]"

-----------获取,添加,修改 queue中的comments

1. 获取comments

    --

    1)获取comments需要调用接口:string.Format(“odata/QueueItemComments?%24filter=QueueItemId%20%20eq%20{0}&%24top=1”,in_QueueID.trim) 

    2)调用http request

注释:in_QueueID 需要通过gettranscation组件来获取:

2.修改comments

 --

    1)template:“{QueueItemId: #QueueItemId,Text: '#Text',Id: #Id}”.ToString.Replace("#QueueItemId", in_QueueID).Replace("#Text", “需要添加的message”).Replace("#Id", in_CommentId)

in_QueueID,in_CommentId都可以从第1步中的返回值中获取

    2)url:string.Format(“odata/QueueItemComments({0})”,in_CommentId)

    3)用http请求

3.添加comments

--

    1)template:“ {QueueItemId: {QueueItemId},Text: '{Text}' }”.ToString().Replace("{QueueItemId}",in_QueueID).Replace("{Text}",“需要添加的message”)

    2)url: 'odata/QueueItemComments'

    3)调用http请求

VB securestring 转string:New System.Net.NetworkCredential(string.Empty,TryCast(pwd,system.Security.SecureString)).SecurePassword

New System.Net.NetworkCredential(string.Empty,TryCast(pwd,system.Security.SecureString)).Password

VB string 转securestring

new System.Net.NetworkCredential("", "aaaa").SecurePassword

C# Securestring 转string

Marshal.PtrToStringUni(Marshal.SecureStringToGlobalAllocUnicode((System.Security.SecureString)SecurestringStr)).ToString()

new System.Net.NetworkCredential(string.Empty, (xxx as System.Security.SecureString)).Password

SecurestringStr -- securestring 的值

拆分:

string str = xxx.Split(new char[]{'/'})[3].Replace(")","")

使用组件执行js代码

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值