适用于Chrome浏览器,火狐浏览器用户请移至「谷歌浏览器」使用
// ==UserScript== // @name 一键复制团购 // @namespace http://tampermonkey.net/ // @version 2.1.2 // @description 适用于Chrome浏览器,火狐浏览器用户请移至「谷歌浏览器」使用 // @author 良人、陈鹏敏 // @match https://ktt.pinduoduo.com/groups/detail/* // @match https://pro.qunjielong.com/* // @grant none // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js // @license MIT // ==/UserScript== (function () { "use strict"; const href = window.location.href; const isKttPage = href.indexOf("https://ktt.pinduoduo.com/groups/detail/") > -1; const isQjlPage = href.indexOf("https://pro.qunjielong.com/#/seq/seq-detail?actId=") > -1; /** * toast */ function showToast(msg) { const ToastNode = $(`<div class="toast-content" style="position: fixed;z-index: 100;top: 0;left: 0;width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;color: #fff"> <div class="toast" style="background-color: rgba(36, 36, 37, 0.81);border-radius: 10px;padding: 10px;justify-content: center;align-items: center;"> <span>${msg}</span> </div> </div>`); $("body").before(ToastNode); // $('body').insertAdjacentHTML('beforeend', ToastNode); setTimeout(function () { $(".toast-content").hide(); }, 1500); } /** * 将文字写入剪切板 * @param {string} text * @returns {Promise} 返回promise对象 */ function copyText(text) { // 在调用前 先访问是否存在 clipboard 对象 if (navigator.clipboard) { return navigator.clipboard.writeText(text); } else { // 不存在使用 老版本API execCommand try { const t = document.createElement("textarea"); t.nodeValue = text; t.value = text; document.body.appendChild(t); t.select(); document.execCommand("copy"); document.body.removeChild(t); return Promise.resolve(); } catch (e) { console.log(e); return Promise.reject(e); } } } /** * 抓取快团团用户信息 */ async function pickKttUserInfo() { try { const accesstoken = localStorage.getItem("accesstoken"); const ownerInfo = localStorage.getItem("ownerInfo"); const proxy = localStorage.getItem("proxy"); const api_uid = document.cookie.replace( /(?:(?:^|.*;\s*)api_uid\s*\=\s*([^;]*).*$)|^.*$/, "$1" ); const obj = { accesstoken: accesstoken || "", uid: ownerInfo ? JSON.parse(ownerInfo).uid : "", api_uid: api_uid || "", proxy_no: proxy ? encodeURIComponent(JSON.parse(proxy).proxy_no) : "", }; copyText(JSON.stringify(obj)).then(() => { console.log(obj); showToast("复制成功"); }); } catch (e) { console.log("e", e); showToast("复制失败"); } } /** * 抓取快团团用户信息 */ async function pickQjlUserInfo() { console.log("topickQjlUserInfo"); } /** * 抓取快团团笔记内容 */ async function pickKttNoteContent() { const title = $( "div[class^='Header_title'] span[class^='Header_name']" ).html(); const note = $("div[class^='ImageText_imageText']"); const items = note.children(); const mediaItems = []; // 只抓取图片、文字、视频 for (let i = 0; i < items.length; i++) { const item = items[i]; if (item.className.indexOf("ImageText_img") > -1) { const imgNode = item.children && item.children[0]; mediaItems.push({ type: "image", value: imgNode.src, }); } if (item.tagName === "PRE") { const textNode = item.children && item.children[0]; if (textNode && textNode.className.indexOf("ImageText_desc") > -1) { mediaItems.push({ type: "text", value: textNode.innerHTML, }); } } if (item.tagName === "VIDEO") { mediaItems.push({ type: "outerVideo", value: item.src, }); } } const pasteContent = JSON.stringify([ { type: "title", value: title, }, ...mediaItems, ]); // 仅仅是复制到剪切板 // 顺序:油猴一键复制后,在笔记后台点击复制笔记 navigator.clipboard.writeText(pasteContent); console.log(pasteContent); showToast("复制成功"); } /** * 抓取群接龙团详情 * @returns {Promise<void>} */ async function pickQjlNoteContent() { const title = $(".content-main section")[0]?.querySelector( ".ng-star-inserted>.pre-line" )?.textContent; const note = $(".ant-card-body section")[1]; const items = note.children; const mediaItems = []; // 只抓取图片、文字、视频 for (let i = 0; i < items.length; i++) { const item = items[i]?.children; // 做下代码保护 if (!item || !item[0]) { continue; } // 大图 if (item[0].className.indexOf("good-big-img") > -1) { mediaItems.push({ type: "image", value: item[0].src, imgType: "big", }); } // 小图 if (item[0].className.indexOf("good-small-box") > -1) { const imagesNode = Array.from(item[0].children); imagesNode.forEach((img) => { mediaItems.push({ type: "image", value: img.src, imgType: "small", }); }); } // 文本 if (item[0].className.indexOf("pre-line") > -1) { const textNode = item[0]; mediaItems.push({ type: "text", value: textNode.textContent, }); } // 视频 if (item[0].className.indexOf("video-box") > -1) { const videoNode = item[0].children[0]; mediaItems.push({ type: "outerVideo", value: videoNode.src, }); } } const pasteContent = JSON.stringify([ { type: "title", value: title, }, ...mediaItems, ]); // 仅仅是复制到剪切板 // 顺序:油猴一键复制后,在笔记后台点击复制笔记 navigator.clipboard.writeText(pasteContent); console.log(pasteContent); showToast("复制成功"); } /** * 返回自定义按钮 * @params {type|string} ##类型 * @returns {*|jQuery|HTMLElement} */ function renderCustomBtn(platform) { const $copyUserInfoBtn = $("<a>一键复制登录信息</a>"); const $copyNoteContentBtn = $("<a>一键复制笔记内容</a>"); let btnCss = null; $copyUserInfoBtn.hover( function () { $(this).css({ "background-color": "#356fd4", }); }, function () { $(this).css({ "background-color": "#1989fa", }); } ); $copyNoteContentBtn.hover( function () { $(this).css({ "background-color": "#356fd4", }); }, function () { $(this).css({ "background-color": "#1989fa", }); } ); if (isKttPage) { btnCss = { height: "24px", padding: "4px 8px", "font-size": "14px", color: "#fff", cursor: "pointer", display: "flex", "align-items": "center", "border-radius": "4px", "background-color": "#1989fa", margin: "0 5px", }; // 点击事件 $copyUserInfoBtn.click(pickKttUserInfo); $copyNoteContentBtn.click(pickKttNoteContent); } if (isQjlPage) { btnCss = { height: "32px", padding: "4px 8px", "font-size": "14px", color: "#fff", cursor: "pointer", display: "flex", "align-items": "center", "border-radius": "4px", "background-color": "#1989fa", margin: "0 5px", }; // 点击事件 $copyUserInfoBtn.click(pickQjlUserInfo); $copyNoteContentBtn.click(pickQjlNoteContent); } $copyUserInfoBtn.css(btnCss); $copyNoteContentBtn.css(btnCss); const $btnWrap = $("<div></div>"); $btnWrap.css({ display: "flex", "align-items": "center", position: "absolute", top: "10px", left: "50%", transform: "translateX(-50%)", "z-index": 999, }); // 暂时只有快团团需要copy用户信息 if (platform === "ktt") $btnWrap.append($copyUserInfoBtn); $btnWrap.append($copyNoteContentBtn); return $btnWrap; } /** * 添加 */ function initUI() { // 快团团 if (isKttPage) { const customBtn = renderCustomBtn("ktt"); $("body").before(customBtn); } // 群接龙 if (isQjlPage) { const customBtn = renderCustomBtn("qjl"); $("body").before(customBtn); } } /** * 检查下DOM节点是否已经挂载 * @returns {boolean} */ let count = 0; function checkDomIsReady() { count++; // 做个兜底,避免无限调用 let dom = null; if (isKttPage) { dom = $("div[class^='ImageText_imageText']"); } if (isQjlPage) { dom = $("#rich-text .ant-card-body .ng-star-inserted"); } if (dom?.length || count > 100) { clearInterval(interval); interval = null; initUI(); } } // 初始化 let interval = setInterval(checkDomIsReady, 100); })();