简单记录

DataTable相关

新建一个空的DataTable

New System.Data.DataTable

DataTable.Select()

使用sql语法筛选数据

dt.Select("[semployerName] like '*[*]*' or [semployerName] like '*''*' ")
Datatable Filtered_Results = dt.Select("[Column1]=’"+param_1+"’ AND [Column2]=’"+param_2+"’").CopyToDataTable()

https://www.cnblogs.com/TeresaMu/p/12058559.html

https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datatable.select?view=net-5.0

DataTable.AsEnumerable()

筛选数据

dt.AsEnumerable().Where(Function(y) y.Item("semployerName").ToString.Contains("'") or y.Item("semployerName").ToString.Contains("*")).ToList()

https://forum.uipath.com/t/checking-special-characters-in-column-values-in-data-table/14599/2

DataTable.Clone()

克隆可创建具有与原始 DataTable 相同的结构的新 DataTable,但不复制任何数据(新 DataTable 将不会包含任何 DataRows)。

https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datatable.clone?view=net-5.0

DataTable.Copy()

同时将结构和数据复制到新 DataTable 中,使用 Copy

给 DataTable 添加列(指定位置)

SetOrdinal(0)里面的 0 就是想添加到的位置。

dt.Columns.Add("列名").SetOrdinal(0)
dt.Columns.Add("列名", typeof(String)).SetOrdinal(0)

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataset-datatable-dataview/adding-columns-to-a-datatable

给 DataTable 添加列(指定位置、默认值)

Dim column As DataColumn
column = New DataColumn("日期")
column.DefaultValue = strBalanceDate

dtBankDataTable.Columns.Add(column)
column.SetOrdinal(0)

DataTable 调整列的顺序

将顺序调到第4列,计数从0开始

dt.Columns("ColumnName").SetOrdinal(4)

DataTable 判断是否存在某列

dt.Columns.Contains("列名")

DataColumn转list

( From row In dt.AsEnumerable() Select Convert.Tostring(row("列名")) ).ToList()

DataTable 去重1

Remove Duplicate Rows

DataTable 去重2

NameList = (From name in dtAllDataTable.Columns.Cast(of DataColumn) select name.ColumnName).ToArray

dvDataView = dtAllDataTable.DefaultView
    
dtAllDataTable = dvDataView.ToTable(True, NameList)

DataTable 列名去掉空格

DataTable 列名去掉空格

item.ColumnName = item.ToString.Trim

LINQ

LINQ 概述

https://docs.microsoft.com/zh-cn/dotnet/csharp/linq/

https://www.yiibai.com/linq/

String相关

String 大写

str.ToUpper

String 小写

str.ToLower

转成两位精度小数

Double.Parse("1.2").ToString("0.00")
Double.Parse("1").ToString("f")

判断能不能转换为整数

Integer.TryParse("asd",0)

输出为:False

Integer.TryParse("123",0)

输出为:True

转成百分比

Double.Parse("0.5").ToString("p")

https://docs.microsoft.com/zh-cn/dotnet/api/system.double.tostring?view=net-5.0

SecurePassword

获取或设置 SecureString 实例形式的密码。

secStrPassWord = New System.Net.NetworkCredential("","123456").SecurePassword

https://docs.microsoft.com/zh-cn/dotnet/api/system.net.networkcredential

Password

获取或设置与凭据关联的用户名的密码。

New System.Net.NetworkCredential("",pwd).Password

字符串加双引号

"test""Test" + """"

输出:test”Test”

String.Format补全0

Strings.Format(7, "000")

输出:007

String去掉前面的0

"0000abc".TrimStart("0".ToCharArray)

输出:abc

https://docs.microsoft.com/zh-cn/dotnet/api/system.string.trimstart?view=net-6.0

String 换行

"asdf"+ _ 
"dssffg"

输出:asdfdssffg

String 替换掉换行

str.Trim.Replace( Chr(10) , "").Replace( Chr(13) , "")

String 分割

Split(str, ",")
str.split(CChar(","))
str.Split(","c)
str.Split(convert.ToChar(","))
str.Split(Char.Parse(","))

https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/split-function

Substring 截取

从第六个字符开始,截取两个字符

str.Substring(6,2)

https://docs.microsoft.com/zh-cn/dotnet/api/system.string.substring?view=net-6.0

替换匹配

System.Text.RegularExpressions.Regex.Replace(text, "\W","")

DateTime.ParseExact

将日期时间的字符串转换为 DateTime

strReceiptime = "Wed, 15 Dec 2021 15:00:04 +0800"
format = "ddd, dd MMM yyyy HH:mm:ss zzz (CST)"
strReceiptime = "Wed, 15 Dec 2021 15:00:04 +0800 (CST)"
format = "ddd, dd MMM yyyy HH:mm:ss zzz (CST)"
DateTime.ParseExact(strReceiptime, format, System.Globalization.CultureInfo.InvariantCulture)

https://docs.microsoft.com/zh-cn/dotnet/api/system.datetime.parseexact

https://blog.csdn.net/bigheadsheep/article/details/12013267

数据操作

新建一个List

New List(Of String)

实例化一个List

New List(Of String) From {"1", "2", "3"}

List去重

list.Distinct().ToList

判断List里面是否包含某字符

list.Contains(str)

新建字典

New Dictionary(Of String,Object) From{ {"异常结果收件邮箱",""}, {"发件邮箱账号密码凭据","发件邮箱账号密码"}, {"RobotWorkFolder","C:\Robots\asdf"} }

遍历字典的键

for key in dic.Keys

遍历字典的值

for value in dic.Values

遍历字典

For Each 的 TypeArgument 选择 KeyValuePair

KeyValuePair

键:item.Key

值:item.Value

String 转 list

str.Split().ToList

Base64 转 Byte Array

Convert.FromBase64String( strImageBase64 )

Byte Array 保存为图片

File.WriteAllBytes( strImgPath, arrByteArray )

快速输出 list

先转为Array,然后再处理

join(list.ToArray,"、")

邮件相关

内容 代码
发件时间 mail.Headers(“Date”)
发件地址 mail.From.Address
邮件标题 mail.Subject.ToString
附件数量 mail.Attachments.Count

邮件正文里面带图片

strMailBody = "邮件里面的文字信息"

byteArray = File.ReadAllBytes(strScreenshotPath)
strPicBase64 = Convert.ToBase64String(byteArray)
strPicHtml = "<img src=data:image/jpeg;base64,"  + strPicBase64 + ">"

"<html><body>"+ strMailBody + strPicHtml +"</body></html>"

163 邮箱配置

163邮箱配置

关闭SSL验证

System.Net.ServicePointManager.ServerCertificateValidationCallback =
Function(se As Object,
cert As System.Security.Cryptography.X509Certificates.X509Certificate,
chain As System.Security.Cryptography.X509Certificates.X509Chain,
sslerror As System.Net.Security.SslPolicyErrors) True

时间相关

Convert.ToDateTime

转换为 DateTime 变量

Subtract

输出时间差

Time1 = DateTime.now()
Time2 = DateTime.now()

Time1.Subtract(Time2)

https://docs.microsoft.com/zh-cn/dotnet/api/system.datetime.subtract?view=net-6.0

DateDiff

输出时间差,DateInterval.Minute 是分钟数,DateInterval.Day 是日期数

DateDiff(DateInterval.Minute, Time1,Time2)

https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.dateandtime.datediff?view=net-6.0

https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.dateinterval?view=net-6.0

TimeSpan 结构

https://docs.microsoft.com/zh-cn/dotnet/api/system.timespan?view=net-6.0

Delay 500毫秒

UiPath_Delay500毫秒

00:00:00.500

New TimeSpan(0, 0, 0, 0,500)

文件相关

获取某文件夹下的所有 .csv 文件

Directory.GetFiles("C:\Robots\asdf", "*.csv")

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.directory.getfiles?view=net-6.0

获取某文件夹下的所有 .xls 文件的数量

Directory.GetFiles("C:\Robots\asdf","*.xls").Count

获取文件大小(字节数)

code

fileSize = FileLen(filePath).ToString

文件重命名

code

FileSystem.Rename(oldPathName,newPathName)

文件压缩

strSourcePath, 压缩的目录路径;strZipFilePath, 要生成压缩包的所在路径。strZipFilePath 貌似不能在 strSourcePath 里面。

code

System.IO.Compression.ZipFile.CreateFromDirectory(strSourcePath, strZipFilePath)

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile.createfromdirectory?view=net-5.0

文件解压

将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

System.IO.Compression.ZipFile.ExtractToDirectory(strZipFilePath,strUnzipFilePath,System.Text.Encoding.Default)

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile.extracttodirectory?view=net-5.0

获取文件路径

Path.GetDirectoryName("C:\Robots\港股通权限补报送\港股通权限补报送_日志表.xlsx")

运行结果:C:\Robots\港股通权限补报送

获取文件扩展名

Path.GetExtension("C:\Robots\港股通权限补报送\港股通权限补报送_日志表.xlsx")

运行结果:.xlsx

获取文件名

Path.GetFileName("C:\Robots\港股通权限补报送\港股通权限补报送_日志表.xlsx")

运行结果:港股通权限补报送_日志表.xlsx

获取文件名,不带扩展名

Path.GetFileNameWithoutExtension("C:\Robots\港股通权限补报送\港股通权限补报送_日志表.xlsx")

运行结果:港股通权限补报送_日志表

获取文件名所在的根目录

Path.GetPathRoot("C:\Robots\港股通权限补报送\港股通权限补报送_日志表.xlsx")

运行结果:C:\

环境相关

获取当前文件夹路径

Environment.CurrentDirectory

字符串组合成路径

Path.Combine(Environment.CurrentDirectory,"Data")

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.path.combine?view=net-5.0

文件在远程桌面的路径

Path.Combine("\\tsclient\", in_Config("RobotWorkFolder").ToString.Replace(":\","\"), strFileName)

获取文件夹里面最新的一个文件

Directory.GetFiles(Environment.CurrentDirectory,"Exceptions_Screenshots\").OrderByDescending(Function(d) New FileInfo(d).CreationTime)(0)

Windows 系统相关

自动登录Windows

LogonExpert(付费),配置好之后就可以自动登录Windows系统了

命令行使用:

"C:\Program Files\Softros Systems\LogonExpert\le.exe" -logon username [password][domain]

详细信息请参考:https://www.logonexpert.com/help/command-line/

如果有域名的话,一定要加上域名。

也可以在LogonExpert Administrator 配置好,然后直接使用

"C:\Program Files\Softros Systems\LogonExpert\le.exe" -logon *

启动进程

WorkingDirectory:如果未设置该属性,则默认工作目录为 %SYSTEMROOT%\system32。

UiPath 的控件 Open Application 打开应用,除非指定工作目录,否则都是默认使用 %SYSTEMROOT%\system32

NewProcess = New System.Diagnostics.Process

NewProcess.StartInfo.CreateNoWindow = False '是否创建窗口
NewProcess.StartInfo.FileName = '文件名称
NewProcess.StartInfo.Arguments = " " + argInstrArguments '参数

NewProcess.StartInfo.WorkingDirectory = '工作目录
NewProcess.StartInfo.UseShellExecute = '是否使用shell来执行

NewProcess.Start() '启动进程
NewProcess.WaitForExit() '等待进程退出

System.Diagnostics.Process.Start 用法

https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.process?view=net-6.0

打开文件管理器

System.Diagnostics.Process.Start("explorer.exe")

打开文件管理器,指定路径

System.Diagnostics.Process.Start("explorer.exe", "C:\Users\lbj\Documents\ChromeDownloads")

打开文件管理器,选中指定文件

System.Diagnostics.Process.Start("explorer.exe", "/select,"+ "C:\Users\lbj\Documents\ChromeDownloads\031002100311_43538867.pdf" )

打开远程桌面的文件管理器,指定路径

Argument:文件夹路径

FileName:”C:\Windows\explorer.exe”

Selector:```


![Uipath打开远程桌面的文件管理器,指定路径](https://img.lbjheiheihei.xyz/img/20220416_Uipath打开远程桌面的文件管理器,指定路径.png?imageView2/0/format/webp/interlace/1/q/75 "Uipath打开远程桌面的文件管理器,指定路径")

## 鼠标相关

### 鼠标滚轮上下滑动

安装依赖包:ScrollActivity

### 鼠标移动到具体的元素位置

控件:Hover

### 鼠标循环滚动到具体的元素位置

循环 + 控件:Hover

### Http请求

安装依赖包 ```UIPath.WebAPI.Activities```

## 短信(验证码)相关

使用短信猫、[双卡助手](https://smshelper.cozylife.tech/)、[短信转发器](https://gitee.com/pp/SmsForwarder) 来转发短信

## Excel相关

### 删除Sheet页

delSheet.txt 的内容:

Sub Deletesheet(sheetName) Sheets(sheetName).Delete End Sub


想删除的是 Sheet2 

![](https://img.lbjheiheihei.xyz/FsTAsyBeUGwKNNlr19G28zee8in_)

Excel: 

如果报错 **Invoke VBA: 不信任到 Visual Basic Project 的程序连接**,那么去 Excel 的 文件-> 选项,找到信用中心,点击信用中心设置。

![](https://img.lbjheiheihei.xyz/FuYsBLSXL4BwR75Um7r_hTvDJITG)

接着找到宏设置, 在开发人员宏设置里面勾选「启用所有宏 」、「信任对VBA工程对象模型的访问」

![](https://img.lbjheiheihei.xyz/Fiy0qyo3oURN612sMAqyGQWD3zT_)

WPS: 

设置1、开发工具->宏安全性->可靠发行商, 勾选信任对于"Visual Basic 项目"的访问。

![](https://img.lbjheiheihei.xyz/FnZviSww3FT2I08W9DrFg8gkrBLT)

设置2、文件->选项->信任中心,勾选【启用宏后自动添加为受信任的文档】。

![](https://img.lbjheiheihei.xyz/FrBH44UkuZmb-S4AIDooB6BaZ2B9)

### Write Range 后的数据不对

使用 Workbook 的 Write Range,不要使用 Excel 的 Write Range。前者的单元格格式是文本,后者则不一定。

### VBA删除Sheet

```vbscript
Function DeleteSheet(in_StrFilePath, in_StrSheetName As String) As String

Application.DisplayAlerts = False '禁止弹窗
Application.ScreenUpdating = False '禁止显示

On Error GoTo Myerr '异常处理
Dim Wb_Root As Workbook

Set Wb_Root = Workbooks.Open(in_StrFilePath, 0)
'初始化结束

Wb_Root.Sheets(in_StrSheetName).Delete


Wb_Root.Save
Wb_Root.Close

Myerr:
DeleteSheet = Err.Description
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Function

VBA粘贴数据

Wb_Root.ActiveSheet.Paste

Excel 去重

使用 Remove Duplicates Range,如果数据是A到Z列,则范围填写A:Z

VBA自动调整所选列列宽

调整 i 列的列宽

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Range("i:i").EntireColumn.AutoFit
End Sub

无法导入 UiPath 生成的 Excel 文件

SAP或者别的应用,可能是因为 UiPath 生成的 Excel 文件不带有用户信息?

需要信任一下才能导入 Excel 文件

设置_受信任位置

Write Range报错: Cannot write to the target range because it has hidden rows. Remove any filters or unhide rows and try again.

打开的 Excel 里面的 Sheet 有隐藏的行或者列,无法使用 Excel 的 Write Range,但是可以用 Workbook 的 Write Range

一个一个cell填写数据特别慢

  1. Excel Scope 取消勾选 Save changes,填写完成后使用控件 Save Workbook
  2. 打开excel之后,先按下滚动条,滑动一下

Excel 自动填写数据

控件:Auto Fill Range

Excel 在表格里面筛选数据

前提:已有 excel 文件,里面的数据已经设置好筛选

使用控件:Filter Table,疑似对表有用,对透视表无用。

控件 Filter Table

别的都还好填写,但是 TableName 真的不知道在哪。

获取TableName

https://docs.uipath.com/activities/lang-zh_CN/docs/table-functions

SQL

MySQl 配置 ODBC

执行 sql 前,需要安装 mysql-connector-odbc (32位的),安装完成后打开ODBC数据源(32位),选择用户DSN,随后点击添加。

选择 MySQL ODBC Unicode Driver(旧版本只有 MySQL ODBC Driver)

ODBC新建数据源

输入DNS名字以及描述、MySQL数据库的IP地址与端口,点击ok。点击 Details 展开,设置中文字符集。

OBDC设置

清空一个表

TRUNCATE TABLE 表名;

把一个表的数据去重放入另一个表

vcp_all 表不设置主键,vcp_distinct 表设置主键。

如果 all 表有,distinct 表没有,则会把数据插入到 distinct 表;

如果 all 表有,distinct 表也有,则会把 distinct 表的数据更新;

replace INTO vcp_distinct select * from vcp_all;

正则

日期是否是yyyy/MM/dd

^[12]\d{3}/(?:0[1-9]|1[0-2])/(?:0[1-9]|[12][0-9]|30|31)$

获取数字

System.Text.RegularExpressions.Regex.Replace( str, "[^0-9]+", "")

判断字符串中是否含有5个下划线

System.Text.RegularExpressions.Regex.Matches(str,"_").Count=5

获取英文

System.Text.RegularExpressions.Regex.Replace( str, "[^A-Za-z]+", "")

匹配日期

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))

匹配数字+英文

[A-Za-z0-9]+$

匹配数字+英文(至少是五位)

[A-Za-z0-9]+${5,}

匹配数字+英文+()()_(至少是五位)

[A-Za-z0-9+-()()]+${5,}

匹配中文

pattern: “[\u4e00-\u9fa5]+”

SAP

启用 SAP GUI 脚本编写

启用 SAP GUI 脚本编写

bat脚本(命令行)

在远程控制的使用可以使用 bat 脚本来实现某些功能

修改cmd窗口编码为UTF-8

chcp 65001

创建虚拟磁盘

把 C:\O32_d 映射到 H 盘

@echo off
C:\Windows\System32\Subst H: C:\O32_d
Pause

删除虚拟盘

取消 H 盘的映射

@echo off
C:\Windows\System32\Subst H: /d
Pause

杀进程

以 UiPath.Executor 为例,可以在任务管理器的详细信息里面找到执行的程序名称。

taskkill /f /t /im UiPath.Executor.exe

7Zip 压缩文件

a:将文件添加到压缩档案中 b:测试压缩或解压算法执行时的 CPU 占用 d:从压缩档案中删除文件 e:将压缩档案中的所有文件解压到指定路径,所有文件将输出到同一个目录中 h:计算文件的哈希值 i:显示有关支持格式的信息 l:列出压缩档案的内容 rn:重命名压缩档案中的文件 t:测试压缩档案的完整性 u:更新要进入压缩档案中的文件 x:将压缩档案中的所有文件解压到指定路径,并包含所有文件的完整路径

"C:\Program Files\7-Zip\7z.exe" a 压缩包路径 压缩文件路径

7Zip 解压文件

-o和解压路径不要用空格分开

"C:\Program Files\7-Zip\7z.exe" x 压缩包路径 -o解压路径

WinRAR 压缩文件

压缩文件的一般命令行命令语法为:

WinRAR A [-参数] <压缩文件> [文件] [@文件列表]

例如说,您希望添加文件 LETTER.TXT 到压缩文件 LETTERS.RAR ,请输入:

WinRAR A LETTERS.RAR LETTER.TXT

建议是使用

WinRAR A -ep1 LETTERS.RAR LETTER.TXT

添加文件夹 “c:\latest data” 到压缩文件 Info.rar 中

WinRAR a Info.rar "c:\latest data"

WinRAR 解压文件

解压压缩文件 Info.rar 到文件夹 d:\data

WinRAR x Info.rar d:\data\

xcopy 复制文件

把 D:\666 文件夹下面的所有文件和文件夹复制到E:\777,其中不包含空的文件夹,不提示是否要覆盖现有目标文件。

xcopy "D:\666" "E:\777" /s /e /y

把 D:\666 文件夹下面的 *_compare_result.xlsx 复制到E:\777,不提示是否要覆盖现有目标文件。

xcopy "D:\666\*_compare_result.xlsx" "E:\777" /y

https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/xcopy

浏览器设置

谷歌浏览器,下载前询问每个文件的保存位置

您的连接不是私密连接

solution1:

  • 在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,直接敲键盘
  • 因为Chrome不信任这些自签名ssl证书,为了安全起见,直接禁止访问。thisisunsafe 这个命令,说明你已经了解并确认这是个不安全的网站,你仍要访问就给你访问了。

solution2

  • 打开chrome://flags
  • 找到“Show in-form warnings for sensitive fields when the top-level page is not HTTPS”设置为 disabled
  • 找到 “Allow invalid certificates for resources loaded from localhost”设置为 “enabled”
  • 点启用,然后重启浏览器

solution3

设置 chrome忽略证书错误

使用 –ignore-certificate-errors 参数命令行打开谷歌浏览器

奇奇怪怪的坑

ctrl v 失效

ctrl c + ctrl v,无法把复制的内容粘贴到 Excel 文件里面,只输入了一个 v.

原因:未知

解决办法:Send Hotkey 控件勾选 SendWindowMessage.


Selector 能找到元素,但是运行报错 time out

开发时,使用控件的Selector 是能够定位到元素的,但是实际运行的时候,却报错,显示 time out。

原因:网站的问题,网页其实还在加载中,一直都在加载,会加载很久,但是不影响正常使用。

解决办法:WaitForReady 属性选择 None


客户机的系统和服务器日期不为同一天

使用到人民币银行结算账户管理系统,登录的时候提示【客户机的系统和服务器日期不为同一天】。

原因:未知

解决办法:用IE浏览器,把网站添加到兼容性视图。

选择元素,F2倒计时结束后元素消失

F2之后,直接鼠标按住元素,倒计时结束后能看到元素,选择元素。

Cannot find the UI element corresponding to this selector

背景信息:确认有元素,且不会变动,selector 验证是通过的,但是运行的时候报错。

异常情况:selector 不止一个 /selector 不对

解决办法:图像识别

解决办法:不要用 attach window

Cannot communicate with the browser, please check the UiPath extension

背景信息:uipath扩展程序没有问题

异常情况:报错说连接不到浏览器,检查一下uipath扩展程序

解决办法:看看输入的浏览器的地址是否为空,为空则跳过

你要允许来自未知发布者的此应用对你的设备进行更改吗?

Solution1:

点击显示详细信息,选择何时显示更改通知,改为【从不通知】

不太推荐

Solution2:

  • Win + R,输入 regedit,然后回车。
  • 在注册表编辑器内,找到HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
  • 提前把 .exe 文件的路径复制

  • 在空白处右键,选择新建,字符串值,把复制的路径填入

  • 在数值数据处,输入 RunAsInvoker

  • 点击确定,完成

Solution3:

如果是远程机器使用 UiPath RemoteRuntime 的话,可以考虑去找到UiPath RemoteRuntime.exe 的路径,右键,在属性里面的兼容性里,勾选以管理员身份运行此程序

Block User Input 锁不了鼠标键盘

用 ToDesk 连接到别的机器的话,确实不行…

以管理员身份运行UiPath.Executor.exe,没用;

以管理员身份运行UiPath Studio,再执行流程,直接报错

RemoteException wrapping System.AggregateException: One or more errors occurred. (拒绝访问。)  ---> RemoteException wrapping System.ComponentModel.Win32Exception: 拒绝访问。 
   at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetOrOpenProcessHandle()
   at System.Diagnostics.Process.EnsureWatchingForExit()
   at System.Diagnostics.Process.set_EnableRaisingEvents(Boolean value)
   at UiPath.Service.UserHost.AttendedServiceProxy.RegisterClientProcess(Int32 clientPid)
   at UiPath.Service.UserHost.StudioOperations.Prepare(ClientProcessMessage message, CancellationToken ct)
   at UiPath.Service.Core.Utils.TaskUtils.WithShortWait(Task task, TimeSpan wait)
   at UiPath.Service.UserHost.StudioOperations.<>c__DisplayClass7_0.<<RunJob>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.CancellationHelper`1.Invoke[TResult](TId requestId, Func`2 func)
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_3.<<-ctor>g__InvokeMethod|6>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_1.<<-ctor>g__HandleRequest|3>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_2.<<-ctor>b__5>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Helpers.Timeout[TResult](TimeSpan timeout, List`1 cancellationTokens, Func`2 func, String message, Func`2 exceptionHandler)
	--- End of inner exception stack trace ---
   at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetOrOpenProcessHandle()
   at System.Diagnostics.Process.EnsureWatchingForExit()
   at System.Diagnostics.Process.set_EnableRaisingEvents(Boolean value)
   at UiPath.Service.UserHost.AttendedServiceProxy.RegisterClientProcess(Int32 clientPid)
   at UiPath.Service.UserHost.StudioOperations.Prepare(ClientProcessMessage message, CancellationToken ct)
   at UiPath.Service.Core.Utils.TaskUtils.WithShortWait(Task task, TimeSpan wait)
   at UiPath.Service.UserHost.StudioOperations.<>c__DisplayClass7_0.<<RunJob>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.CancellationHelper`1.Invoke[TResult](TId requestId, Func`2 func)
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_3.<<-ctor>g__InvokeMethod|6>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_1.<<-ctor>g__HandleRequest|3>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Server.<>c__DisplayClass7_2.<<-ctor>b__5>d.MoveNext()
--- End of stack trace from previous location ---
   at UiPath.CoreIpc.Helpers.Timeout[TResult](TimeSpan timeout, List`1 cancellationTokens, Func`2 func, String message, Func`2 exceptionHandler)

批量插入数据(Insert DataTable)到数据库报错

查询没问题,单条插入也没问题,就是批量插入有问题。

报错:

ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-8.0.28]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT VALUES' at line 1

解决办法:

把 UiPath.Database.Activities 版本改为 1.4.0

UiPath Data Scraping只能抓取网页表格的数据

问题:只能抓取表格的数据,不能单独爬取一列一列的数据。

selector还会有点问题,像 window 软件的 selector

<ctrl role='grouping' text='展开' />

而不像是网页的selector,

<webctrl aaname='展开' tag='SPAN' />

解决办法:重启 Uipath Studio

报错:Scrape returned empty text

ocr识别的时候出图像错,因为图像没加载出来,但是元素存在。