95598智能互动网站打印按钮

在95598智能互动网站的指定元素旁边添加一个打印按钮

当前为 2023-12-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         95598智能互动网站打印按钮
// @namespace    your-namespace
// @version      1.0
// @description  在95598智能互动网站的指定元素旁边添加一个打印按钮
// @match        https://www.95598.cn/osgweb/electricityCharge*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';
    // 模拟点击某个元素
    function simulateClick(element) {
        const event = new MouseEvent('click', {
            bubbles: true,
            cancelable: true,
            view: window
        });
        element.dispatchEvent(event);
    }
    // 异步函数,用于模拟点击并获取目标元素
    async function simulateClickAndGetElement(element, findElement, index) {
        return new Promise((resolve, reject) => {
            // 模拟点击
            simulateClick(element);

            // 延时一定时间等待点击事件完成
            setTimeout(() => {
                // 获取具有 class 为 el-table__row expanded 的 tr 元素
                const targetTr = findElement.querySelector('tr.el-table__row.expanded');

                if (targetTr) {
                    // 获取同级下一个 tr 元素
                    const nextTr = targetTr.nextElementSibling;

                    if (nextTr) {
                        // 处理下一个 tr 元素
                        //console.log(nextTr);
                        // 等待点击后的元素出现
                        const pList = nextTr.querySelector('td > div > div.drop-box-left')
                        // 谷电
                        const lowEl = pList.querySelector('p:nth-child(1) span.num')
                        const lowNum = lowEl ? lowEl.innerText.trim() : '';
                        //console.log(lowNum)
                        // 峰电
                        const highEl = pList.querySelector('p:nth-child(3) span.num')
                        const highNum = highEl ? highEl.innerText.trim() : '';
                        resolve({highNum, lowNum});
                    } else {
                        console.log('没有找到下一个 tr 元素',index)
                        resolve({highNum:'0',lowNum:'0'});
                    }
                } else {
                    console.log('没有找到满足条件的 tr 元素',index)
                    resolve({highNum:'0',lowNum:'0'});
                }

            }, 100); // 延时0.1秒等待点击事件完成
        });
    }
    // 创建打印按钮
    const printButton = document.createElement('button');
    printButton.innerHTML = '打印';
    printButton.style.marginLeft = '10px';

    // 打印按钮的点击事件处理程序
    printButton.addEventListener('click', async function() {
        // 获取tbody元素
        // #pane-second > div:nth-child(2) > div.about > div.el-table.about-table.trcen.el-table--fit.el-table--enable-row-hover.el-table--enable-row-transition > div.el-table__body-wrapper.is-scrolling-none > table > tbody
        // #pane-second > div:nth-child(2) > div.about > div.el-table.about-table.trcen.el-table--fit.el-table--enable-row-hover.el-table--enable-row-transition > div.el-table__body-wrapper.is-scrolling-none > table > tbody
        const tbody = document.querySelector('#pane-second > div:nth-child(2) > div.about > div.el-table.about-table.trcen.el-table--fit.el-table--enable-row-hover.el-table--enable-row-transition > div.el-table__body-wrapper.is-scrolling-none > table > tbody');
        if (!tbody) {
            console.warn("没有找到表格页面,请切换到表格页面")
            return
        }
        // 获取所有tr标签
        const trList = tbody.querySelectorAll('tr');

        // 定义存储结果的数组
        const result = [];

        for (let i = 0; i < trList.length; i++) {
            const tr = trList[i];
            let date = ""
            // 获取日期数据
            const firstTd = tr.querySelector('td:nth-child(1) div');
            if (firstTd) {
                // 处理第一个td元素
                date = firstTd ? firstTd.innerText.trim() : '';
            }

            // 获取电表度数数据
            let reading = ""
            // 获取日期数据
            const secondTd = tr.querySelector('td:nth-child(2) div');
            if (secondTd) {
                // 处理第一个td元素
                reading = secondTd ? secondTd.innerText.trim() : '';
            }


            const thirdTd = tr.querySelector('td:nth-child(3) div div');
            const {lowNum, highNum} = await simulateClickAndGetElement(thirdTd, tbody, i)
            //console.log(highNum)
            // 组成对象并添加到结果数组
            result.push({ date, reading, lowNum, highNum });
        }

        // 返回结果数组
        console.log(result);
    });

    // 获取指定元素
    function getTargetElement () {
        return document.querySelector('#app > div > div.backdrop > div > div.my-row.clears.content-row.cler > div > div > div.el-row > div.el-col.el-col-24.el-col-md-18.el-col-lg-19.el-col-xl-19 > div > div > div > div.right-header > span.title');
    }

    function addPrintBtn (targetEl) {
        targetEl.parentNode.insertBefore(printButton, targetEl.nextSibling);
    }

    console.log("loading")

    // 等待页面加载完成
    function waitForPageLoad() {
        if (document.readyState === 'complete') {
            // 页面加载完成后执行查找元素的操作
            onMounted();
        } else {
            // 等待下一帧继续检查页面加载状态
            requestAnimationFrame(waitForPageLoad);
        }
    }

    function onMounted () {
        let targetElement = getTargetElement()
        // 在指定元素的右边添加打印按钮
        if (targetElement) {
            addPrintBtn(targetElement)
            console.log("add success")
        }
    }


    waitForPageLoad()
})();