前言
最近产品有一个从平台上抓取店铺数据的需求,刚开始一头雾水,完全不知道如何下手,查阅资料后,最后使用RPA来实现并结合node把抓到的数据上传到系统中。
RPA介绍
官方是这么说的:杭州分叉智能科技有限公司旗下一款自动化软件机器人品牌。模拟人工的各种操作,帮企业工自动处理大量重复、有逻辑规则的工作,让员工拥有更多的时间去处理更有创意和价值的事情。
官网地址:www.yingdao.com/
话不多说直接上码
RPA基本介绍
首先点击新建,可以新建一个PC或手机端的自动化应用,新建完成后,进去会看到如下页面
图片左侧是RPA提供给用户的一些可视化的指令,可以通过拖拽的方式,搭建你想要实现的自动化功能
这里给大家简单介绍几种常用的可视化指令
1.监听网页请求,可以配置网络请求资源URL,RPA可以实现自动匹配该URL,并抓到响应内容,可能在大部分的网页中,很多是需要点击才触发请求的,这个时候需要先监听,再去点击元素,才能够抓到响应内容
2.获取网页元素,获取元素信息,点击web元素。可以操作并获取到网页元素信息,这里建议大家通过元素的XPATH来获取,因为有的元素属性或者是样式可能会改变。点击web元素是点击获取到的元素信息,来自动触发某个操作
3.EXCEL表格指令操作。可能某个需求中,产品会给你一个表格,来让你输入表格里面的内容,来达到自动化抓取数据的效果。此时可以RPA也是可以满足的,可以使用EXCEL表格指令操作,在操作中,我们可以使用循环里面的内容,来实现自动化输入,还可以写入内容至表格中,方便我们记录。
4. 循环,判断指令。这两个指令可以用来操作我们监听网页请求后,获取过来的数据,循环该数据,并加入一些逻辑判断把不符合规范的数据过滤掉,IF条件有很多条件指令,多条件,单一条件,是否网页包含某个元素等等,方便我们更快速的实现自动化应用
5.全局变量的使用。RPA中允许我们定义全局变量,即在我们的整个应用都可以访问到,比如我们在某个指令中,保存了某个属性到变量中,但是在下面的指令中会用到该变量,这个时候变量是访问不到的,那么我们可以自己新建一个全局变量,可以指定该变量的类型,注意如果是表达式的话,需要店里输入框左侧的图标,点亮后,输入的内容是表达式,否则是文本
以上是一些常用的可视化指令,PRA中可以很多好用的可视化指令,有兴趣的同学可以下载,搭建一款属于自己的自动化应用
nodejs上传到系统中的部分代码
1.校验登录
async function login(params) {
try {
const config = getConfig();
const data = await accountLogin();
if (data) {
config.token = data.jwtToken;
config.userId = data.userId;
fs.writeFileSync(
path.join(process.cwd(), "./config/config.json"),
JSON.stringify(config)
);
return true;
}
return false;
} catch (error) {
console.error(error);
return false;
}
}
export async function checkLogin() {
const config = getConfig();
if (!config.phone || !config.password) {
console.error("未配置登录信息");
return false;
}
try {
const data = await listOperContentByCondition({
page: 1,
pageSize: 1,
contentTitle,
});
} catch (error) {
console.log("%c [ checkLogin error ]-38", error);
return await login();
}
}
- 读取excel并上传
async function uploadImage(image_url) {
try {
const response = await axios.get(image_url, { responseType: "stream" });
let imgname = `rap_gd/${Date.now()}.png`;
const { url, name } = await IMGCLIENT.upload(imgname, response.data)
return {
url: url,
name: name,
};
} catch (error) {
console.log(
"%c [ image_url ]-16",
"font-size:13px; background:pink; color:#bf2c9f;",
image_url
);
console.log(
"%c [ error ]-30",
"font-size:13px; background:pink; color:#bf2c9f;",
error
);
return null;
}
}
async function uploadOperContent(dirpath) {
let tpath = path.join(dirpath);
const listitempath = path.join(tpath, "listitem.json");
try {
const listItem = fs.readFileSync(listitempath, "utf-8");
const listItemo = JSON.parse(listItem);
const CoverUrl = listItemo.domain_list[5].value;
const image = await uploadImage(CoverUrl);
const loginState = await checkLogin();
if (!loginState) throw new Error("请先登录");
const cityList = await getCitylist()
let cityId = null
if (cityList.length) {
cityList.forEach(item => {
item.children.forEach(i => {
if (i.title == listItemo.cityname) {
cityId = i.key
}
})
})
}
const brandList = await getBrandList({
page: 1,
pageSize: 1000000,
brandName: '',
brandIds: []
});
let result = []
const resExcelBrand = await readExcel(本地excel地址)
if (resExcelBrand && resExcelBrand.length) {
resExcelBrand.forEach(item => {
if (listItemo.name.includes(item)) {
result = brandList.filter(k => k.brandName === item);
}
})
}
const listCategoryList = await getCategorylist({ brandIds: [result[0].brandId] });
const categorysResult = getTreeIds(listCategoryList);
const params = {
// ...
}
const res = await addShopManagement(params);
console.log(
"%c [ res ]-89",
"font-size:13px; background:pink; color:#bf2c9f;",
res
);
return {
contentTitle: listItemo.name,
};
} catch (error) {
console.log(
"%c [ error ]-35",
"font-size:13px; background:pink; color:#bf2c9f;",
error
);
return null;
}
}
3.koa路由
import Router from "@koa/router";
import gaode from "./api/gaode"
const router = new Router();
router.use("/api_gaode", gaode)
export default router;
结语
在PRA中我们可以设置可视化的指令,来发送一个get请求,请求我们的服务,最后通过服务,调取服务端接口,最终上传到系统中。
RPA可以帮助我们搭建一款自动化应用,节省企业成本,防止做重复的工作,我们成就工具,工具也成就我们!
记录一下自己学习的过程,欢迎各位大佬批评指正!