您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一键无图、隐藏图片、查看源代码
当前为
// ==UserScript== // @name zherop小工具 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 一键无图、隐藏图片、查看源代码 // @author [email protected] // @match *://*/* // @connect static.61read.com // @connect basic.10jqka.com.cn // @require https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_download // @grant GM_openInTab // @license AGPL License // ==/UserScript== (function() { 'use strict'; // 定义 var menus = [ {"code":"noPic","name":"一键无图","event":"noPic"}, {"code":"hidePic","name":"隐藏图片","event":"hidePic"}, {"code":"viewSource","name":"查看源代码","event":"viewSource"}, {"code":"downloadPng","name":"下载图片","event":"downloadPng","domain":"http://static.61read.com/"}, {"code":"openIframe","name":"访问iframe","event":"openIframe"}, {"code":"checkTargetInIwencai","name":"标的筛选","event":"checkTargetInIwencai","domain":"https?://www.iwencai.com/"} ] // 菜单样式 function menuStyle() { return ` <style> .zp-menu { left: 0px; display: block; top: 50%; position: fixed; z-index: 9999; background: green; color: white; text-align: center; border-radius: 0 7px 7px 0px; font-size: 13px; } .zp-menu-item { padding: 5px; border: 1px solid; cursor: pointer; } @media screen and (max-width:768px) { .zp-menu { font-size: 3.5vw } } </style> ` } // 创建菜单DOM function createMenuDom() { var html = '<div id="zp-menu" class="zp-menu">' menus.forEach(item => { var regexObject = new RegExp(item.domain); if(!item.domain || item.domain == "*" || regexObject.test(window.location.href)) { html += `<div class="zp-menu-item" type="${item.code}">${item.name}</div>` } }) html += '</div>' return html; } // 菜单事件 // 一键无图 function noPic(){ $("img").remove(); $("svg").remove(); } // 隐藏图片 function hidePic(){ $("img").hide(); $("svg").hide(); } // 查看源代码 function viewSource() { GM_openInTab('view-source:' + window.location.href) } // 下载图片 function downloadPng() { var currentHref = window.location.href if(currentHref.startsWith('http://static.61read.com/')) { var baseURL = currentHref.substr(0,currentHref.lastIndexOf('/')) var xmlFile = unsafeWindow.xmlFile var pageFile = unsafeWindow.pageFile GM_xmlhttpRequest({ method: "GET", url: baseURL + '/'+ pageFile + xmlFile, headers: { "Content-Type": "application/xml" }, onload: function(response) { var responseXML = response.responseXML var items = responseXML.getElementsByTagName('item') for(var i=0;i<items.length;i++){ var path = items[i].getAttribute('href') var imageURL = baseURL + '/'+ pageFile + path console.log(imageURL) var name = i + '.png' if(path.lastIndexOf('/') > 0) { name = path.substring(path.lastIndexOf('/') + 1) } download(imageURL,name); } } }); } else { } } function download(filePath,name){ fetch(filePath).then(res => res.blob()).then(blob => { const a = document.createElement('a'); document.body.appendChild(a) a.style.display = 'none' // 使用获取到的blob对象创建的url const url = window.URL.createObjectURL(blob); a.href = url; // 指定下载的文件名 a.download = name; a.click(); document.body.removeChild(a) // 移除blob对象的url window.URL.revokeObjectURL(url); }); } function download2(url,name) { GM_download({ url: url, onerror: function (error) { console.log(error) }, onprogress: (pro) => { console.log(pro.loaded) //文件加载量 console.log(pro.totalSize) //文件总大小 }, ontimeout: () => { //如果此下载由于超时而失败,则要执行的回调 }, onload: () => { //如果此下载完成,则要执行的回调 } }) } // 打开iframe function openIframe() { if(document.getElementsByTagName("iframe").length > 0){ window.open(document.getElementsByTagName("iframe")[0].src) } else { console.log('不存在iframe') } } function copyText(text) { if($('#zp-copy').length <= 0) { $("body").append('<textarea id="zp-copy" style="display:none;"></textarea>') } $('#zp-copy').text(text).show(); var ele = document.getElementById("zp-copy"); ele.select(); document.execCommand('copy', false, null); $('#zp-copy').hide(); alert('已复制到剪切板!'); } function getRequest(url,mimeType) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, overrideMimeType: mimeType ? mimeType:"text/html; charset=utf-8", onload: function(response) { if (response.status === 200) { resolve(response.responseText); } else { reject("Failed to fetch HTML page."); } }, onerror: function(error) { reject(error); } }); }); } async function checkTargetInIwencai() { console.log('checkTarget'); if(window.location.href.startsWith("http://www.iwencai.com/")) { let trs = $(".iwc-table-scroll").find("tr"); let data = [] for(let i=0;i<trs.length;i++) { let tds = $(trs[i]).find("td"); let obj = {} // checkbox元素 obj.checkbox = $(tds[1]); // 标的代码 obj.code = $(tds[2]).text(); // 标的名称 obj.name = $(tds[3]).text(); obj.price = $(tds[4]).text(); // ROE obj.r1 = $(tds[14]).text(); obj.r2 = $(tds[15]).text(); obj.r3 = $(tds[16]).text(); obj.r4 = $(tds[17]).text(); obj.r5 = $(tds[18]).text(); // 净利润现金含量 obj.c1 = $(tds[19]).text(); obj.c2 = $(tds[20]).text(); obj.c3 = $(tds[21]).text(); obj.c4 = $(tds[22]).text(); obj.c5 = $(tds[23]).text(); // 毛利率 obj.m1 = $(tds[24]).text(); obj.m2 = $(tds[25]).text(); obj.m3 = $(tds[26]).text(); obj.m4 = $(tds[27]).text(); obj.m5 = $(tds[28]).text(); data.push(obj); } // 根据规则选中符合要求的标的 let selectedData = [] for(let j=0;j<data.length;j++) { let selected = false; let obj = data[j]; // 连续5年的ROE中,平均值并且最近1年的数值高于20%的 let rf = parseFloat(obj.r1); let rt = (parseFloat(obj.r1) + parseFloat(obj.r2) + parseFloat(obj.r3) + parseFloat(obj.r4) + parseFloat(obj.r5))/5; obj.rt = rt; if(rf >= 20 && rt >= 20) { selected = true; } else { selected = false; } // 连续5年的平均净利润现金含量高于100%的 let ct = (parseFloat(obj.c1) + parseFloat(obj.c2) + parseFloat(obj.c3) + parseFloat(obj.c4) + parseFloat(obj.c5))/5; obj.ct = ct; if(ct >= 100) { selected = selected && true; } else { selected = selected && false; } // 连续5年的毛利率中,平均值并且最近1年的数值高于40%的 let mf = parseFloat(obj.m1); let mt = (parseFloat(obj.m1) + parseFloat(obj.m2) + parseFloat(obj.m3) + parseFloat(obj.m4) + parseFloat(obj.m5))/5; obj.mt = mt; if(mt >= 40 && mf >= 40) { selected = selected && true; } else { selected = selected && false; } // 连续5年的资产负债率中,平均值且最近1年的数值小于60% if(selected) { // 获取资产负债率 let htmlContent = await getRequest("http://basic.10jqka.com.cn/" + obj.code + "/finance.html","text/html; charset=gbk"); let financeData = parseFinance(htmlContent); obj.financeData = financeData; for(let i=0;i<financeData.length && i<5;i++){ if(parseFloat(financeData[i].value) > 60) { selected = selected && false; break; } } } // 连续5年的派息比率中,每年都大于25% if(selected){ // 获取派息比率数据 let htmlContent = await getRequest("http://basic.10jqka.com.cn/" + obj.code + "/bonus.html","text/html; charset=gbk"); let bonusData = parseBonus(htmlContent); obj.bonusData = bonusData; for(let i=0;i<bonusData.length && i<5;i++){ if(parseFloat(bonusData[i].value) < 25) { selected = selected && false; break; } } } if(selected) { selectedData.push(obj); obj.checkbox.click(); } } // 复制选中的结果 let content = ""; for(let index in selectedData){ content += "代码:" + selectedData[index].code + "\n"; content += "名称:" + selectedData[index].name + "\n"; content += "现价:" + selectedData[index].price + "\n"; content += "连续5年的ROE平均值:" + selectedData[index].rt.toFixed(2) + "%\n"; content += "连续5年的净利润现金含量平均值:" + selectedData[index].ct.toFixed(2) + "%\n"; content += "连续5年的毛利率平均值:" + selectedData[index].mt.toFixed(2) + "%\n"; let f = ""; for(let i=0;i<selectedData[index].financeData.length && i<5;i++){ f += selectedData[index].financeData[i].title + " " + selectedData[index].financeData[i].value + " "; } content += "连续5年的资产负债率:" + f + "\n"; let b = ""; for(let i=0;i<selectedData[index].bonusData.length && i<5;i++){ b += selectedData[index].bonusData[i].title + " " + selectedData[index].bonusData[i].value + " "; } content += "连续5年的的派息比率:" + b + "\n"; content += "--------------------------------------\n"; } console.log(content); const result = confirm("筛选完成,是否复制选中标的信息?"); if (result) { copyText(content); } else { console.log("用户点击了取消按钮。"); } } } function parseFinance(htmlContent){ let data = [] let content = $(htmlContent).find("#main").text(); let json = JSON.parse(content); let years = json.year[0]; let values = json.year[json.year.length-1]; for(let i=0;i<years.length;i++){ let obj = {} obj.title = years[i]; obj.value = values[i]; data.push(obj); } return data; } // 解析i问财分红融资页面,获取派息比率数据 function parseBonus(htmlContent){ let trs = $(htmlContent).find("#bonus_table").find("tr"); let data = [] for(let i = 0;i< trs.length;i++) { let tds = $(trs[i]).find("td"); let title = $(tds[0]).text(); let value = $(tds[9]).text(); if(value != "--") { let obj = {} obj.title = title; obj.value = value; data.push(obj); } } return data; } // 处理部分站点的样式 function handleSite() { if(window.location.href.startsWith("https://xueqiu.com")) { // 雪球 $('link[rel="shortcut icon"]').attr("href","https://www.efunds.com.cn/assets/images/favicon.ico") $(".nav__logo").css('background','url("https://cdn.efunds.com.cn/owch/upload/resources/image/2021/11/04/1040.png") no-repeat 50%'); $(".nav__logo").css('background-size','100% 100%'); $(".nav").css('background-color','#bebebe'); $(".nav__logo").attr("href","https://www.efunds.com.cn/") $(".nav__rt").hide() $(".zp-menu").hide(); } } $(function(){ $("head").append(menuStyle()) $("body").append(createMenuDom()) if(document.getElementsByTagName("iframe").length == 0){ $(".zp-menu-item[type='openIframe']").hide() } // 菜单绑定事件 $("#zp-menu .zp-menu-item").click(function(){ var opType = $(this).attr("type") var currentMenu = menus.find(item => item.code===opType) if(currentMenu) { eval(currentMenu.event + "()") } }) // 处理网站 handleSite(); }) })();