Greasy Fork

Greasy Fork is available in English.

EPIC游戏名称导出

自动点击“显示更多”按钮,并捕获 AJAX 响应数据,支持手动启动导出操作。

当前为 2024-11-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         EPIC游戏名称导出
// @namespace    http://tampermonkey.net/
// @version      1.1
// @license PaperTiger
// @description  自动点击“显示更多”按钮,并捕获 AJAX 响应数据,支持手动启动导出操作。
// @author       Paper Tiger
// @match         *://*.epicgames.com/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.0/xlsx.full.min.js
// @grant        none
// ==/UserScript==

/* global XLSX */


(function() {
    'use strict';

    const responses = [];

    const originalFetch = window.fetch;
    window.fetch = function(...args) {
        return originalFetch(...args).then(response => {
            if (response.url.includes('ajaxGetOrderHistory')) {
                response.clone().json().then(data => {
                    responses.push(data);
                    console.log('获得响应:', data);
                });
            }
            return response;
        });
    };

    const originalXhrOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url, ...rest) {
        this.addEventListener('load', function() {
            if (url.includes('ajaxGetOrderHistory')) {
                const data = JSON.parse(this.responseText);
                responses.push(data);
                console.log('获得响应:', data);
            }
        });
        originalXhrOpen.call(this, method, url, ...rest);
    };

    function createExportButton() {
        const button = document.createElement('button');
        button.textContent = '开始导出';
        button.style.position = 'fixed';
        button.style.top = '10px';
        button.style.right = '400px';
        button.style.zIndex = '99999';
        button.style.padding = '10px';
        button.style.backgroundColor = 'rgba(40, 167, 69, 1)';
        button.style.color = 'white';
        button.style.border = '2px solid red';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';
        document.body.appendChild(button);

        button.addEventListener('click', function() {
            clickMore();
        });
    }

    function clickMore() {
        const moreButton = document.querySelector('#payment-history-show-more-button');
        if (moreButton) {
            moreButton.click();
            console.log('点击了显示更多按钮');
            setTimeout(clickMore, 1000);
        } else {
            console.log("没有更多内容可以加载。");
            exportResponses();
        }
    }

    function exportResponses() {
    const exportData = responses.flatMap(response =>
        response.orders.flatMap(order =>
            order.items.map(item => ({
                '游戏名称': item.description, // 提取游戏名称
                '付款金额': order.presentmentTotal // 提取付款金额
            }))
        )
    );

    const workbook = XLSX.utils.book_new();
    const worksheet = XLSX.utils.json_to_sheet(exportData);
    XLSX.utils.book_append_sheet(workbook, worksheet, '订单历史');
    XLSX.writeFile(workbook, '游戏订单历史.xlsx');
}
    createExportButton();
})();