JS脚本实现RPA模拟人工操作网页获取数据

2024-08-26 07:36

本文主要是介绍JS脚本实现RPA模拟人工操作网页获取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、首先我们可以根据查询条件去预置一个Excel,比如我们以公司名称为例。

二、然后我们用JS读取Excel内容,进行页面打开与条件记录

<!DOCTYPE html>
<html>
<div style="text-align: center;margin-top: 300px;"><input type="file" id="input-excel" accept=".xls,.xlsx"/><button onclick="START()"style="background-color: #4CAF50; color: white; padding: 15px 32px; text-align: center;text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px;cursor: pointer;">START</button>
</div>
</html><script src="./xlsx/xlsx.js" charset="utf-8"></script>
<script>function START() {const input = document.getElementById('input-excel');const file = input.files[0];if (!file) {alert('请选择一个Excel文件');return;}const reader = new FileReader();reader.onload = function (e) {const data = e.target.result;const workbook = XLSX.read(data, {type: 'array'});const sheetName = workbook.SheetNames[0];const sheet = workbook.Sheets[sheetName];const jsonData = XLSX.utils.sheet_to_json(sheet);console.log(jsonData);let companyList = [];for (var i = 0; i < jsonData.length; i++) {companyList.push(jsonData[i].company);}// alert(JSON.stringify(companyList))setTimeout(function () {window.open("https://sjfw.scjs.net.cn:8801/xxgx/Enterprise/eList.aspx?myindex=0&mycompany="+ JSON.stringify(companyList), "_self")}, 3000)};reader.readAsArrayBuffer(file);}
</script>

三、打开页面后,我们要利用Cookie来记录我们的关键值,如公司名称、读取下标记,其次最重要的就是页面的元素操作。

四、我们根据条件查询到我们所需要的信息,就可以利用JS自动保存这些信息到Cookie,如果页面会自动刷新也需要利用条件判断来控制。处理好全部后我们也可以用Cookie存储全局信息。


let situationNameList = [];
let situationTimeList = [];
let finalSituationList = [];
let finalSituationTimeList = [];
if (getCookie("part_1_click") == "1") {console.log("part_1_click 点击过");situationNameList = JSON.parse(getCookie("situationNameList"));situationTimeList = JSON.parse(getCookie("situationTimeList"));finalSituationList = JSON.parse(getCookie("finalSituationList"));finalSituationTimeList = JSON.parse(getCookie("finalSituationTimeList"));
}let personList = []; // 三类人员数
if (getCookie("part_3_click") == "1") {personList = JSON.parse(getCookie("personList"));
}// 测试打印
console.log("我是wdfgdzx");
if (localStorage.getItem('hasRun3') !== 'true') {// 这里放置只需要执行一次的代码console.log('这段代码只会在页面刷新的情况下执行一次');clearCookie("clickTime")// 更新localStorage,表示代码已经执行过localStorage.setItem('hasRun3', 'true');
}// 1、获取上个地址传递的URL参数方法
function getURLParameter(name) {const urlParams = new URLSearchParams(window.location.search);return urlParams.get(name);
}if (!getCookie("clickTime") == "1") {// 2、获取公司集合let companyList;let index = 0;if (getCookie("myindex") == null) {index = parseInt(getURLParameter("myindex")); //公司下标companyList = JSON.parse(getURLParameter("mycompany"));} else {index = parseInt(getCookie("myindex")); // 如果myindex存过cookie 执行过则从cookie取下标更新companyList = JSON.parse(getCookie("mycompany"));}
// 3、用公司名称自动填写let companyInput = document.getElementById("mc");companyInput.value = companyList[index];
// 4、点击搜索按钮let searchButton = document.getElementById("MainContent_Button1");setCookie("mycompany", JSON.stringify(companyList), 1); // 设置到cookie里setCookie("myindex", JSON.stringify(index), 1); // 不管是否用过都要更新cookiesetTimeout(function () {searchButton.click()setCookie("clickTime", "1", "1");}, 1000)
// 5、自动点击a标签!!!!!!!!!!!!!!!!!!!!这个是每次都要执行的setTimeout(function () {let current_target = document.getElementsByTagName('a');console.log(current_target.length)for (let i = 0; i < current_target.length; i++) {let temp = current_target[i];console.log("我打印的" + temp.innerText)if (temp.innerText == companyList[index]) {console.log("我打印的" + temp.innerText)// temp.click()}}}, 5000)
} else {setTimeout(function () {let companyList = JSON.parse(getCookie("mycompany"));let index = parseInt(getCookie("myindex")); //公司下标let current_target = document.getElementsByTagName('a');console.log(current_target.length)if (!getCookie("part_1_click") == "1") {part_1();console.log("执行了part_1方法")}if (!getCookie("part_2_click") == "1") {part_2();console.log("执行了part_2方法")}if (!getCookie("part_3_click") == "1") {part_3();console.log("执行了part_3方法")}for (let i = 0; i < current_target.length; i++) {let temp = current_target[i];// console.log("我打印的" + temp.innerText)if (temp.innerText == companyList[index]) {console.log("我打印的" + temp.innerText)temp.click()// alert("执行了")// 先不着急清理// clearCookie("clickTime");}}}, 2000)
}// 设置cookie
function setCookie(name, value, days) {var expires = "";if (days) {var date = new Date();date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));expires = "; expires=" + date.toUTCString();}document.cookie = name + "=" + (value || "") + expires + "; path=/";
}// 获取cookie
function getCookie(name) {var nameEQ = name + "=";var ca = document.cookie.split(';');for (var i = 0; i < ca.length; i++) {var c = ca[i];while (c.charAt(0) == ' ') c = c.substring(1, c.length);if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);}return null;
}function part_1() {setTimeout(function () {let thList = document.getElementsByTagName('th')for (let i = 0; i < thList.length; i++) {// console.log(thList[i].innerText);// console.log(thList[i].innerText.includes("质"));if (thList[i].innerText.includes("质")) {let nextTh = thList[i].nextElementSibling;// console.log(thList[i])// console.log(thList[i].innerText);// console.log(nextTh.innerText);situationNameList.push(nextTh.innerText);// 添加资质内容}if (thList[i].innerText.includes("有效期")) {let nextTh = thList[i].nextElementSibling;// console.log(nextTh.innerText)situationTimeList.push(nextTh.innerText);// 添加资质过期时间}}for (let i = 0; i < situationNameList.length; i++) {let temp = situationNameList[i] + "---有效期" + situationTimeList[i];finalSituationList.push(temp);}console.log(finalSituationList)// 资质和到期时间console.log(situationTimeList[situationTimeList.length - 1]) //安装许可证日期let AX = "安许 有效期" + situationTimeList[situationTimeList.length - 1];finalSituationList.push(AX);// alert("执行了")/*  for (let i = 0; i < situationTimeList.length - 1; i++) { // 单独展示到期时间finalSituationTimeList.push(situationTimeList[i]);}*/finalSituationTimeList.push(situationTimeList[situationTimeList.length - 1]);  //安许到期时间let temp = situationTimeList; // 剔除安许,展示其他证书的到期时间situationTimeList = []for (let i = 0; i < temp.length - 1; i++) {situationTimeList.push(temp[i]);}setCookie("part_1_click", "1", 1);setCookie("situationNameList", JSON.stringify(situationNameList), 1);setCookie("situationTimeList", JSON.stringify(situationTimeList), 1);setCookie("finalSituationList", JSON.stringify(finalSituationList), 1);setCookie("finalSituationTimeList", JSON.stringify(finalSituationTimeList), 1);}, 2000)
}function part_2() {setTimeout(function () {let aList = document.getElementsByTagName('a')for (let i = 0; i < aList.length; i++) {if (aList[i].innerText.includes("企业人员")) {console.log(aList[i].innerText)aList[i].click()setCookie("part_2_click", "1", 1);}}}, 3000)
}function part_3() {setTimeout(function () {let tdList = document.getElementsByTagName('td')for (let i = 0; i < tdList.length; i++) {if (tdList[i].innerText == "三类人员") {// console.log(tdList[i].innerText)let upNode = tdList[i].previousElementSibling;// console.log(upNode.innerText) // 人名let nextNode = tdList[i].nextElementSibling;// console.log(nextNode.innerText);//证书登记// console.log(extractLetters(nextNode.innerText));let nextTwoNode = nextNode.nextElementSibling;let haveNode = nextTwoNode.nextElementSibling;console.log(haveNode.innerText);//证书有效期personList.push(upNode.innerText + "--" + extractLetters(nextNode.innerText) + "--" + haveNode.innerText);}}console.log(personList)setCookie("part_3_click", "1", 1);setCookie("personList", JSON.stringify(personList), 1)let companyList = JSON.parse(getCookie("mycompany"));let index = parseInt(getCookie("myindex")); //公司下标let obj = {"name": companyList[index],"situation": finalSituationList,"end": situationTimeList,"install": finalSituationTimeList,"person": personList}let ALL_GLOBAL_DATA_LIST = [];// part_3点击完毕就可以记录全局cookie的List了if (getCookie("ALL_GLOBAL_DATA_LIST") == null) {ALL_GLOBAL_DATA_LIST.push(obj);setCookie("ALL_GLOBAL_DATA_LIST", JSON.stringify(ALL_GLOBAL_DATA_LIST), 1);} else {ALL_GLOBAL_DATA_LIST = JSON.parse(getCookie("ALL_GLOBAL_DATA_LIST"));ALL_GLOBAL_DATA_LIST.push(obj);setCookie("ALL_GLOBAL_DATA_LIST", JSON.stringify(ALL_GLOBAL_DATA_LIST), 1);}console.log("全局数据动态记录" + getCookie("ALL_GLOBAL_DATA_LIST"));if (parseInt(getCookie("myindex")) < JSON.parse(getCookie("mycompany")).length - 1) {let temp = parseInt(getCookie("myindex"));temp = temp + 1;setCookie("myindex", temp + "", 1);} else {let list = JSON.parse(getCookie("ALL_GLOBAL_DATA_LIST"));list.forEach(item => {item.situation = item.situation.map(s => s.replace(/\n/g, ' '));item.situation = item.situation.map(s => s.replace(/\s+/g, ''));item.person = item.person.map(p => p.replace(/\n/g, ' '));item.person = item.person.map(p => p.replace(/\s+/g, ''));});let finalJson = []list.forEach(item => {let exportSituation = "";let tempArray = item.situation;for (let i = 0; i < tempArray.length; i++) {exportSituation = exportSituation + tempArray[i] + "&&&&&&&&&&";}let exportEnd = "";tempArray = item.end;for (let i = 0; i < tempArray.length; i++) {exportEnd = exportEnd + tempArray[i] + "&&&&&&&&&&";}let exportInstall = "";tempArray = item.install;for (let i = 0; i < tempArray.length; i++) {exportInstall = exportInstall + tempArray[i] + "&&&&&&&&&&";}let exportPerson = "";tempArray = item.person;for (let i = 0; i < tempArray.length; i++) {exportPerson = exportPerson + tempArray[i] + "&&&&&&&&&&";}tempJson = {"name": item.name,"exportSituation": exportSituation,"exportEnd": exportEnd,"exportInstall": exportInstall,"exportPerson": exportPerson}finalJson.push(tempJson)});// console.log(JSON.stringify(finalJson))part_4(finalJson)return false; // 可以执行导出了}clearAllMark();setTimeout(function () {window.open("https://sjfw.scjs.net.cn:8801/xxgx/Enterprise/eList.aspx", "_self")}, 1000)}, 5000)function extractLetters(str) {return str.replace(/[^a-zA-Z]/g, '');}
}function part_4(my_export_data) { // 触发导出finalClear();// 清除所有的cookie//要导出的json数据const jsonData = my_export_data;//列标题,逗号隔开,每一个逗号就是隔开一个单元格let str = `公司名称,资质情况,资质到期时间,安许到期时间,三类人员\n`;//增加\t为了不让表格显示科学计数法或者其他格式for (let i = 0; i < jsonData.length; i++) {for (let item in jsonData[i]) {str += `${jsonData[i][item] + '\t'},`;}str += '\n';}//encodeURIComponent解决中文乱码let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);//通过创建a标签实现let link = document.createElement("a");link.href = uri;//对下载的文件命名link.download = "本次数据导出的明细.csv";document.body.appendChild(link);link.click();document.body.removeChild(link);
}// 清除cookie
function clearCookie(cookieName) {document.cookie = cookieName + "=; expires=" + new Date(0).toUTCString() + "; path=/";
}function clearAllMark() {clearCookie("hasRun3");clearCookie("part_1_click");clearCookie("part_2_click");clearCookie("part_3_click");clearCookie("clickTime");console.log("清除所有标记cookie成功")
}function finalClear() {clearCookie("hasRun3");clearCookie("part_1_click");clearCookie("part_2_click");clearCookie("part_3_click");clearCookie("clickTime");console.log("最后清除cookie成功")clearCookie("ALL_GLOBAL_DATA_LIST");clearCookie("mycompany");clearCookie("myindex");
}

五、最后利用JS拿到所有我们需要的数据后,我们就可以保存到Excel或者CSV中了。这样我们就顺利的实现了利用JS实现数字员工,模拟人的操作来获取网页数据,大大降低人工操作的成本了。下面这下数据都是全流程的自动化查询、自动化填充、自动化保存为Excel的。是不是非常赞!

这篇关于JS脚本实现RPA模拟人工操作网页获取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1107947

相关文章

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

Java 中实现异步的多种方式

《Java中实现异步的多种方式》文章介绍了Java中实现异步处理的几种常见方式,每种方式都有其特点和适用场景,通过选择合适的异步处理方式,可以提高程序的性能和可维护性,感兴趣的朋友一起看看吧... 目录1. 线程池(ExecutorService)2. CompletableFuture3. ForkJoi