Greasy Fork

Greasy Fork is available in English.

Yahoo新聞留言自動檢舉腳本

檢舉特定使用者大量垃圾留言!

当前为 2023-04-09 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Yahoo新聞留言自動檢舉腳本
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  檢舉特定使用者大量垃圾留言!
// @author       hugh
// @match        https://tw.news.yahoo.com/*
// @match        https://tw.tv.yahoo.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=yahoo.com
// @require      http://code.jquery.com/jquery-latest.js
// @grant        none
// @license      MIT
// ==/UserScript==

// 使用者須先登入yahoo才可檢舉(未登入就無法檢舉留言)
// 有兩種方式檢舉, 會先優先使用第二種方式, 如無開啟使用者的所有評論歷史視窗的話, 則會使用第一種方式(關鍵字可以依據自己需要修改腳本儲存,接著重整網頁即可)
// 1.自動找關鍵字檢舉(只在該則新聞頁面找所有評論的使用者名稱是否含關鍵字, 有的話自動檢舉),
// 2.須先手動點擊某個特定評論的使用者頭像, 接著會跳出該使用者的所有評論歷史視窗, 接著點自動檢舉按鈕就會針對該使用者所有評論直接自動檢舉
// 第二種方式建議單獨開個網頁視窗在背景運行, 以免大量檢舉影響正常瀏覽網頁速度

var keywords = ["君品苑", "燒香燒金紙", "邱萍如", "身障", "家暴", "暴力", "殘疾"];

(function() {
    'use strict';
    var $ = window.jQuery;
    $('[id^=community-bar]').first().prepend('<input type="button" value="自動檢舉" id="auto_report">');
    $('[id^=ABU-Video-CanvassApplet]').first().prepend('<input type="button" value="自動檢舉" id="auto_report">');
    //$("#community-bar-container").prepend('<input type="button" value="自動檢舉" id="auto_report">');
    $("#auto_report").click(function() {
        var iframe = $('[id^=community-bar][id$=iframe]')[0];
        var btns = iframe.contentWindow.document.getElementsByTagName("BUTTON");
        var found = null;
        for (var i = 0; i < btns.length; i++) {
            if (btns[i].textContent.includes("檢視留言")) {
                found = btns[i];
                break;
            }
        }
        if (found != null) {
            found.click();
            sleep(2000).then(showmore);
        }
        else {
            sleep(2000).then(showmore);
        }
    });
})();

function showmore() {
    var $ = window.jQuery;
    var iframe = $('[id^=community-bar][id$=iframe]')[0];
    var btns = iframe.contentWindow.document.getElementsByTagName("BUTTON");
    var uc_exist = iframe.contentWindow.document.getElementsByClassName("user-comments");
    var found = null;
    var idx = 0;
    for (idx = 0; idx < btns.length; idx++) {
        if (btns[idx].textContent.includes("顯示較多內容")) {
            found = btns[idx];
            break;
        }
    }

    if (found != null) {
        if (uc_exist.length == 0) {
            autoreport_keywords();
        }
        else {
            autoreport_uc();
        }
        found.click();
        sleep(3000).then(showmore);
    }
    else {
        if (uc_exist.length == 0) {
            autoreport_keywords();
        }
        else {
            autoreport_uc();
        }
    }
}

function autoreport_keywords() {
    var $ = window.jQuery;
    var iframe = $('[id^=community-bar][id$=iframe]')[0];
    var comments = iframe.contentWindow.document.getElementsByTagName("LI");
    var idx = 0;
    var idx_k = 0;
    for (idx = 0; idx < comments.length; idx++) {
        var comment = comments[idx];
        if (comment.className.includes("comment")) {
            var username = comment.innerText.split(/\n/)[0];
            for (idx_k = 0; idx_k < keywords.length; idx_k++) {
                if (username.includes(keywords[idx_k])) {
                    //console.log(comment.innerText);
                    var ob = comment.getElementsByClassName("overflow-button")[0];
                    ob.click();
                    var fbf = comment.getElementsByClassName("flyout-button-flag")[0];
                    fbf.click();
                    var inputs = comment.getElementsByTagName("input");
                    for (var i = 0; i < inputs.length; i++) {
                        if (inputs[i].defaultValue.includes("疑似垃圾內容")) {
                            inputs[i].click();
                            var btns = comment.getElementsByTagName("BUTTON");
                            for (var b = 0; b < btns.length; b++) {
                                if (btns[b].textContent == "完成") {
                                    btns[b].click();
                                    break;
                                }
                            }
                        }
                    }
                    break;
                }
            }
        }
    }
}

function autoreport_uc() {
    var $ = window.jQuery;
    var iframe = $('[id^=community-bar][id$=iframe]')[0];
    var comments = iframe.contentWindow.document.getElementsByTagName("LI");
    var idx = 0;
    for (idx = 0; idx < comments.length; idx++) {
        var comment = comments[idx];
        if (comment.className.includes("comment")) {
            // 如果是user-comments的子節點的話, 直接檢舉
            if (comment.closest("div.user-comments") != null) {
                // 有可能是剛點完檢舉的comment, ob會找不到
                var ob = comment.getElementsByClassName("overflow-button")[0];
                if (ob != null) {
                    ob.click();
                    var fbf = comment.getElementsByClassName("flyout-button-flag")[0];
                    fbf.click();
                    var inputs = comment.getElementsByTagName("input");
                    for (var i = 0; i < inputs.length; i++) {
                        if (inputs[i].defaultValue.includes("疑似垃圾內容")) {
                            inputs[i].click();
                            var btns = comment.getElementsByTagName("BUTTON");
                            for (var b = 0; b < btns.length; b++) {
                                if (btns[b].textContent == "完成") {
                                    btns[b].click();
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

function sleep(time) {
    return new Promise(resolve => setTimeout(resolve, time));
}