您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automation tool that sets posts in facebooks activity log to private for the new 2020 design
当前为
// ==UserScript== // @name facebook set posts to private // @description Automation tool that sets posts in facebooks activity log to private for the new 2020 design // @author Yorai Levi // @namespace https://github.com/YoraiLevi // @update https://raw.githubusercontent.com/YoraiLevi/SetFacebookPostsPrivate/master/GreaseMonkeySetFacebookPrivate.js // @supportURL https://github.com/YoraiLevi/SetFacebookPostsPrivate/issues // @include https://www.facebook.com/* // @version 0.1 // @grant GM_setValue // @grant GM_getValue // ==/UserScript== //3 user scripts merged into a single file: (function () { //set privacy action if (document.URL.match("https://www.facebook.com/.+/posts/.+")) { (function () { 'use strict'; let GLOBAL_TIMEOUT = Infinity function delayPromise(delay) { return new Promise(resolve => setTimeout(() => { resolve() }, delay)) } async function get_selector_visible(selector, period, timeout = GLOBAL_TIMEOUT) { let s_time = performance.now() while (performance.now() - s_time < timeout) { let obj = document.querySelector(selector) if (obj && !(window.getComputedStyle(obj).display === "none" || window.getComputedStyle(obj).visibility === "hidden")) // checks if exists in dom? and supposedly? visible return obj await delayPromise(period) } throw "Waiting timed out: " + selector; } async function get_selector_not_visible(selector, period, timeout = GLOBAL_TIMEOUT) { let s_time = performance.now() while (performance.now() - s_time < timeout) { let obj = document.querySelector(selector) if (!obj || (window.getComputedStyle(obj).display === "none" || window.getComputedStyle(obj).visibility === "hidden")) // checks if exists in dom? and supposedly? visible return obj await delayPromise(period) } throw "Waiting timed out: " + selector; } let three_dot_menu_selector = "div > div.nqmvxvec.j83agx80.jnigpg78.cxgpxx05.dflh9lhu.sj5x9vvc.scb9dxdr.odw8uiq3 > div > div" let menu_buttons_selector = "div.cwj9ozl2.ue3kfks5.pw54ja7n.uo3d90p7.l82x9zwi.nwpbqux9.rq0escxv.jgsskzai.ni8dbmo4.stjgntxs > div > div.j83agx80.cbu4d94t.buofh1pr > div.tojvnm2t.a6sixzi8.k5wvi7nf.q3lfd5jv.pk4s997a.bipmatt0.cebpdrjk.qowsmv63.owwhemhu.dp1hu0rb.dhp61c6y.l9j0dhe7.iyyx5f41.a8s20v7p > div" let only_me_choice_selector = "div.kr520xx4.pedkr2u6.ms05siws.pnx7fd3z.b7h9ocf4.pmk7jnqg.j9ispegn.k4urcfbm > div.cbu4d94t.j83agx80 > div > div > div > div > div > div > div:nth-child(5) > div" window.addEventListener('load', async () => { await delayPromise(1000) setPrivate() }) async function setPrivate() { //The actual action to set a post to private let three_dot_menu = await get_selector_visible(three_dot_menu_selector) three_dot_menu.click() let edit_audience_menu_button = null await get_selector_visible(menu_buttons_selector) let buttons = document.querySelectorAll(menu_buttons_selector) for (const b of buttons) { if (b.innerText === "Edit audience") edit_audience_menu_button = b } if (edit_audience_menu_button) { edit_audience_menu_button.click() } else { close() } let only_me_choice = await get_selector_visible(only_me_choice_selector) await delayPromise(1000) //dummy(presses the x to close window) //let a = document.querySelector("#mount_0_0 > div > div:nth-child(1) > div.rq0escxv.l9j0dhe7.du4w35lb > div:nth-child(5) > div > div > div.rq0escxv.l9j0dhe7.du4w35lb > div > div.iqfcb0g7.tojvnm2t.a6sixzi8.k5wvi7nf.q3lfd5jv.pk4s997a.bipmatt0.cebpdrjk.qowsmv63.owwhemhu.dp1hu0rb.dhp61c6y.l9j0dhe7.iyyx5f41.a8s20v7p > div > div > div > div > div.kr520xx4.pedkr2u6.ms05siws.pnx7fd3z.b7h9ocf4.pmk7jnqg.j9ispegn.k4urcfbm > div.cypi58rs.pmk7jnqg.fcg2cn6m.tkr6xdv7 > div") //a.click() only_me_choice.click() await get_selector_not_visible(only_me_choice_selector) close() await delayPromise(1000) } })(); } //inject activity manager else if (document.URL.match("https://www.facebook.com/.+/allactivity.+")) { (function () { 'use strict' function delayPromise(delay) { return new Promise(resolve => setTimeout(() => { resolve() }, delay)) } function get_items() { let activity_selector = "#mount_0_0 > div > div:nth-child(1) > div.rq0escxv.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb > div > div > div.j83agx80.cbu4d94t.d6urw2fd.dp1hu0rb.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.pfnyh3mw.jifvfom9.gs1a9yip.owycx6da.btwxx1t3.buofh1pr.dp1hu0rb.ka73uehy > div.rq0escxv.l9j0dhe7.tkr6xdv7.j83agx80.cbu4d94t.pfnyh3mw.d2edcug0.hpfvmrgz.dp1hu0rb.rek2kq2y.o36gj0jk > div > div.q5bimw55.rpm2j7zs.k7i0oixp.gvuykj2m.j83agx80.cbu4d94t.ni8dbmo4.eg9m0zos.l9j0dhe7.du4w35lb.ofs802cu.pohlnb88.dkue75c7.mb9wzai9.d8ncny3e.buofh1pr.g5gj957u.tgvbjcpo.l56l04vs.r57mb794.kh7kg01d.c3g1iek1.k4xni2cv > div.j83agx80.cbu4d94t.buofh1pr > div.aov4n071 > div *> div> a" return document.querySelectorAll(activity_selector) } window.addEventListener('load', async () => { await delayPromise(1000) let parent_selector = "#mount_0_0 > div > div:nth-child(1) > div.rq0escxv.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb > div > div > div.j83agx80.cbu4d94t.d6urw2fd.dp1hu0rb.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.pfnyh3mw.jifvfom9.gs1a9yip.owycx6da.btwxx1t3.buofh1pr.dp1hu0rb.ka73uehy > div.rq0escxv.l9j0dhe7.tkr6xdv7.j83agx80.cbu4d94t.pfnyh3mw.d2edcug0.hpfvmrgz.dp1hu0rb.rek2kq2y.o36gj0jk > div > div.q5bimw55.rpm2j7zs.k7i0oixp.gvuykj2m.j83agx80.cbu4d94t.ni8dbmo4.eg9m0zos.l9j0dhe7.du4w35lb.ofs802cu.pohlnb88.dkue75c7.mb9wzai9.d8ncny3e.buofh1pr.g5gj957u.tgvbjcpo.l56l04vs.r57mb794.kh7kg01d.c3g1iek1.k4xni2cv > div.j83agx80.cbu4d94t.buofh1pr > div.aov4n071 > div.n1l5q3vz.tvfksri0.oygrvhab.gu00c43d.rz7trki1.l9j0dhe7.tkr6xdv7 > div > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.cbu4d94t.pfnyh3mw.d2edcug0.hpfvmrgz.p8fzw8mz.a8nywdso.iuny7tx3.discj3wi > div > span" parent_selector = "#mount_0_0 > div > div:nth-child(1) > div.rq0escxv.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb > div > div > div.j83agx80.cbu4d94t.d6urw2fd.dp1hu0rb.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.pfnyh3mw.jifvfom9.gs1a9yip.owycx6da.btwxx1t3.buofh1pr.dp1hu0rb.ka73uehy > div.rq0escxv.l9j0dhe7.tkr6xdv7.j83agx80.cbu4d94t.pfnyh3mw.d2edcug0.hpfvmrgz.dp1hu0rb.rek2kq2y.o36gj0jk > div > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.pfnyh3mw.i1fnvgqd.bp9cbjyn.owycx6da.btwxx1t3.jei6r52m.wkznzc2l.n851cfcs.dhix69tm > div > div > div.rq0escxv.l9j0dhe7.du4w35lb.d2edcug0.hpfvmrgz.kud993qy.buofh1pr.g5gj957u > div > div > span > h1" let parent = document.querySelector(parent_selector) function insertAfter(referenceNode, newNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } let divInputs = document.createElement('div') let spanMin = document.createElement('div'); spanMin.innerText = "From:(Blank=First)", divInputs.appendChild(spanMin) let min = addInput(divInputs) min.value = GM_getValue("from", null) let spanMax = document.createElement('div'); spanMax.innerText = "To:(Blank=No Limit)", divInputs.appendChild(spanMax) let max = addInput(divInputs) parent.appendChild(divInputs) function openRangeButtonActionClosure(min_input_element, max_input_element) { return function openRangeButtonAction() { //The gui is 1 indexed and the functions are 0 indexed let from = min_input_element.value ? min_input_element.value - 1 : 0 let to = max_input_element.value ? max_input_element.value - 1 : Infinity openRange(from, to) } } async function openButtonAction() { openRange(0, Infinity) } let divButtons = document.createElement('div') addButton('Open Range', openRangeButtonActionClosure(min, max), divButtons) addButton('Open All', openButtonAction, divButtons) parent.appendChild(divButtons) }) function addInput(parentElement = document.body, cssObj) { cssObj = cssObj || { position: 'relative', 'z-index': 3 } let input = document.createElement('input'), btnStyle = input.style parentElement.appendChild(input) input.type = "number" Object.keys(cssObj).forEach(key => btnStyle[key] = cssObj[key]) return input } function addButton(text, onclick, parentElement = document.body, cssObj) { cssObj = cssObj || { position: 'relative', 'z-index': 3 } let button = document.createElement('button'), btnStyle = button.style parentElement.appendChild(button) button.innerHTML = text button.onclick = onclick Object.keys(cssObj).forEach(key => btnStyle[key] = cssObj[key]) return button } async function openRange(from, to) { //zero indexed [0from,to) async function openURLRange(from, to, frequency = 5000) { console.log("openurlrange", from, to) async function handleURL(url) { let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no, width=600,height=300,left=100,top=100`; let popup = open(url, url, params); } let items = get_items() let urls = Array.from(items).slice(from, to).map(x => x.href) let i = 1; for (const url of urls) { handleURL(url) i++ GM_setValue("from", from + i) await delayPromise(frequency) } console.log(items.length) return items.length } async function scrollRange(from) { console.log("scrollrange", from) //zero indexed [0from,to) while (from > get_items().length - 1) { //from is both an index and is inclusive! let scrolling_container_selector = "#mount_0_0 > div > div:nth-child(1) > div.rq0escxv.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb > div > div > div.j83agx80.cbu4d94t.d6urw2fd.dp1hu0rb.l9j0dhe7.du4w35lb > div.rq0escxv.l9j0dhe7.du4w35lb.j83agx80.pfnyh3mw.jifvfom9.gs1a9yip.owycx6da.btwxx1t3.buofh1pr.dp1hu0rb.ka73uehy > div.rq0escxv.l9j0dhe7.tkr6xdv7.j83agx80.cbu4d94t.pfnyh3mw.d2edcug0.hpfvmrgz.dp1hu0rb.rek2kq2y.o36gj0jk > div > div.q5bimw55.rpm2j7zs.k7i0oixp.gvuykj2m.j83agx80.cbu4d94t.ni8dbmo4.eg9m0zos.l9j0dhe7.du4w35lb.ofs802cu.pohlnb88.dkue75c7.mb9wzai9.d8ncny3e.buofh1pr.g5gj957u.tgvbjcpo.l56l04vs.r57mb794.kh7kg01d.c3g1iek1.k4xni2cv" let scrolling_container = document.querySelector(scrolling_container_selector) scrolling_container.scrollTop = scrolling_container.scrollHeight await delayPromise(1000) } } while (from < to) { console.log("newfrom", from) await scrollRange(from) from = await openURLRange(from, to) } } }()) } //ignore else if (document.URL.match("https://www.facebook.com/permalink.php.*|https://www.facebook.com/groups/.*")) { close() } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址