JS实现不同网页间的数字员工与数据存储

news2024/9/22 1:22:32

一、目标任务:

要去 https://sjfw.scjs.net.cn:8801/xxgx/Enterprise/eList.aspx 根据企业名称查询到统一社会征信代码。

然后拿统一社会征信代码去 https://rzsc.sczwfw.gov.cn/portal/newOrg/orgRegister.jsp 查询法人信息。

最后两个页面不断跳转进行信息存储,最后导出数据。

二、实现代码

<!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;">
        执行获取社会统一信用代码
    </button>
</div>
</html>

<script src="./xlsx/xlsx.js" charset="utf-8"></script>
<script>
    // file:///C:/Users/xlliu24/Desktop/IT01/byCodeGetPhone.html
    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);
            }
            window.name = "ALL_VAR=" + JSON.stringify(companyList) + "&index*0&[]";
            // window.name只能存储一个变量,所以还必须用
            setTimeout(function () {
                window.open("https://sjfw.scjs.net.cn:8801/xxgx/Enterprise/eList.aspx",
                    "_self")
            }, 1000)
        };
        reader.readAsArrayBuffer(file);
    }
</script>
// ==UserScript==
// @name         搜索参数显示
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  显示搜索的参数
// @author       You
// @include      https://sjfw.scjs.net.cn:8801/*
// @include      https://rzsc.sczwfw.gov.cn/*
// @grant        none
// ==/UserScript==
let domainName = window.location.hostname;
// alert(domainName)
let ALL_VAR = getVarFromWindowName("ALL_VAR"); // 拿到所有变量
let varArray = ALL_VAR.split("&");
let companyList = JSON.parse(varArray[0]); // 公司名称-全局

let indexArray = varArray[1].split("*");
let index = parseInt(indexArray[1]); // 下标-全局

// alert(getCookie("clickSearch"))
if (!getCookie("clickSearch") == "1" && domainName == "sjfw.scjs.net.cn") { // 判断是否首次击过搜索
    let companyInput = document.getElementById("mc");
    companyInput.value = companyList[index]; // 下标已经从全局获取
    let searchButton = document.getElementById("MainContent_Button1");
    setTimeout(function () {
        searchButton.click()
        setCookie("clickSearch", "1", "1"); // 说明点击了搜索了
    }, 500)
    // alert("执行1")
    // alert("我应该在跳转后执行的...")
} else {
    let code = "";
    // 执行点击以后要去拿社会征信代码
    setTimeout(function () {
        if (domainName == "sjfw.scjs.net.cn") {
            let tempList = document.getElementsByClassName("text-center");
            let codeList = [];
            // alert(JSON.stringify(varArray[2]))
            console.log(JSON.stringify(varArray[2]))
            if (varArray[2] == "[]") {
                // alert("varArray[2] 不改变")
                console.log("不改变")
            } else {
                // alert("varArray[2] 改变")
                codeList = JSON.parse(varArray[2]); // 公司名称-全局
            }
            code = tempList[tempList.length - 1].innerText;
            let companyInfo = {
                "name": companyList[index], "code": code
            }
            codeList.push(companyInfo);
            // 同时更新记录
            window.name = "ALL_VAR=" + JSON.stringify(companyList) + "&index*" + index + "&" + JSON.stringify(codeList);
            setTimeout(function () {
                clearCookie("clickSearch"); // 需要放到另外一个地方清理
                window.open("https://rzsc.sczwfw.gov.cn/portal/newOrg/orgRegister.jsp", "_self")
            }, 200)
        }
        // alert(code)
    }, 1000)
}
if (domainName == "rzsc.sczwfw.gov.cn") {
    if (varArray[2] == "[]") {
        // alert("varArray[2] 不改变")
        console.log("不改变")
    } else {
        // alert("varArray[2] 改变")
        codeList = JSON.parse(varArray[2]); // 公司名称-全局
    }
    setTimeout(function () {
        // alert("执行了填充")
        // 跳转页面后一切都要重新获取
        let varArray = ALL_VAR.split("&");
        let indexArray = varArray[1].split("*");
        let index = parseInt(indexArray[1]); // 下标-全局
        getPhone(codeList[index].code);
    }, 1000)
}


// 1、从window.name获取全局变量
function getVarFromWindowName(varName) {
    var nameValuePairs = window.name.split(';');
    for (var i = 0; i < nameValuePairs.length; i++) {
        var pair = nameValuePairs[i].split('=');
        if (pair[0] === varName) {
            return pair[1];
        }
    }
    return null;
}

// 2、获取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 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=/";
}

function clearCookie(cookieName) {
    document.cookie = cookieName + "=; expires=" + new Date(0).toUTCString() + "; path=/";
}

//3、从新页面根据code拿到手机号
// 320381198812252138
function getPhone(code) {
    let deptName = document.getElementById("deptName");
    let socialCreditCode = document.getElementById("socialCreditCode");
    let deptPerson = document.getElementById("deptPerson");
    deptName.value = code;
    socialCreditCode.value = code;
    deptPerson.value = code;
    let deptPersonCode = document.getElementById("deptPersonCode");
    deptPersonCode.value = "320381198812252138";
    deptPersonCode.focus();
    deptPersonCode.blur();// 失去焦点
    setTimeout(function () {
        let deptPersonCodeMsg = document.getElementById("deptPersonCodeMsg");
        // alert(deptPersonCodeMsg.innerText)
        // alert(deptPersonCodeMsg.innerText.substring(18, 29))
        let codeList = [];
        if (varArray[2] == "[]") {
            // alert("varArray[2] 不改变")
            console.log("不改变")
        } else {
            // alert("varArray[2] 改变")
            codeList = JSON.parse(varArray[2]); // 公司名称-全局
        }
        codeList[index].phone = deptPersonCodeMsg.innerText.substring(18, 29);
        if (deptPersonCodeMsg.innerText.substring(18, 29).startsWith("信")) {
            codeList[index].phone = "无";
        }
        if (index < companyList.length - 1) {
            index = index + 1;
        } else {
            // 调用导出
            // alert("最终结果" + JSON.stringify(companyList) + "---" + index + "---" + JSON.stringify(codeList));
            part_4(codeList)
            return false;
        }
        // alert(JSON.stringify(codeList))
        window.name = "ALL_VAR=" + JSON.stringify(companyList) + "&index*" + index + "&" + JSON.stringify(codeList);
        ALL_VAR = getVarFromWindowName("ALL_VAR"); // 拿到所有变量
        varArray = ALL_VAR.split("&");
        companyList = JSON.parse(varArray[0]); // 公司名称-全局
        indexArray = varArray[1].split("*");
        index = parseInt(indexArray[1]); // 下标-全局
        if (varArray[2] == "[]") {
            // alert("varArray[2] 不改变")
            console.log("不改变")
        } else {
            // alert("varArray[2] 改变")
            codeList = JSON.parse(varArray[2]); // 公司名称-全局
        }
        // alert(JSON.stringify(companyList) + "---" + index + "---" + JSON.stringify(codeList));
        window.open("https://sjfw.scjs.net.cn:8801/xxgx/Enterprise/eList.aspx", "_self")
    }, 3000)
}

// 4、导出为csv
function part_4(my_export_data) { // 触发导出
    //要导出的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);
}

三、最终存储与拿到的数据如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pythonnet-C#调用python脚本-含matplotlib+biopython

本地环境&#xff1a; win10&#xff0c;.NET Core 6&#xff0c;Python 3.9.13&#xff0c;pythonnet 3.0.3 测试的包&#xff1a;biopython 1.82&#xff0c;matplotlib 3.5.2 参考&#xff1a; GitHub - pythonnet/pythonnet: Python for .NET is a package that gives Py…

FPGA 如何进入 AI 领域的思考

FPGA在AI领域如何发力&#xff0c;如何抢碗饭吃&#xff1f;大多数提到是硬件加速&#xff0c;在AI工程里&#xff0c;完成数据前处理&#xff08;加速&#xff09;。大家很少提到AI模型的本身的推理过程&#xff0c;让FPGA成为AI模型的推理/算力芯片&#xff0c;这自然是 FPGA…

家校互动实现方案

目前&#xff0c;家校互动正成为最重要的校园场景之一。 大家都知道我主要做萤石的二次开发&#xff0c;这边也是给出了一个利用萤石开放平台的解决方案。 主要功能如下&#xff1a; 1.门禁管理&#xff0c;告警推送 2.可多人通过小程序看画面 3.电子班牌-父母微信一键通话…

第二代骁龙8平台手机nubia Z5拆解

这周末&#xff0c;除非外面下钞票&#xff0c;否则谁也拦不住我玩《黑神话悟空》&#xff08;附&#xff1a;两款可以玩转悟空的显卡推荐&#xff09; 天玑助力联发科力压高通~探秘MTK 5G旗舰智能手机SoC芯片——MT6989&#xff08;天玑9300&#xff09; 第二代骁龙8平台手机…

html+css+js网页设计 个人博客10个页面

htmlcssjs网页设计 个人博客10个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xf…

图像基础(2)视频信号和图像数字化的理论

#灵感# 继续读书&#xff0c;主要是视频信号相关。 视频实际上是按时间轴排列的一组图像序列。模拟图像在空间位置上有连续性&#xff0c;每一个位置上光的强度变化也有连续性。 1、视频信号分为3类&#xff1a; 分量视频、复合视频、S-Video. 分量视频是将原始视频信号&am…

无人机的工业应用场景

一、监测与检查 电力巡检&#xff1a;工业无人机在电力巡检中发挥着重要作用&#xff0c;能够替代人工进行高空、高风险作业&#xff0c;提高电网巡视效率&#xff0c;降低运维成本。通过搭载高清相机、红外热成像等设备&#xff0c;无人机可以实时传输电力线路状态&#xff0…

开放式耳机哪个品牌的好用?热榜口碑开放式耳机测评集锦!

现在市面上的开放式耳机真的越来越多&#xff0c;但是开放式耳机哪个品牌好用呢&#xff1f;可能不了解开放式耳机的就会开始犯难了&#xff0c;所以到底该怎么样选择才能选出一款比较适合自己的开放式耳机呢&#xff1f;根据这个问题&#xff0c;我作为一名耳机测评师&#xf…

【操作系统】实验:文件系统

目录 一、实验目的 二、实验要求 三、实验步骤 四、核心代码 五、记录与处理 六、思考 七、完整报告和成果文件提取链接 一、实验目的 1、掌握文件系统的基本结构和文件系统的管理方法 2、加深对两级文件目录认识和理解 3、对文件操作的系统命令实质内容和执行过程深入…

python例子:使用pygame实现五彩烟花

作品介绍 作品名称&#xff1a;使用pygame实现五彩烟花 开发环境&#xff1a;PyCharm 2023.3.4 python3.7 用到的库&#xff1a;pygame、random、sys、math 作品简介&#xff1a;该实例是一个使用 Pygame 库实现的烟花效果模拟程序。 实现过程 一、初始化Pygame pygame.…

如何在没有密码的情况下从 iPad 中删除 MDM?100% 工作

如果您遇到已使用远程管理锁恢复的 iPad 或 iPhone&#xff0c;您将需要远程管理器的登录信息。 从 iPad 中删除 MDM可能很困难&#xff0c;尤其是在您没有正确的权限的情况下。在寻求帮助时&#xff0c;许多客户访问 Apple 的官方论坛&#xff0c;却发现问题并不总是容易解决。…

java中的原子性

在Java中&#xff0c;原子性&#xff08;Atomicity&#xff09;是并发编程中的一个核心概念&#xff0c;指的是一个或多个操作在中间状态对其他线程不可见&#xff0c;且不可被线程调度机制中断的性质。一个原子操作要么全部执行成功&#xff0c;要么完全不执行&#xff0c;不会…

第136天:内网安全-横向移动资源约束委派

利用条件 首先是dc域控主机必须是win2012以上的主机 其次是域内有一个账户&#xff0c;可以同时登录两台主机 利用 jie 可以登录 win2008 也可以登录 win7 资源委派不需要设置委派&#xff0c;默认即可 实验复现 复现环境 通过网盘分享的文件&#xff1a;136-xiaodi.local…

天宝TBCTrimble Business Center中文版本下载安装使用介绍

天宝TBC&#xff1a;测绘之道&#xff0c;尽在其中 引言 昔日杜甫&#xff0c;忧国忧民&#xff0c;今朝我辈&#xff0c;测绘天下。天宝TBC&#xff0c;乃测绘之利器&#xff0c;助我等行走于山川河流之间&#xff0c;绘制天地之图。此文将以杜甫之笔&#xff0c;述说TBC之妙…

C_05_编译4阶段

c语言编译的4个阶段&#xff1a;预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令&#xff0c;其中主要是头文件展开&#xff08;include)&#xff0c;宏定义&#xff08;defind&#xff09;&#xff0c;选择性编译&#xff08;ifdef&#xff09;三种指令 预…

【ArcGIS/GeoScene Pro】离线许可归还不了

问题&#xff1a; 解决方案&#xff1a; 将一下项置空即可&#xff0c;让后重新获取许可信息

网络安全售前入门01——产品了解

目录 1.概述 2.常见网络安全产品 2.1下一代防火墙&#xff08;NGFW&#xff09; 3.后续 1.概述 为方便初入网络安全售前工作的小伙伴了解网安行业情况&#xff0c;我制作一系统售前入门&#xff08;安全产品&#xff0c;安全服务&#xff0c;法律法规等&#xff09;介绍&am…

AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章

近日&#xff0c;由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会&#xff08;DTCC 2024&#xff09;隆重召开。大会以“自研创新 数智未来”为主题&#xff0c;吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴&#xff…

vs2019 C++ 无法定位程序输入点于动态链接库

问题 一个项目一段时间没运行后&#xff0c;再运行报以下错误&#xff1a; 无法定位程序输入点??0lnferenceEngineExceptiondetailslnferenceEngine QEAAAEBV? b a s i c s t r i n g D U ? basic stringDU? basicstringDU?char traitsDstd v?$allocatorD2 stdHOZ 于动…

解决 python import 报错问题

需求问题描述 期望用Python写工具&#xff0c;转换excel内容合并到xml中&#xff0c;需要用到 openpyxl & lxml 库&#xff0c;因此需要安装。 import openpyxl 提示报错&#xff0c;但是没有像java代码的解决方案推荐&#xff0c;即无法直接导包。 分析记录 Note&#…