// ==UserScript== // @name Yahoo新聞留言自動檢舉腳本 // @namespace http://tampermonkey.net/ // @version 0.4 // @description 檢舉特定使用者大量垃圾留言! // @author hughccr // @match https://tw.news.yahoo.com/*.html // @match https://tw.news.yahoo.com/*.html?bcmt=1 // @icon https://www.google.com/s2/favicons?sz=64&domain=yahoo.com // @require http://code.jquery.com/jquery-latest.min.js // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/463570/Yahoo%E6%96%B0%E8%81%9E%E7%95%99%E8%A8%80%E8%87%AA%E5%8B%95%E6%AA%A2%E8%88%89%E8%85%B3%E6%9C%AC.user.js // @updateURL https://update.greasyfork.icu/scripts/463570/Yahoo%E6%96%B0%E8%81%9E%E7%95%99%E8%A8%80%E8%87%AA%E5%8B%95%E6%AA%A2%E8%88%89%E8%85%B3%E6%9C%AC.meta.js // ==/UserScript== // 0.使用者須先登入yahoo才可檢舉(未登入就無法檢舉留言) // 1.僅本頁面自動檢舉, 根據關鍵字找出特定使用者後並針對該評論檢舉, 當本頁面跑完後會自動重整頁面直到找不到特定使用者 // 2.全自動化檢舉, 根據關鍵字找出特定使用者後, 開啟該使用者的所有歷史評論視窗並檢舉該使用者的所有評論 // 檢舉完後自動重整網頁, 繼續同樣流程, 當已經找不到目標後會自動點擊下一則新聞並繼續尋找 var keywords = ["抗議", "重障", "輕障", "身障", "君品苑", "燒香", "燒金紙", "邱萍如", "家暴", "暴力", "殘疾"]; var mode = ""; var reload_flag = false; var jump_proc_flag = false; var jump_proc_times = 0; var check_ready_times = 0; var check_ready_finished = false; (function() { 'use strict'; var $ = window.jQuery; $('[id^=community-bar]').first().prepend(''); $("#stop_auto_report").click(function() { sessionStorage.setItem("fully_auto_again", "false"); sessionStorage.setItem("current_page_again", "false"); document.location.reload(true); }); $('[id^=community-bar]').first().prepend(''); $("#auto_report_current_page").click(function() { mode = "current_page"; 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(3000).then(showmore); } else { sleep(3000).then(showmore); } }); $('[id^=community-bar]').first().prepend(''); $("#auto_report_fully_auto").click(function() { mode = "fully_auto"; 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(3000).then(showmore); } else { sleep(3000).then(showmore); } }); if (sessionStorage.getItem("fully_auto_again") == "true" || sessionStorage.getItem("current_page_again") == "true") { document.title = "*" + document.title; checkReady(); } })(); function checkReady() { var $ = window.jQuery; var iframe = $('[id^=community-bar][id$=iframe]')[0]; if (iframe != null && iframe.contentWindow.document.querySelector("button.comments-title") != null && iframe.contentWindow.document.querySelector("button.comments-title").textContent.includes("檢視留言")) { check_ready_finished = true; if (sessionStorage.getItem("fully_auto_again") == "true") { $("#auto_report_fully_auto").click(); if (iframe.contentWindow.document.querySelector("button.comments-title").textContent.includes("檢視留言")) { sleep(3000).then(checkReady); } } else if (sessionStorage.getItem("current_page_again") == "true") { $("#auto_report_current_page").click(); if (iframe.contentWindow.document.querySelector("button.comments-title").textContent.includes("檢視留言")) { sleep(3000).then(checkReady); } } } else if (check_ready_finished == false){ if (check_ready_times <= 5) { ++check_ready_times; sleep(3000).then(checkReady); } else { document.location.reload(true); } } } function showmore() { var $ = window.jQuery; var iframe = $('[id^=community-bar][id$=iframe]')[0]; if (mode == "current_page") { autoreport_current_page(); } else if (mode == "fully_auto") { autoreport_fully_auto(); } var btn = iframe.contentWindow.document.querySelector("div.user-comments > div > button"); var btn2 = iframe.contentWindow.document.querySelector("div.comments-body > button"); !!btn ? btn.click() : btn2?.click(); sleep(3000).then(showmore); } var count = 0; function autoreport_current_page() { var $ = window.jQuery; var iframe = $('[id^=community-bar][id$=iframe]')[0]; var comments = iframe.contentWindow.document.querySelectorAll("li.comment"); for (var idx = 0; idx < comments.length; idx++) { var comment = comments[idx]; if (comment.closest("div.user-comments") == null) { //var username = comment.innerText.split(/\n/)[0]; var username = comment.children[0].children[0].children[1].textContent; for (var 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(); ++count; break; } } break; } } break; } } } } // 如果已經全部檢舉完(無顯示更多內容按鈕), 則重整頁面 if (iframe.contentWindow.document.querySelector("div.comments-body > button") == null && count > 0 && reload_flag == false) { reload_flag = true; sessionStorage.setItem("current_page_again", "true"); sleep(10000).then(() => document.location.reload(true)); } } function autoreport_fully_auto() { var $ = window.jQuery; var iframe = $('[id^=community-bar][id$=iframe]')[0]; var comments = iframe.contentWindow.document.querySelectorAll("li.comment"); var idx = 0; var comment = null; var done = false; var uc = iframe.contentWindow.document.querySelector("div.user-comments"); // 如果沒有開啟歷史評論視窗的話, 就根據關鍵字找出特定使用者, 找到後點擊使用者頭像 if (uc == null) { for (idx = 0; idx < comments.length; idx++) { comment = comments[idx]; //var username = comment.innerText.split(/\n/)[0]; var username = comment.children[0].children[0].children[1].textContent; for (var idx_k = 0; idx_k < keywords.length; idx_k++) { if (username.includes(keywords[idx_k])) { var avatar = comment.getElementsByClassName("avatar")[0]; if (avatar != null) { avatar.click(); done = true; break; } } } if (done) { break; } } // 如果找不到特定使用者且顯示更多內容按鈕也點完的話, 就挑選一則有留言的新聞並前往 if (done == false && iframe.contentWindow.document.querySelector("button.comments-title").textContent.includes("個留言") == true && iframe.contentWindow.document.querySelector("div.comments-body > button") == null) { if (sessionStorage.getItem("fully_auto_again") != "true") { sessionStorage.setItem("fully_auto_again", "true"); } document.getElementById("stream-wrapper")?.scrollIntoView({behavior: "instant", block: "start", inline: "nearest"}); document.getElementById("stream-wrapper")?.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"}); if (jump_proc_flag == false) { jump_proc_flag = true; sleep(5000).then(() => { jump_proc_flag = false; ++jump_proc_times; var arr = document.querySelectorAll("li.common.stream-item > div.action-bar > div > div.comments-button a"); for (idx = 0; idx < arr.length; idx++) { if ((parseInt(arr[idx].lastChild?.textContent) >= 50 || jump_proc_times >= 4) && arr[idx].href.includes("tw.news.yahoo.com") && sessionStorage.getItem(arr[idx].href) == null) { sessionStorage.setItem(arr[idx].href, arr[idx].href); //document.location = arr[idx].href; document.location = arr[idx].href.replace("?bcmt=1", ""); break; } } }); } } } // 有開啟歷史評論視窗 if (uc != null) { // 先移除span(如果有的話) var spans = iframe.contentWindow.document.querySelectorAll("div.user-comments > div > ul > span"); for (var s = 0; s < spans.length; s++) { var node = spans[s]; node.parentNode.removeChild(node); } // 再檢舉comment for (idx = 0; idx < comments.length; idx++) { comment = comments[idx]; // 如果是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; } } break; } } } } } // 如果已經全部檢舉完(無顯示更多內容按鈕), 則重整頁面 if (iframe.contentWindow.document.querySelector("div.user-comments > div > button") == null && reload_flag == false) { reload_flag = true; sessionStorage.setItem("fully_auto_again", "true"); sleep(10000).then(() => document.location.reload(true)); } } } function sleep(time) { return new Promise(resolve => setTimeout(resolve, time)); }