Greasy Fork

Greasy Fork is available in English.

iyuu 辅种 qBittorrent 和 Transmission 自动开始任务

2024/7/5 14:08:26

当前为 2024-07-05 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        iyuu 辅种 qBittorrent 和 Transmission 自动开始任务
// @namespace   Violentmonkey Scripts
// @include     *
// @grant       none
// @version     1.2
// @description 2024/7/5 14:08:26
// ==/UserScript==

(function() {
    'use strict';

    function clickContinue() {
        // 处理 qBittorrent
        processQbittorrent();
        // 处理 Transmission
        processTransmission();
    }

    function processQbittorrent() {
        // 检测状态为"完成"的项并模拟点击
        var completedRows = document.querySelectorAll('td[title="完成"]');
        completedRows.forEach(row => {
            simulateClick(row);
        });

        // 检测状态为"暂停",且完成度大于99%的项
        var pausedRows = document.querySelectorAll('td[title="暂停"]');
        pausedRows.forEach(row => {
            // 寻找完成度元素
            var progressBar = row.closest('tr').querySelector('.progressbar_dark');
            if (progressBar) {
                // 获取完成度百分比
                var percentage = parseFloat(progressBar.textContent);
                if (percentage > 99) {
                    // 当完成度大于99%时,模拟点击
                    simulateClick(row);
                }
            }
        });
    }

    function processTransmission() {
        // 检测状态为"已暂停"的项
        var pausedRows = document.querySelectorAll('div.td[style*="width: 80px;"] > div');
        pausedRows.forEach(row => {
            if (row.textContent.trim() === "已暂停") {
                // 寻找完成度元素
                var progressBar = row.closest('.tr').querySelector('.progressbar.white-outline > div:nth-child(1)');
                if (progressBar) {
                    // 获取完成度百分比
                    var percentage = parseFloat(progressBar.textContent);
                    if (percentage > 99) {
                        // 当完成度大于99%时,模拟点击
                        simulateClick(row);
                    }
                }
            }
        });
    }

    function simulateClick(element) {
        // 模拟点击事件
        var clickEvent = new MouseEvent("click", {
            "view": window,
            "bubbles": true,
            "cancelable": false
        });
        element.dispatchEvent(clickEvent); // 模拟点击项

        // 查找并点击对应的"继续"按钮
        var continueButton = document.querySelector('img.mochaToolButton[title="继续"]');
        if (continueButton) {
            continueButton.click();
        } else {
            // 如果在 Transmission 中
            simulateF3KeyPress();
        }
    }

    function simulateF3KeyPress() {
        var targetElement = document.activeElement || document.body;
        var f3KeyDown = new KeyboardEvent('keydown', {
            key: 'F3',
            code: 'F3',
            keyCode: 114,
            which: 114,
            bubbles: true,
            cancelable: true
        });
        var f3KeyUp = new KeyboardEvent('keyup', {
            key: 'F3',
            code: 'F3',
            keyCode: 114,
            which: 114,
            bubbles: true,
            cancelable: true
        });
        targetElement.dispatchEvent(f3KeyDown);
        targetElement.dispatchEvent(f3KeyUp);
    }

    setInterval(clickContinue, 5000); // 每5秒执行一次操作
})();