NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name 【百科】复制优化 // @namespace http://tampermonkey.net/ // @version 7.9 // @description 【百科】复制优化. // @author Youf // @match https://baike.baidu.com/item/* // @match https://baike.baidu.com/pic/* // @match https://baike.baidu.com/item/*?adplus // @match https://bkimg.cdn.bcebos.com/*autodownload* // @match https://baike.baidu.com/*?areyousuper // @match https://baike.baidu.com/item/*?fromtitle=* // @match https://baike.baidu.com/item/*?nothing // @icon https://www.google.com/s2/favicons?sz=64&domain=baidu.com // @grant none // @license MIT // @downloadURL https://openuserjs.org/install/SuCloud/【百科】复制优化.user.js // @updateURL https://openuserjs.org/meta/SuCloud/【百科】复制优化.meta.js // ==/UserScript== (function() { 'use strict'; //************************************************************************************* //----------------------------------------全局辅助函数 //************************************************************************************* // 右下按键样式 function addButton(innerHTML, bottom, right, where, onClick) { var mybutton = document.createElement("div"); // var tag = document.querySelector(where); where.appendChild(mybutton); mybutton.id = innerHTML; mybutton.innerHTML = innerHTML; // mybutton.style.position = 'absolute'; mybutton.style.position = "fixed"; mybutton.style.bottom = bottom; mybutton.style.right = right; mybutton.style.width = "50px"; mybutton.style.height = "45px"; mybutton.style.background = "black"; mybutton.style.opacity = "1"; mybutton.style.color = "white"; mybutton.style.textAlign = "center"; mybutton.style.lineHeight = "45px"; mybutton.style.fontSize = "30px";//按钮元素的字体大小 mybutton.style.cursor = "pointer"; mybutton.style.zIndex = "999999"; // 设置点击事件 mybutton.onclick = onClick; } // 函数运行次数、时间设置函数 function runFunction(func, interval, count) { let currentCount = 0; const intervalID = setInterval(() => { func(); currentCount++; if (currentCount === count) { clearInterval(intervalID); } }, interval); } // 展开角色列表等 function 函数_展开角色列表() { // 获取所有具有指定类名的元素 let elements = document.querySelectorAll('div[class*="showAll_"]'); // 遍历每个元素并为其添加点击事件监听器 elements.forEach(function(element) { element.click(); console.log('[展开角色列表]'); }); } //************************************************************************************* //----------------------------------------改杂函数 //************************************************************************************* function delZ() { let parent = document.querySelector('.J-lemma-content'); // 去除目录右侧编辑按钮 // 查找parent下所有类名中包含 "paraTitle" 和 "level-1" 字符串的div元素 const paraTitleDivs = parent.querySelectorAll('[class*="paraTitle"][class*="level-1"]'); // 遍历这些div,并删除其内的所有span元素 paraTitleDivs.forEach((div) => { Array.from(div.getElementsByTagName('span')).forEach((span) => { span.remove(); }); }); // 获取parent下所有class包含 "editLemma" 的div元素 const editLemmaDivs = parent.querySelectorAll('[class*="editLemma"]'); // 遍历并隐藏这些div元素 editLemmaDivs.forEach((div) => { div.style.display = 'none'; }); // 去除多余目录 // 分集剧情 let delTag_plot = parent.querySelector('div[data-tag="module"][data-module-type="plot"]'); if (delTag_plot) { delTag_plot.style.display = 'none'; } // 去除多余内容-海报 let delTag_A = document.querySelector('div[class*="posterBottom_"]'); if (delTag_A) { delTag_A.remove(); } let delTag_C = document.querySelector('div[class*="worksAndRelation_"]'); if (delTag_C) { delTag_C.remove(); } // 去除多余内容-右侧广告 let delTag_B = document.querySelector('div[class="swiper swiper-initialized swiper-horizontal swiper-pointer-events swiper-backface-hidden"]'); if (delTag_B) { //delTag_B.remove(); } // 信息栏文字去空格 let 信息栏 = document.querySelector('div[class*="basicInfo_"]'); if (信息栏) { let dtElements = 信息栏.querySelectorAll('dt'); dtElements.forEach(dt => { // 获取 dt 元素的文本内容 let text = dt.textContent; // 删除中文文字中间的空格 let processedText = text.replace(/(\S)\s+(\S)/g, '$1$2'); // 将处理后的文本内容设置回 dt 元素 dt.textContent = processedText; }); } } //************************************************************************************* //----------------------------------------跳转完整url //************************************************************************************* function goAllUrl() { // 获取当前网页的URL const currentUrl = window.location.href; // 查询hreflang为"x-default"的link标签 const defaultLink = document.querySelector('head > link[hreflang="x-default"]'); // 检查是否找到了对应的link标签 if (defaultLink) { const defaultHref = defaultLink.href; // 比较当前页面URL与查找到的href if (!currentUrl.includes('?adplus') && currentUrl !== defaultHref) { // 如果两者不一致,则跳转到href链接 window.location.href = defaultHref; } else { console.log("当前页面已经是默认语言页面。"); } } else { console.log("没有找到hreflang为'x-default'的链接。"); } } //************************************************************************************* //----------------------------------------隐参函数 //************************************************************************************* function delC(type) { // 获取所有class包含 'supWrap_xbcoi' 和 'J-supWrap' 的span元素 let spans = document.querySelectorAll('span[class*="supWrap"][class*="J-supWrap"]'); // 遍历并隐藏这些元素 for (let i = 0; i < spans.length; i++) { if (type === 'notsee') { spans[i].style.display = 'none'; } else if (type === 'cansee') { spans[i].style.display = ''; } } spans = ''; // 空格text_jaYku sup_xRHcs let supspans = document.querySelectorAll('span[class*="text_"][class*="sup_"]'); // 遍历并隐藏这些元素 for (let i = 0; i < supspans.length; i++) { if (type === 'notsee') { supspans[i].style.display = 'none'; } else if (type === 'cansee') { supspans[i].style.display = ''; } } supspans = ''; // 本人 personalTag_Allop J-psl-tag let sups = document.querySelectorAll('sup[class*="personalTag_"]'); // 遍历并隐藏这些元素 for (let i = 0; i < sups.length; i++) { if (type === 'notsee') { sups[i].style.display = 'none'; } else if (type === 'cansee') { sups[i].style.display = ''; } } sups = ''; } //************************************************************************************* //----------------------------------------隐函数;有序目录 //************************************************************************************* function change_list(type) {//隐藏有序目录的序号 //type:0隐藏,1展示 // 获取所有class包含 'supWrap_xbcoi' 和 'J-supWrap' 的span元素 let spans = document.querySelectorAll('span[class*="orderNum_"]'); // 遍历并隐藏这些元素 if (type == 0) {//0隐藏 for (let i = 0; i < spans.length; i++) { if (spans[i].style.display != 'none') { spans[i].style.display = 'none'; } } } else if (type == 1) {//1展示 for (let i = 0; i < spans.length; i++) { if (spans[i].style.display = 'none') { spans[i].style.display = ''; } } } else {//反转 for (let i = 0; i < spans.length; i++) { if (spans[i].style.display != 'none') { spans[i].style.display = 'none'; }else if (spans[i].style.display = 'none') { spans[i].style.display = ''; } } } spans = ''; } //************************************************************************************* //----------------------------------------改参函数 //************************************************************************************* //对url中的一些内容进行修改 function changeC_url(url) {//对url中的一些内容进行修改 let ture_url = url; // 修改时光网旧链接 if (ture_url?.includes('http://movie.mtime.com') && ture_url.endsWith('.html')) { ture_url = ture_url.replace(/\.html$/,''); } // 修改爱奇艺追踪链接 if (ture_url?.includes('&rfr=https://baike.baidu.com')) { ture_url = ture_url.replace(/\&rfr=https:\/\/baike.baidu.com$/,''); } //http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/62/01/21/620121106.html ture_url = ture_url?.replace(/www.stats.gov.cn\/tjsj\/tjbz/g,'www.stats.gov.cn/sj/tjbz'); url = ture_url; return url; } function changeReference_ready() {//修改参考资料的准备工作 //定义一个window.PAGE_DATA.userReferenceData window.Reference_DATA = { userReferenceData: [ { }, ] }; //定义的window.PAGE_DATA.userReferenceData使用window.PAGE_DATA.reference的数据 window.Reference_DATA.userReferenceData = window.PAGE_DATA.reference; function getUrl() { // 假设 dataReference 已经存在 let dataReference = window.PAGE_DATA.reference; // 使用异步函数来处理每一项的请求 async function updateRefUrl() { for (let i = 0; i < dataReference.length; i++) { let encodeUrl = dataReference[i].encodeUrl; let apiUrl = `https://baike.baidu.com/lemma/api/reference/check?encodeUrl=${encodeUrl}`; try { // 发起异步请求 let response = await fetch(apiUrl); if (response.ok) { let json = await response.json(); // 获取 refUrl 并动态添加到 dataReference 中 if (json && json.data.refUrl) { //dataReference[i].refUrl = json.data.refUrl; window.Reference_DATA.userReferenceData[i].baseUrl = json.data.refUrl; window.Reference_DATA.userReferenceData[i].trueUrl = changeC_url(json.data.refUrl); console.log(`json.data.refUrl`, json.data.refUrl); } } else { console.error(`Error fetching data for ${encodeUrl}`); } } catch (error) { console.error(`Error fetching data for ${encodeUrl}:`, error); } } } // 执行函数 updateRefUrl(); } /* "reference":[ {"type":3,"text":"中", "index":1,"uuid":"sVFqjecyY0sZ"}, {"type":1, "title":"朗","site":"中","refDate":"2022-01-27","index":2,"uuid":"sVFr1hxWqq7C","encodeUrl":"53"}, {"type":3,"text":"国", "index":3,"uuid":"sVFr5ySeXXJs"} ] */ getUrl(); console.log('window.Reference_DATA.userReferenceData:',window.Reference_DATA.userReferenceData); console.log('window.PAGE_DATA.reference:',window.PAGE_DATA.reference); } function changeReference(){ function changeReference_addData() {// 把数据放到网页标签中方便获取 // 1. 创建一个新的 div 元素 let newDiv = document.createElement("script"); // 2. 为新 div 设置属性、内容或者样式(可选) newDiv.id = "addData"; // 设置 id //newDiv.innerHTML = window.Reference_DATA.userReferenceData; // 设置div的内容 // let addDataText = JSON.stringify(window.Reference_DATA.userReferenceData, null, 2); // 将对象转为 JSON 字符串,并格式化 let addDataText = window.Reference_DATA.userReferenceData.map(item => { return `"type": ${item.type}, "title": "${item.title}", "site": "${item.site}", "refDate": "${item.refDate}", "index": ${item.index}, "uuid": "${item.uuid}", "encodeUrl": "${item.encodeUrl}", "baseUrl": "${item.baseUrl}", "trueUrl": "${item.trueUrl}"`; }).join("\n"); newDiv.innerHTML = addDataText; let addDataTag = document.querySelector("#addData"); if(addDataTag) { addDataTag.remove(); } // 3. 将新 div 添加到页面中的某个父元素 document.body.appendChild(newDiv); // 将 div 添加到 body 元素的末尾 } changeReference_addData(); function changeReference_addTable(ckzl_supTag_this) { //参考资料序号 let ckzl_ListNum = parseInt(ckzl_supTag_this.id, 10) - 1; //获取当前参考资料信息 /* "reference":[ {"type":3,"text":"中", "index":1,"uuid":"sVFqjecyY0sZ"}, {"type":1, "title":"朗","site":"中","refDate":"2022-01-27","index":2,"uuid":"sVFr1hxWqq7C","encodeUrl":"53"},baseUrl trueUrl {"type":3,"text":"国", "index":3,"uuid":"sVFr5ySeXXJs"} ] */ if (window.Reference_DATA.userReferenceData[ckzl_ListNum].type === 1 &&//是网络参考资料 typeof window.Reference_DATA.userReferenceData[ckzl_ListNum].trueUrl !== 'undefined' &&//参考资料网址不为空 !window.Reference_DATA.userReferenceData[ckzl_ListNum].trueUrl.includes('baidu')//参考资料网址不含百度 ) { let ckzl_thisTag_title = window.Reference_DATA.userReferenceData[ckzl_ListNum].title;//文章标题 let ckzl_thisTag_trueUrl = window.Reference_DATA.userReferenceData[ckzl_ListNum].trueUrl;//来源网址 let ckzl_thisTag_site = window.Reference_DATA.userReferenceData[ckzl_ListNum].site;//网站名称 // 打印参考资料信息 console.log('ckzl_thisTag_trueUrl:',ckzl_thisTag_trueUrl) console.log('ckzl_thisTag_title:',ckzl_thisTag_title) console.log('ckzl_thisTag_site:',ckzl_thisTag_site) //当前参考资料信息 let text = [, ckzl_thisTag_trueUrl, ckzl_thisTag_title, ckzl_thisTag_site] // 如果已有div则删除 if (ckzl_supTag_this.parentNode.querySelector(`div[id="\[${ckzl_ListNum + 1}\]"]`)) { ckzl_supTag_this.parentNode.querySelector(`div[id="\[${ckzl_ListNum + 1}\]"]`).remove(); } // 创建容器div var newContainerDiv = document.createElement('div'); newContainerDiv.style.display = 'flex'; // 使用Flex布局使子元素在同一行显示 newContainerDiv.id = `\[${ckzl_ListNum + 1}\]`; for (let m = 0; m < 4; m++) { let childDiv = document.createElement('div'); childDiv.style.border = '1px solid #000'; // 设置样式 childDiv.style.padding = '8px'; childDiv.style.width = '150px'; // 新增这一行来设定宽度 childDiv.style.zIndex = "999999"; childDiv.textContent = text[m]; // 文本内容 childDiv.sandbox = "allow-scripts allow-top-navigation-by-user-activation"; newContainerDiv.appendChild(childDiv); // 定义一个变量来存储最后一个被点击的按钮 let lastClickedButton = null; if (m === 0) { // 创建按钮元素 const 按钮 = document.createElement('button'); 按钮.textContent = '点击打开'; 按钮.style.width = '100px'; // 设置宽度为100像素 按钮.style.height = '40px'; // 设置高度为50像素 // 给按钮添加点击事件处理程序 按钮.addEventListener('click', function(event) { event.preventDefault(); // 阻止默认行为 const newWindow = window.open(ckzl_thisTag_trueUrl, '_blank', 'width=500,height=500'); // 关闭新窗口 setTimeout(function() { newWindow.close(); }, 3500); // 更新按钮颜色 if (lastClickedButton !== this) { // 记录当前点击的按钮 lastClickedButton = this; // 将当前点击的按钮背景设为红色 lastClickedButton.style.backgroundColor = 'red'; } // 阻止滚动到按钮位置 event.stopPropagation(); // 阻止事件冒泡可能导致的滚动 }); // 将按钮添加到页面中的某个元素中 childDiv.appendChild(按钮); } else if (m >= 1 && m <= 3) { // 创建按钮元素 const 按钮 = document.createElement('button'); 按钮.textContent = '复制文本'; 按钮.style.width = '100px'; // 设置宽度为100像素 // 给按钮添加点击事件处理程序 按钮.addEventListener('click', function(event) { event.preventDefault(); // 阻止默认行为 // 创建一个新的 textarea 元素,用于复制文本 const textarea = document.createElement('textarea'); textarea.value = text[m]; // 设置文本内容 // 将 textarea 添加到页面中,但是在视觉上隐藏它 textarea.style.position = 'absolute'; textarea.style.left = '-9999px'; document.body.appendChild(textarea); // 选择并复制文本 textarea.select(); document.execCommand('copy'); // 删除 textarea 元素 document.body.removeChild(textarea); // 提示复制成功 console.log('文本已复制: ' + text[m]); // 更新按钮颜色 if (lastClickedButton !== this) { // 记录当前点击的按钮 lastClickedButton = this; // 将当前点击的按钮背景设为红色 lastClickedButton.style.backgroundColor = 'red'; } // 阻止滚动到按钮位置 event.stopPropagation(); // 阻止事件冒泡可能导致的滚动 }); // 创建一个新的 div 元素用于放置按钮 const buttonDiv = document.createElement('div'); buttonDiv.style.zIndex = "999999"; buttonDiv.appendChild(按钮); // 将按钮添加到页面中的某个元素中 childDiv.appendChild(buttonDiv); } } // 将新创建的div插入到目标元素的父元素之后 ckzl_supTag_this.parentNode.insertBefore(newContainerDiv, ckzl_supTag_this.nextSibling); } } // 获取所有sup em元素 let ckzl_supTag = document.querySelectorAll('span[class*="supWrap"][class*="J-supWrap"] > sup > em'); for (let i = 0; i < ckzl_supTag.length; i++) { ckzl_supTag[i].id = ckzl_supTag[i].id.replace('sup-', '');//参考资料引用的id let ckzl_ListNum = parseInt(ckzl_supTag[i].id, 10) - 1; //如果是网络参考资料才添加按钮 if (window.Reference_DATA.userReferenceData[ckzl_ListNum].type === 1) { changeReference_addTable(ckzl_supTag[i]); } }; } //************************************************************************************* //----------------------------------------显示图片、参考资料数量 //************************************************************************************* function numCanSee() { // 显示图片数量 let main = document.querySelector("div.J-lemma-content"); // console.log('main',main); // 图册中的图片数量 function numCanSee_imgsTag() { let images_card_list = main.querySelectorAll('div[data-module-type="album"]'); // console.log('images_card_list',images_card_list); let images_num_imgsTag = 0; if (images_card_list) { images_card_list.forEach((image_card) => { let image_num_this = 0; let image_num_this_many = image_card.querySelector('span[class*="total_"]'); let image_num_this_many_hen = image_card.querySelector('div[class*="albumSwiper_"]'); if (image_num_this_many) { image_num_this = image_num_this_many.textContent.trim().replace(/^\(/,'').replace(/张\)$/,''); // 将字符串转换为数字 image_num_this = parseInt(image_num_this, 10); // console.log('image_num_this',image_num_this); } else if (image_num_this_many_hen) { let image_num_this_many_hen_num = image_num_this_many_hen.querySelectorAll('img'); image_num_this = image_num_this_many_hen_num.length; } images_num_imgsTag = images_num_imgsTag + image_num_this; // console.log('image_num_this',image_num_this); // console.log('images_num_imgTag',images_num_imgsTag); }); } // 返回计算所得的总数 return images_num_imgsTag; } // 图片中的图片数量 function numCanSee_imgTag() { let image_card_list = main.querySelectorAll('div[class*="lemmaPicture_"]'); // console.log('image_card_list',image_card_list); let image_num_imgTag = 0; if (image_card_list) { image_card_list.forEach((image_card) => { let image_num_this = 0; image_num_this = 1; image_num_imgTag = image_num_imgTag + image_num_this; // console.log('image_num_this',image_num_this); // console.log('image_num_imgTag',image_num_imgTag); }); } // 返回计算所得的总数 return image_num_imgTag; } // 表格中的图片数量 function numCanSee_tableTag() { let table_card_list = main.querySelectorAll('div[class="table-baike-wrap"]'); let table_num_imgTag = 0; if (table_card_list) { table_card_list.forEach((table_card) => { let image_num_this = 0; let image_num_this_many = table_card.querySelectorAll("div.table-image-wrap > div.poster-wrap > div.poster-image"); if (image_num_this_many) { image_num_this += image_num_this_many.length; } else{ image_num_this += 0; } table_num_imgTag = table_num_imgTag + image_num_this; // console.log('image_num_this',image_num_this); // console.log('table_num_imgTag',table_num_imgTag); }); } // 返回计算所得的总数 return table_num_imgTag; } // 模板中的图片数量 function numCanSee_modeTag() { let mode_card_list = main.querySelectorAll('div[class="imagetextlist-card-inner"]'); // console.log('mode_card_list',mode_card_list); let mode_num_imgTag = 0; if (mode_card_list) { mode_card_list.forEach((mode_card) => { let mode_num_this = 0; let mode_type_tag = mode_card.querySelector('div[class*="card-content-type"]'); let mode_type = mode_type_tag.classList.value; switch (mode_type) { case 'card-content-type1': mode_num_this = mode_type_tag.querySelectorAll('div[class="cardinfo-image"]').length; break; case 'card-content-type2': mode_num_this = mode_type_tag.querySelectorAll('div[class="cardinfo-image"]').length; break; case 'card-content-type3': mode_num_this = mode_type_tag.querySelectorAll('div[class="cardinfo-image"]').length; break; default: mode_num_this += 0; } mode_num_imgTag = mode_num_imgTag + mode_num_this; // console.log('image_num_this',image_num_this); // console.log('mode_num_imgTag',mode_num_imgTag); }); } // 返回计算所得的总数 return mode_num_imgTag; } // 参考资料数量 function numCanSee_referencesTag() { // 显示参考资料数量 let references = document.querySelector("div#J-lemma-reference"); let references_list = '0'; let references_num = 0; if(references){ references_list = references.querySelectorAll('li[class*="referenceItem_"]'); references_num = references_list.length; } // 返回计算所得的总数 return references_num; } // 信息栏数量 function numCanSee_basicTag() { let basics = document.querySelector("div.J-basic-info"); let basics_box_list = basics.querySelectorAll("dt[class*='basicInfoItem_']"); //模板中的有内容数量 let basics_basic_list = []; basics_box_list.forEach(function(basics_box_list_num){ let text = basics_box_list_num.textContent.trim(); basics_basic_list.push(text); }); basics_basic_list = [...new Set(basics_basic_list)];//内容去重 // 返回计算所得的总数 return basics_basic_list.length; } //信息栏数量 let basic_num_all = numCanSee_basicTag(); let image_num_imgs = numCanSee_imgsTag(); let image_num_img = numCanSee_imgTag(); let image_num_table = numCanSee_tableTag(); let image_num_mode = numCanSee_modeTag(); let image_num_all = numCanSee_imgsTag() + numCanSee_imgTag() + numCanSee_tableTag() + numCanSee_modeTag(); // console.log('image_num_imgs',image_num_imgs); // console.log('image_num_img',image_num_img); // console.log('image_num_table',image_num_table); // console.log('image_num_mode',image_num_mode); let references_num_all = numCanSee_referencesTag(); //显示 let num_tag = document.querySelector('div#image_num_all'); if (num_tag) { num_tag.remove(); }; var mybutton = document.createElement("div"); // var tag = document.querySelector(where); document.querySelector("body").appendChild(mybutton); mybutton.id = 'image_num_all'; mybutton.innerHTML = 'b_all:' + basic_num_all + '<br/>'+ 'i_all:' + image_num_all + '<br/>'+ 'i_mod:' + image_num_mode + '<br/>'+ 'r_all:' + references_num_all ; // mybutton.style.position = 'absolute'; mybutton.style.position = "fixed"; mybutton.style.top = "80px"; mybutton.style.right = "60px"; mybutton.style.width = "65px"; mybutton.style.height = "75px"; mybutton.style.background = "white"; mybutton.style.opacity = "1"; mybutton.style.color = "black"; mybutton.style.textAlign = "center"; mybutton.style.lineHeight = "18px"; mybutton.style.fontSize = "15px";//按钮元素的字体大小 mybutton.style.cursor = "pointer"; mybutton.style.zIndex = "999999"; } //************************************************************************************* //----------------------------------------改图函数 //************************************************************************************* function changeP() { let rules = []; rules = [ //?x-bce-process= ['img','src',/\?x-bce-process=[\s\S]*/, "?x-bce-process=image/format,f_auto/resize,m_lfit,limit_1,w_1080"],//去一切 ]; // 获取img function getTags(tagType, styleType, beforeText, afterText) { let tags = document.querySelectorAll(tagType); tags.forEach(function(tag){ let tagText = tag.getAttribute(styleType); // console.log('imgText的旧内容为:' + tagText); if (tagText) { tagText = tagText.replace(beforeText, afterText); tag.setAttribute(styleType, tagText); // console.log('imgText的新内容为:' + tagText); } }); } function goGetTags() { for (let i = 0; i < rules.length; i++) { let rule = rules[i]; getTags(rule[0], rule[1], rule[2], rule[3]); } } goGetTags(); } // 修改不显示概述图的词 function changeTitleImg() { // 正常概述图img let changeTitleImg_img = document.querySelector('head > meta[name="image"]').content; // 正常概述图图册链接 let changeTitleImg_urlA = document.querySelector('head > link[hreflang="x-default"]').href.replace('https://baike.baidu.com/item/','https://baike.baidu.com/pic/'); let changeTitleImg_urlB = document.querySelector('head > meta[name="image"]').content.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process=.*/,''); let changeTitleImg_url = changeTitleImg_urlA + '/1/' + changeTitleImg_urlB; if (!changeTitleImg_url.includes('https://bkssl.bdimg.com/cms/static/baike.png')) { // 创建包含图片链接的 img 元素 let imgElement = document.createElement('img'); imgElement.setAttribute('width', '100%'); imgElement.setAttribute('style', 'display: block;'); imgElement.setAttribute('src', changeTitleImg_img); // 创建包含 img 元素的 a 元素 let aElement = document.createElement('a'); aElement.setAttribute('href', changeTitleImg_url); aElement.setAttribute('target', '_blank'); // 在新标签页打开链接 aElement.appendChild(imgElement); // 创建包含 a 元素的 div 元素 let divElement = document.createElement('div'); divElement.classList.add('abstractAlbum_add'); divElement.appendChild(aElement); // 将 div 元素插入到 div#side 的最前面 let sideDiv = document.querySelector('div#side'); sideDiv.insertBefore(divElement, sideDiv.firstChild); } } //************************************************************************************* //----------------------------------------改表函数 //************************************************************************************* function changeTable() { //改表函数:引用函数 function findFollowingDDByText(textTag, searchText) { let dtElements = textTag.getElementsByTagName('dt'); for(let i = 0; i < dtElements.length; i++) { if(dtElements[i].textContent.trim() === searchText) { let nextSibling = dtElements[i].nextElementSibling; while (nextSibling && nextSibling.nodeType === Node.TEXT_NODE) { // 跳过空白文本节点,直到找到下一个元素节点 nextSibling = nextSibling.nextSibling; } if (nextSibling && nextSibling.tagName.toLowerCase() === 'dd') { return nextSibling.textContent; } break; // 找到匹配的dt后停止循环 } } return null; // 如果未找到匹配项,则返回null } //************************************************************************************* //----------------------------------------改表函数:角色介绍/已优化 //************************************************************************************* function changeTablef_role() { let tagName = 'role'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_actor_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '角色名称', data: [] }, { header: '演员名称', data: [] }, { header: '角色配音', data: [] }, { header: '角色简介', data: [] } ]; // 遍历teleplay内的符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('div[class*="roleItem_"]'); for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 角色名称 const roleTd = document.createElement('td'); let roleText = listTags[i].querySelector('div[class*="roleName_"] > span > span').textContent?.replace(/[[0-9-]+]/g,'').trim(); roleTd.textContent = roleText === '' ? '-' : roleText === undefined ? '-' : roleText; roleTd.textContent = roleText; columns[0].data.push(roleText); // 演员名称 const nameTd = document.createElement('td'); let nameText = listTags[i].querySelector('div[class*="roleActor_"] > span[class*="itemValue_"] > span').textContent?.replace(/[[0-9-]+]/g,'').trim(); nameText = nameText === '' ? '-' : nameText === undefined ? '-' : nameText; nameTd.textContent = nameText; columns[1].data.push(nameText); // 角色配音 const soundTd = document.createElement('td'); let soundText = listTags[i].querySelector('div[class*="roleVoice_"] > span[class*="itemValue_"] > span')?.textContent?.replace('配音','').replace(/[[0-9-]+]/g,'').trim(); soundText = soundText === '' ? '-' : soundText === undefined ? '-' : soundText; soundTd.textContent = soundText; columns[2].data.push(soundText); // 角色简介 const tipsTd = document.createElement('td'); let tipsText = listTags[i].querySelector('div[class*="roleDesc_"] > div[data-tag="paragraph"] > span[class*="text_"]')?.textContent?.replace(/[[0-9-]+]/g,'').trim(); tipsText = tipsText === '' ? '-' : tipsText === undefined ? '-' : tipsText; tipsTd.textContent = tipsText; columns[3].data.push(tipsText); row.appendChild(roleTd); row.appendChild(nameTd); row.appendChild(soundTd); row.appendChild(tipsTd); tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_actor_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_actor_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:影视/已优化 //************************************************************************************* function changeTablef(tagName) { const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 删除其中的所有参考资料,方便直接获取内容及其备注 let supList = teleplay.querySelectorAll('sup'); if (supList) { supList.forEach((sup) => { sup.remove(); }); } // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '作品名称', data: [] }, { header: '首播时间', data: [] }, { header: '饰演', data: [] }, //{ header: '导演', data: [] }, //{ header: '主演', data: [] } ]; // 遍历teleplay内的符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('div[class*="movieItem_"]'); for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 名称//*[@id="J-lemma-main-wrapper"]/div[2]/div/div[1]/div/div[6]/div[33]/div/div[1]/div/div[1]/div[2]/div[2]/div/div/b[1]/text() const nameTd = document.createElement('td'); let nameText_title = listTags[i].querySelector('b[class*="title_"] > span[data-text="true"]')?.textContent.replace(/[[0-9-]+]/g,'').trim(); let nameText_all = listTags[i].querySelector('b[class*="title_"]')?.textContent.replace(/[[0-9-]+]/g,'').trim(); let nameText = nameText_all; nameText = nameText === '' ? '-': nameText === undefined ? '-' : nameText; nameTd.textContent = nameText.trim(); columns[0].data.push(nameText); // 上映时间 const timeTd = document.createElement('td'); let timeText = listTags[i].querySelector('b[class*="title_"]').nextElementSibling.querySelector('span[data-text="true"]')?.textContent.replace(/[[0-9-]+]/g,'').trim(); timeText = timeText === '' ? '-': timeText === undefined ? '-' : timeText; timeTd.textContent = timeText; columns[1].data.push(timeText); let textTag = listTags[i].querySelector('dl[class*="descWrapper_"]'); // 饰演角色 const roleTd = document.createElement('td'); let roleText = findFollowingDDByText(textTag, "饰演").replace(/[[0-9-]+]/g,'').trim(); roleText = roleText === '' ? '-': roleText === undefined ? '-' : roleText; roleTd.textContent = roleText; columns[2].data.push(roleText); /* // 导演 const dyTd = document.createElement('td'); let dyText = findFollowingDDByText(textTag, "导演").replace(/[[0-9-]+]/g,'').trim(); dyText = dyText === '' ? '-': dyText === undefined ? '-' : dyText; dyTd.textContent = dyText; columns[3].data.push(dyText); // 主演 const zyTd = document.createElement('td'); let zyText = findFollowingDDByText(textTag, "主演").replace(/[[0-9-]+]/g,'').trim(); zyTd.textContent = zyText === '' ? '-' : zyText === undefined ? '-': zyText; zyTd.textContent = zyText; columns[4].data.push(zyText); */ row.appendChild(nameTd); row.appendChild(timeTd); row.appendChild(roleTd); // row.appendChild(dyTd); // row.appendChild(zyTd); tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:演员表/已优化 //************************************************************************************* function changeTablef_actor() { let tagName = 'actor'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_actor_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '演员', data: [] }, { header: '饰演', data: [] }, { header: '配音', data: [] }, { header: '备注', data: [] } ]; // 遍历teleplay内的符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('div[class*="actorItem_"]'); for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 演员 const nameTd = document.createElement('td'); let nameText = listTags[i].querySelector('dl[class*="info_"] > dt').textContent?.replace(/[[0-9-]+]/g,'').split(' 饰 ')[0].trim(); nameText = nameText === '' ? '-' : nameText === undefined ? '-' : nameText; nameTd.textContent = nameText; columns[0].data.push(nameText); // 饰演角色 const roleTd = document.createElement('td'); let roleText = listTags[i].querySelector('dl[class*="info_"] > dt').textContent?.replace(/[[0-9-]+]/g,'').split(' 饰 ')[1].trim(); roleTd.textContent = roleText === '' ? '-' : roleText === undefined ? '-' : roleText; roleTd.textContent = roleText; columns[1].data.push(roleText); // 配音 const soundTd = document.createElement('td'); let soundText = listTags[i].querySelectorAll('dl[class*="info_"] > dd')[0]?.textContent?.replace('配音','').replace(/[[0-9-]+]/g,'').trim(); soundText = soundText === '' ? '-' : soundText === undefined ? '-' : soundText; soundTd.textContent = soundText; columns[2].data.push(soundText); // 备注 const tipsTd = document.createElement('td'); let tipsText = listTags[i].querySelectorAll('dl[class*="info_"] > dd')[1]?.textContent?.replace('备注','')?.replace(/[[0-9-]+]/g,'').trim(); tipsText = tipsText === '' ? '-' : tipsText === undefined ? '-' : tipsText; tipsTd.textContent = tipsText; columns[3].data.push(tipsText); row.appendChild(nameTd); row.appendChild(roleTd); row.appendChild(soundTd); row.appendChild(tipsTd); tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_actor_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_actor_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:音乐专辑/已优化 //************************************************************************************* function changeTablef_musicAlbum() { let tagName = 'musicAlbum'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_musicAlbum_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '专辑名称', data: [] }, { header: '发行时间', data: [] }, // { header: '专辑语言', data: [] }, // { header: '专辑类型', data: [] }, // { header: '唱片公司', data: [] }, // { header: '专辑简介', data: [] }, // { header: '专辑曲目', data: [] } ]; // 遍历符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('div[class*="albumItem_"]'); for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 专辑名称 const nameTd = document.createElement('td'); let nameText = listTags[i].querySelector('div[class*="albumName_"] > span[data-text="true"]')?.textContent.replace(/[[0-9-]+]/g,'').trim(); nameText = nameText === '' ? '-': nameText === undefined ? '-' : nameText; nameTd.textContent = nameText; columns[0].data.push(nameText); // 上映时间 const timeTd = document.createElement('td'); let timeText = listTags[i].querySelector('div[class*="albumDate_"] > span[data-text="true"]')?.textContent.replace(/[[0-9-]+]/g,'').trim(); timeText = timeText === '' ? '-': timeText === undefined ? '-' : timeText; timeTd.textContent = timeText; columns[1].data.push(timeText); row.appendChild(nameTd); row.appendChild(timeTd); tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_musicAlbum_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_musicAlbum_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:杂志写真/已优化 //************************************************************************************* function changeTablef_magazine() { let tagName = 'magazine'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_magazine_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '杂志名称', data: [] }, { header: '杂志期数', data: [] }, { header: '图片位置', data: [] }, { header: '备注', data: [] } ]; // 遍历teleplay内的符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('div[class*="magazineItem_"]');//class="magazineItem_aYGRC" for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 杂志名称 const nameTd = document.createElement('td'); let nameText = listTags[i].querySelector('div[class*="name_"]')?.textContent?.replace(/[[0-9-]+]/g,'')?.trim(); nameText = nameText === '' ? '-': nameText === undefined ? '-' : nameText; nameTd.textContent = nameText; columns[0].data.push(nameText); // 杂志期数 const timeTd = document.createElement('td'); let timeText = listTags[i].querySelector('div[class*="time_"] > span')?.textContent?.replace(/[[0-9-]+]/g,'')?.trim(); timeText = timeText === '' ? '-': timeText === undefined ? '-' : timeText; timeTd.textContent = timeText; columns[1].data.push(timeText); // 图片位置 const locationTd = document.createElement('td'); let locationText = listTags[i].querySelector('div[class*="location_"] > span')?.textContent?.replace(/[[0-9-]+]/g,'')?.trim(); locationText = locationText === '' ? '-': locationText === undefined ? '-' : locationText; locationTd.textContent = locationText; columns[2].data.push(locationText); // 备注 const tipsTd = document.createElement('td'); let tipsText = listTags[i].querySelector('div[class*="tips_"] > span')?.textContent?.replace(/[[0-9-]+]/g,'')?.trim(); tipsText = tipsText === '' ? '-' : tipsText === undefined ? '-' : tipsText; tipsTd.textContent = tipsText; columns[3].data.push(tipsText); row.appendChild(nameTd);// 杂志名称 row.appendChild(timeTd);// 杂志期数 row.appendChild(locationTd);// 图片位置 row.appendChild(tipsTd);// 备注 tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_magazine_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_magazine_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:出版图书/已优化 //************************************************************************************* function changeTablef_publication() { let tagName = 'publication'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); console.log(tagDivs); tagDivs.forEach((teleplay) => { // 删除其中的所有参考资料,方便直接获取内容及其备注 let supList = teleplay.querySelectorAll('sup'); if (supList) { supList.forEach((sup) => { sup.remove(); }); } // 创建一个新的表格 const table = document.createElement('table'); table.id = `changeTablef_${tagName}`; const thead = document.createElement('thead'); const tbody = document.createElement('tbody'); // 初始化列数据数组 const columns = [ { header: '作品名称', data: [] }, { header: '作者名称', data: [] }, { header: '作品时间', data: [] }, { header: '作品简介', data: [] } ]; // 遍历teleplay内的符合条件的子元素并填充表格数据 let listTags = teleplay.querySelectorAll('li[class*="publicationItem_"]'); console.log(listTags); for (let i = 0; i < listTags.length; i++) { const row = document.createElement('tr'); // 作品名称 const nameTd = document.createElement('td'); let nameText_title = listTags[i].querySelector('div[class*="publicationName_"] > span > span')?.textContent.replace(/[[0-9-]+]/g,'').trim(); let nameText_all = listTags[i].querySelector('div[class*="publicationName_"] > span > span')?.textContent.replace(/[[0-9-]+]/g,'').trim(); let nameText = nameText_all; nameText = nameText === '' ? '-': nameText === undefined ? '-' : nameText; nameTd.textContent = nameText.trim(); columns[0].data.push(nameText); console.log(nameText_all); // 作者名称 const timeTd = document.createElement('td'); let timeText = listTags[i].querySelector('div[class*="publicationAuthor_"] > span[class*="itemValue_"] > span')?.textContent.replace(/[[0-9-]+]/g,'').trim(); timeText = timeText === '' ? '-': timeText === undefined ? '-' : timeText; timeTd.textContent = timeText; columns[1].data.push(timeText); // 作品时间 const roleTd = document.createElement('td'); let roleText = listTags[i].querySelector('div[class*="publicationTime_"] > span[class*="itemValue_"] > span')?.textContent?.replace(/[[0-9-]+]/g,'').trim(); roleText = roleText === '' ? '-': roleText === undefined ? '-' : roleText; roleTd.textContent = roleText; columns[2].data.push(roleText); // 作品简介 const dyTd = document.createElement('td'); let dyText = listTags[i].querySelector('dd[class*="publicationDesc_"] > div[data-tag="paragraph"] > span[data-text="true"]')?.textContent?.replace(/[[0-9-]+]/g,'').trim(); dyText = dyText === '' ? '-': dyText === undefined ? '-' : dyText; dyTd.textContent = dyText; columns[3].data.push(dyText); row.appendChild(nameTd); row.appendChild(timeTd); row.appendChild(roleTd); row.appendChild(dyTd); tbody.appendChild(row); } // 创建一个数组来跟踪需要删除的列的索引 let deletedColumns = []; // 遍历列数据数组,添加需要删除的列索引到 deletedColumns 数组中 columns.forEach((column, index) => { if (column.data.every(text => text === '-')) { deletedColumns.push(index); } }); // 创建表头 const headerRow = document.createElement('tr'); columns.forEach((column, index) => { if (!deletedColumns.includes(index)) { const th = document.createElement('th'); th.textContent = column.header; headerRow.appendChild(th); } }); thead.appendChild(headerRow); // 遍历表格行并删除列 Array.from(tbody.rows).forEach(row => { // 按相反的顺序删除列 for (let i = deletedColumns.length - 1; i >= 0; i--) { row.deleteCell(deletedColumns[i]); } }); table.appendChild(thead); table.appendChild(tbody); // 如果已有则删除 if (teleplay.parentNode.querySelector(`table#changeTablef_${tagName}`)) { teleplay.parentNode.querySelector(`table#changeTablef_${tagName}`).remove(); } // 在teleplay div的末尾插入表格 teleplay.appendChild(table); }); } //************************************************************************************* //----------------------------------------改表函数:演唱会记录 //************************************************************************************* function changeTablef_concert() { let tagName = 'concert'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach((teleplay) => { // 表头 let trsT = teleplay.querySelectorAll('table thead tr th[width="45"]'); if (trsT) { trsT.forEach((trT) => { trT.remove(); }); } // 表格 let trs = teleplay.querySelectorAll('table tbody tr td a[class*="Toggle_"]'); trs.forEach((tr) => { tr.parentNode.remove(); }); // 底色 let divs = teleplay.querySelectorAll('div[class*="concertRecord_"]'); divs.forEach((div) => { div.className = ''; }); }); } //************************************************************************************* //----------------------------------------改表函数:获奖记录 //************************************************************************************* function changeTablef_award() { let tagName = 'award'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); // 去除旧标题,添加新标题 tagDivs.forEach(tagDiv => { let rowsTable = tagDiv.querySelectorAll('div[class*="awardRecord_"] > table > tbody > tr > td > table'); rowsTable.forEach(row => { // 旧表格标题 let titleTag = row.parentNode.parentNode.previousElementSibling; let title = titleTag.textContent.trim(); // 创建新的 <caption> 元素 let caption = document.createElement('caption'); caption.textContent = title; // 在row的开头插入表格标题 let captionList = row.querySelectorAll('caption'); if (captionList.length > 0) { captionList.forEach(no => { no.remove(); }); } row.prepend(caption); // 删除旧表格标题 titleTag.remove(); }); }); /* title = caption.textContent.trim(); title = table.parentNode.parentNode.previousElementSibling.textContent.trim(); */ // 去除外框表格 tagDivs.forEach(tagDiv => { let rowsBig = tagDiv.querySelectorAll('div[class*="awardRecord_"] > table[width="100%"]'); rowsBig.forEach(table => { // 创建新的 <div> 元素 let div = document.createElement('div'); // 复制 <table> 的所有内容 while (table.firstChild) { div.appendChild(table.firstChild); } // 用 <div> 替换 <table> table.parentNode.replaceChild(div, table); }); }); // 去除表格底色、表头宽度 tagDivs.forEach(tagDiv => { let rows = tagDiv.querySelectorAll('tr > td[class*="innerTable_"]'); rows.forEach(row => { // row.style.width = ""; row.className = ''; }); }); } //************************************************************************************* //----------------------------------------改表函数:职员表 //************************************************************************************* function changeTablef_staff() { let tagName = 'staff'; const tagDivs = document.querySelectorAll(`div[data-module-type="${tagName}"]`); tagDivs.forEach(tagDiv => { // 去除表格底色 let rows = tagDiv.querySelectorAll('table[class*="staffList_"]'); rows.forEach(row => { row.className = ''; }); }); } changeTablef_role() // 电影 changeTablef('movie'); // 电视剧 changeTablef('teleplay'); // 演员表 changeTablef_actor(); // 音乐专辑 changeTablef_musicAlbum(); // 杂志写真 changeTablef_magazine(); // 出版图书 changeTablef_publication(); // 演唱会记录 changeTablef_concert(); // 获奖记录 changeTablef_award(); // 职员表 changeTablef_staff(); } // 修改特殊表格 function changeTable_haveimg() { // 获取页面中所有的表格 let tables = document.getElementsByTagName('table'); // 遍历每个表格 for (let i = 0; i < tables.length; i++) { let table = tables[i]; let headers = table.querySelectorAll('tr th'); // 检查表头是否符合要求:名称 图片 名称 图片 if (headers.length === 4 && headers[0].innerText.trim() === '名称' && headers[1].innerText.trim() === '图片' && headers[2].innerText.trim() === '名称' && headers[3].innerText.trim() === '图片') { // 将每一行复制 let rows = table.querySelectorAll('tr'); // 获取表格中所有行 for (let j = 1; j < rows.length; j++) { let row = rows[j]; let cells = row.querySelectorAll('td'); // 获取当前行的所有单元格 // 复制当前行 let clonedRow = row.cloneNode(true); // 插入复制的行到当前行的后面 row.parentNode.insertBefore(clonedRow, row.nextSibling); } // 修改表头,变为两列 headers[2].remove(); headers[3].remove(); let rows_new = table.querySelectorAll('tr'); // 获取表格中所有行 for (let row_no = 1; row_no < rows_new.length; row_no++) { let row_new = rows_new[row_no]; let cells_new = row_new.querySelectorAll('td'); // 获取当前行的所有单元格 if (row_no % 2 === 0) { // row_no 是偶数 cells_new[0].remove(); cells_new[1].remove(); } else { // row_no 是奇数 cells_new[2].remove(); cells_new[3].remove(); } } } // 检查 if (headers.length === 3 && headers[0].innerText.trim() !== '名称' && headers[0].innerText.trim() !== '图片' && headers[1].innerText.trim() !== '名称' && headers[1].innerText.trim() !== '图片' && headers[2].innerText.trim() !== '名称' && headers[2].innerText.trim() !== '图片') { // 将每一行复制 let rows = table.querySelectorAll('tr'); // 获取表格中所有行 for (let j = 1; j < rows.length; j++) { let row = rows[j]; let cells = row.querySelectorAll('td'); // 获取当前行的所有单元格 // 复制当前行 let clonedRow = row.cloneNode(true); // 插入复制的行到当前行的后面 row.parentNode.insertBefore(clonedRow, row.nextSibling); // 再次复制当前行 let clonedRow2 = row.cloneNode(true); // 插入第二个复制的行到当前行的后面 row.parentNode.insertBefore(clonedRow2, row.nextSibling); } let rows_new = table.querySelectorAll('tr'); // 获取表格中所有行 for (let row_no = 1; row_no < rows_new.length; row_no++) { let row_new = rows_new[row_no]; let cells_new = row_new.querySelectorAll('td'); // 获取当前行的所有列 if (row_no) { for (let m = 0; m < cells_new.length; m++) { cells_new[m].innerHTML=cells_new[row_no-1].innerHTML;//修改图片 } for (let m = 0; m < cells_new.length; m++) { cells_new[0].innerHTML=headers[row_no-1].innerHTML;//修改图片 cells_new[2].remove(); } } } // 修改表头,变为两列 headers[0].textContent = '名称'; headers[1].textContent = '图片'; headers[2].remove(); } } } //************************************************************************************* //----------------------------------------表格复制按钮 //************************************************************************************* function CopyTable(table) { // 确保table在DOM中存在 if (table.parentNode) { let range = document.createRange(); range.selectNode(table); window.getSelection().removeAllRanges(); window.getSelection().addRange(range); try { document.execCommand('copy'); // 将选中内容复制到剪贴板 console.log('表格已复制到剪贴板!'); } catch (err) { console.error('无法复制表格:', err); } window.getSelection().removeAllRanges(); } else { console.error('表格没有找到合适的父节点'); } } function CopyTable_T(table) { // 确保table在DOM中存在 if (table.parentNode.parentNode) { let title; let caption = table.querySelector('caption'); if (caption) { title = caption.textContent.trim(); } else { title = table.parentNode.parentNode.previousElementSibling.textContent.trim(); } navigator.clipboard.writeText(title) .then(() => console.log('标题已复制到剪贴板:' + title)) .catch(err => console.warning('标题复制失败:', err)); /* try { document.execCommand('copy'); // 将选中内容复制到剪贴板 console.log('标题已复制到剪贴板!'); } catch (err) { console.error('无法复制标题:', err); }*/ window.getSelection().removeAllRanges(); } else { console.error('表格没有找到合适的父节点'); } } function addCopyButtonToTable() { let tables = document.querySelectorAll('table'); tables.forEach(function(table) { let tableFromType = table.parentNode.parentNode.dataset.moduleType; if (tableFromType && tableFromType.includes('staff')) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } } // 创建按钮元素 let button = document.createElement('button'); button.textContent = '复制表格'; button.id = '复制表格'; button.style.position = 'absolute'; button.style.top = '5px'; button.style.right = '5px'; button.style.zIndex = "999999"; // 添加按钮点击事件处理程序 button.addEventListener('click', function() { CopyTable(table); // 修改按钮样式为橙色 button.style.backgroundColor = 'orange'; }); // 将按钮添加到页面中 let tableContainer = table.parentNode; if (tableContainer.querySelector('#复制表格')) { tableContainer.querySelector('#复制表格').remove(); } if (tableContainer) { tableContainer.style.position = 'relative'; // 确保图片的父元素是相对定位的 tableContainer.insertBefore(button, tableContainer.firstChild); } // 创建按钮元素 let buttonTitle = document.createElement('button'); buttonTitle.textContent = '表格标题'; buttonTitle.id = '表格标题'; buttonTitle.style.position = 'absolute'; buttonTitle.style.top = '5px'; buttonTitle.style.right = '60px'; buttonTitle.style.zIndex = "999999"; // 添加按钮点击事件处理程序 buttonTitle.addEventListener('click', function() { CopyTable_T(table); // 修改按钮样式为橙色 buttonTitle.style.backgroundColor = 'orange'; }); // 将按钮添加到页面中 let tableContainerTitle = table.parentNode; if (tableContainerTitle.querySelector('#表格标题')) { tableContainerTitle.querySelector('#表格标题').remove(); } if (tableContainerTitle) { tableContainerTitle.style.position = 'relative'; // 确保图片的父元素是相对定位的 tableContainerTitle.insertBefore(buttonTitle, tableContainerTitle.firstChild); } }); } //************************************************************************************* //----------------------------------------修改信息栏 //************************************************************************************* function changeBasics() { let basics = document.querySelector("div.J-basic-info"); let sups = basics.querySelectorAll("sup"); let basics_box_list = basics.querySelectorAll("div[class*='itemWrapper_']");//信息栏 let basics_list = [[],[]]; //删除参考资料 sups.forEach(function(sup){ sup.remove(); }); for (let i = 0;i< basics_box_list.length;i++) { let dtTag = basics_box_list[i].querySelector("dt"); let dt = dtTag.innerText.trim().replace(/ /g,''); //let dd = basics_box_list[i].querySelector("dd").innerText.trim().replace(/\n/g,'、'); let ddTag = dtTag.nextElementSibling; let dd = ddTag.innerText.trim().replace(/\n/g,'、'); let dddiv = ddTag.querySelectorAll('div[class*="basicInfoOverlap_"]'); // 对部分需要展开的内容进行获取 if (dddiv.length > 0) { ddTag = dddiv[0].querySelector("dl > dd"); let spanList = ddTag.querySelectorAll('span[class*="text_"]'); let spanText = []; spanList.forEach(function(span){ spanText.push(span.textContent.trim()); // 将每个 span 的文本内容添加到数组中 }); // 信息栏xxl使用\n分隔,要改改这里【信息栏】 // 使用 join 方法将数组元素合并成一个用\n分隔的字符串 let combinedText = spanText.join('\n'); dd = combinedText.trim(); } // 将获取的内容添加到basics_list中 if (basics_list[0].includes(dt)) { // 如果存在,找到索引并更新对应的dd let index = basics_list[0].indexOf(dt); // 合并dd内容 basics_list[1][index] += '、' + dd; } else { // 如果不存在,将dt和dd添加到basics_list basics_list[0].push(dt); basics_list[1].push(dd); } } // 不适宜写入模板的内容处理 for (let m = 0;m< basics_list[0].length;m++) { let other_A = ['集数','每集时长','片长','票房'] for (let j = 0;j< other_A.length;j++) { if (basics_list[0][m]===other_A[j]) { // 如果存在,修改 // console.log('basics_list[0][i]:',basics_list[0][m]); basics_list[0][m] = basics_list[0][m]+' '; } } } //let regexStr = `"lemmaId":([0-9]+),"lemmaTitle":"${keyword}"`; // let regex = new RegExp(regexStr, 'g'); // let match_2 = match_contentItemChildren[1].match(regex); for (let m = 0;m< basics_list[0].length;m++) { let other_B = [['上映时间', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ['首播时间', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ['播出时间', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ['拍摄日期', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ['出生日期', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ['逝世日期', '^((\\d{1,4}年)?(\\d{1,2}月)?(\\d{1,2}日)?)$'], ] for (let j = 0;j< other_B.length;j++) { // 获取规则 //let regexStr = `\`${other_B[j][1]}\`s`; let regexStr = other_B[j][1]; let regex = new RegExp(regexStr, 'g'); if (basics_list[0][m] === other_B[j][0] && !basics_list[1][m].match(regex) ) { // 如果存在,修改 // console.log('basics_list[0][i]:',basics_list[0][m]); basics_list[0][m] = basics_list[0][m]+' '; } } } // });拍摄日期 console.log('basics_list:',basics_list); // function addBasics() { // 创建一个表格元素 let table = document.createElement("table"); table.id = 'addBasics'; // 样式定义 let purpleColor = "#dcd0ff"; let blueColor = "#d0dcff"; let orangeColor = "#ffa500"; let redColor = "#000000"; // 遍历基本信息数据,创建表格行和单元格 for (let i = 0; i < basics_list.length; i++) { let row = table.insertRow(); for (let j = 0; j < basics_list[0].length; j++) { let cell = row.insertCell(); let button = document.createElement("button"); let buttonText = document.createTextNode("CC"); button.style.width = "25px"; button.style.height = "25px"; button.style.textAlign = "center"; button.style.lineHeight = "25px"; button.style.fontSize = "15px";//按钮元素的字体大小 button.style.zIndex = "999999"; // 添加 copyText 属性 button.setAttribute('copyText', basics_list[i][j]); button.appendChild(buttonText);// 将文本内容添加到按钮 cell.appendChild(button);// 将按钮添加到单元格 // 设置按钮初始颜色 button.style.backgroundColor = (i === 0 && j === 0) ? orangeColor : (i === 0 ? purpleColor : blueColor); // 按钮点击事件处理函数,复制对应数据并修改颜色 button.addEventListener('click', function() { // 复制对应的基本信息数据 let dataToCopy = basics_list[i][j]; // 创建一个临时的 textarea 元素,用于复制文本 let tempTextarea = document.createElement('textarea'); tempTextarea.value = dataToCopy; document.body.appendChild(tempTextarea); tempTextarea.select(); document.execCommand('copy'); document.body.removeChild(tempTextarea); // 修改按钮颜色为红色 button.style.backgroundColor = redColor; // 找到同列的下一行按钮,并将其颜色设置为橙色 if (i < basics_list.length - 1) { // 检查是否有下一行 table.rows[i + 1].cells[j].querySelector("button").style.backgroundColor = orangeColor; } else { // 如果没有下一行,则找下一列的第一行按钮 if (j < basics_list[0].length - 1) { // 检查是否有下一列 table.rows[0].cells[j + 1].querySelector("button").style.backgroundColor = orangeColor; } } }); button.appendChild(buttonText); cell.appendChild(button); } } // 将表格添加到指定的 div 元素末尾 basics.appendChild(table); } // 如果已有table则删除 if (basics.querySelector('table#addBasics')) { basics.querySelector('table#addBasics').remove(); } addBasics(); } //************************************************************************************* //----------------------------------------下图函数-改 //************************************************************************************* // 打开词条完整图册页面URL function openNewPage() { // 词条完整图册页面URL let titleImages_urlA = document.querySelector('head > link[hreflang="x-default"]').href.replace('https://baike.baidu.com/item/','https://baike.baidu.com/pic/'); // 词条完整图册页面URL末尾添加标识autodownloadimage let titleImages_urlB = titleImages_urlA + '?adi'; // 在新标签页中打开完整图册页面URL // window.open(newImgUrl, '_blank'); window.open(titleImages_urlB, '_blank', 'width=8000,height=8000'); //window.open(titleImages_urlB, '_blank', 'fullscreen=1'); }; // 在词条完整图册页面URL打开 function openNewPage_openPageList() { setTimeout(() => { let num_tag = document.querySelector("#root > div > div[class*='pageBody_'] > div[class*='albumHeader_'] > div > span > svg > path[d='M938.667 553.92V768c0 64.8-52.534 117.333-117.334 117.333H202.667c-64.8 0-117.334-52.533-117.334-117.333V256c0-64.8 52.534-117.333 117.334-117.333h618.666c64.8 0 117.334 52.533 117.334 117.333v297.92zm-64-74.624V256a53.333 53.333 0 0 0-53.334-53.333H202.667A53.333 53.333 0 0 0 149.333 256v344.48A290.09 290.09 0 0 1 192 597.333a286.88 286.88 0 0 1 183.296 65.846C427.029 528.384 556.906 437.333 704 437.333c65.707 0 126.997 16.779 170.667 41.963zm0 82.24c-5.334-8.32-21.131-21.653-43.648-32.917-34.251-17.131-77.974-27.286-127.019-27.286-121.77 0-229.13 76.267-270.432 188.694-2.73 7.445-7.403 20.32-13.995 38.581-7.68 21.301-34.453 28.107-51.37 13.056-16.438-14.635-28.555-25.067-36.139-31.147A222.89 222.89 0 0 0 192 661.333a225.169 225.169 0 0 0-42.667 4.054V768a53.333 53.333 0 0 0 53.334 53.333h618.666A53.333 53.333 0 0 0 874.667 768V561.525zM320 480a96 96 0 1 1 0-192 96 96 0 0 1 0 192zm0-64a32 32 0 1 0 0-64 32 32 0 0 0 0 64z']"); let num = num_tag.parentNode.parentNode.textContent.trim(); if (num && num <= 0) { window.close(); } }, 3000); // 获取图册链接列表, // 除***精彩图册(拓展图册默认名):not([title$="精彩图册"]) // 实地认证:not([title$="实地认证"])') let albumLinks = document.querySelectorAll('a[class*="albumCover_"]:not([href$="/"]):not([title$="实地认证"])'); // 提取所有 href 属性并转换为数组 const hrefs = Array.from(albumLinks).map(albumLink => albumLink.href); // 打印所有 href 属性 console.log(hrefs); // 存储图片链接的数组 let imgUrlArray = []; let uniqueImgUrls = []; // 定义处理函数 function handleAlbumLink(albumLink) { // 创建一个新的 iframe 元素 let iframe = document.createElement('iframe'); let srcTrue = ''; // 修改词条名中会导致图册链接错误的符号 let srcTrue_A = 'https://baike.baidu.com/pic/'; //https://baike.baidu.com/pic/T-34/85/9555520/1/8d5494eef01f3a294067ff569325bc315d607cfe?fr=newalbum&fromModule=album //.split(/\/[0-9]+\/[0-9]+\//)[0]; let regex = /\/[0-9]+\/[0-9]+\/[0-9a-z]+\?fr=newalbum&fromModule=album/; let regexText = albumLink.href.match(regex); console.log('regexText[0]:', regexText[0]); let srcTrue_B_from = albumLink.href.replace('https://baike.baidu.com/pic/', '').replace(regexText[0], ''); let srcTrue_C = albumLink.href.replace(srcTrue_A, '').replace(srcTrue_B_from, ''); let srcTrue_B = srcTrue_B_from .replace(/\"/g, '%22')// " .replace(/\&/g, '%26') .replace(/\&%2338;/g, '%26') .replace(/\'/g, "'")//' .replace(/\&%2339;/g, "'")//' .replace(/\//g, '%2F') .replace(/\#/g, '%23') ; console.log('srcTrue_A:', srcTrue_A); console.log('srcTrue_B:', srcTrue_B); console.log('srcTrue_C:', srcTrue_C); srcTrue = srcTrue_A + srcTrue_B + srcTrue_C + '?adi'; iframe.src = srcTrue; // 定义iframe加载完成后执行的操作 iframe.onload = function() { // 获取 iframe 中的文档对象 let iframeDocument = iframe.contentDocument || iframe.contentWindow.document; // 等待iframe中的内容加载完成 setTimeout(function() { let thumbItems = iframeDocument.querySelectorAll('div[class*="thumbItem_"]'); let thumbCount = parseInt(iframeDocument.querySelector('div > span[class*="count_"]').textContent);// 该iframe中的图片数量 if (thumbItems.length < thumbCount) { // 图片数量不一致,重新查找图片 handleAlbumLink(albumLink); return; } thumbItems.forEach(thumbItem => { // 获取 thumbItem 的样式 let urlMatch = thumbItem.getAttribute('style').match(/url\(["']?([^"']*)["']?\)/); let beforeText = /\?x-bce-process=[\s\S]*/; let afterText = "?x-bce-process=image/format,f_auto/resize,m_lfit,limit_1,w_1080"; let imgUrl = urlMatch[1].replace(beforeText, afterText); // 将 imgUrl 加入数组 imgUrlArray.push(imgUrl); }); // 处理完毕后删除 iframe document.body.removeChild(iframe); // 处理下一个链接 let nextAlbumLink = getNextAlbumLink(albumLink); if (nextAlbumLink) { handleAlbumLink(nextAlbumLink); } else { // 所有链接处理完毕,去重并打印结果 uniqueImgUrls = Array.from(new Set(imgUrlArray)); console.log('去重后的图片链接数组:', uniqueImgUrls); // 在获取到 uniqueImgUrls 后调用下载函数 downloadAllImages(uniqueImgUrls); } }, 5000); }; // 将 iframe 插入到页面中 document.body.appendChild(iframe); } // 定义获取下一个链接的函数 function getNextAlbumLink(currentLink) { let index = Array.from(albumLinks).indexOf(currentLink); return albumLinks[index + 1]; } // 开始处理第一个链接 if (albumLinks.length > 0) { handleAlbumLink(albumLinks[0]); } // 判断是否为gif图片 function isGif(blob) { return new Promise((resolve) => { const reader = new FileReader(); reader.onloadend = function () { const arr = new Uint8Array(reader.result).subarray(0, 4); let header = ''; for (let i = 0; i < arr.length; i++) { header += arr[i].toString(16); } resolve(header === '47494638'); // GIF89 }; reader.readAsArrayBuffer(blob.slice(0, 4)); }); } // 异步下载图片函数 function downloadImage(url, filename) { return new Promise((resolve, reject) => { fetch(url) .then(response => response.blob()) .then(async blob => { let newBlob = blob; // 如果图片小于5kb,则扩充为不小于5kb if (blob.size <= 5 * 1024) { const difference = 6 * 1024 - blob.size; const padding = new Uint8Array(difference).fill(255); const paddedBlob = new Blob([blob, padding]); newBlob = paddedBlob; } // 如果图片是gif动图,则转换为png if (await isGif(blob)) { const image = new Image(); image.src = URL.createObjectURL(blob); await new Promise((resolve) => { image.onload = () => { const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; const ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0); canvas.toBlob((pngBlob) => { newBlob = pngBlob; resolve(); }, 'image/png'); }; }); } const url = window.URL.createObjectURL(newBlob); const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); resolve(); }) .catch(error => { reject(error); }); }); } // 异步下载所有图片 async function downloadAllImages(imgUrls) { // 设置并发下载数为4,可以根据需要调整 const concurrency = 4; const batches = Math.ceil(imgUrls.length / concurrency); for (let i = 0; i < batches; i++) { const batchStart = i * concurrency; const batchEnd = Math.min((i + 1) * concurrency, imgUrls.length); const batchUrls = imgUrls.slice(batchStart, batchEnd); try { // 使用 Promise.all() 同时发起多个下载任务 await Promise.all(batchUrls.map(async imgUrl => { const filename = imgUrl.replace('https://bkimg.cdn.bcebos.com/pic/', '').replace(/\?x-bce-process.*/, '').trim() + '.png'; await downloadImage(imgUrl, filename); console.log('下载完成:', filename); })); } catch (error) { console.warning('批量下载失败:', error); } } // 3秒后关闭网页 setTimeout(() => { window.close(); }, 3000); } }; function processInput_2() { const parts = document.querySelector('head > meta[property="og:title"]').content; if (parts) { const keyword = parts.trim(); // 构建百度百科搜索链接 const searchUrl = `https://baike.baidu.com/item/${encodeURIComponent(keyword)}`; console.log('searchUrl',searchUrl); // 访问百度百科搜索链接 fetch(searchUrl) .then(response => response.text()) .then(html => { // 使用正则表达式从 HTML 中提取 window.PAGE_DATA 开头的 script 数据 // "disamLemma":{"lemmaId":21443771,"lemmaTitle":"计算机", const match = html.match(/"disamLemma":{"lemmaId":(\d+),/); // console.log('match',match); if (match) { const jsonData = JSON.parse(match[1]); const lemmaId = JSON.parse(match[1]); const finalUrl = `${searchUrl}/${lemmaId}`; console.log('义项页面:', finalUrl); // 访问义项页面 fetch(finalUrl) .then(response_finalUrl => response_finalUrl.text()) .then(html_finalUrl => { // console.log('html_finalUrl',html_finalUrl); //黄雀 卢伦常执导的刑电视剧侦 //"lemmaId":63278774,"lemmaTitle":"黄雀","lemmaDesc":"卢伦常执导的刑侦电视剧" let match_contentItemChildren = html_finalUrl.match(/"lemmas":(.+),"encodeLemmaId"/); console.log('match_contentItemChildren[1]:', match_contentItemChildren[1]); let regexStr = `"lemmaId":([0-9]+),"lemmaTitle":"${keyword}"`; let regex = new RegExp(regexStr, 'g'); let match_2 = match_contentItemChildren[1].match(regex); if (match_2) { console.log('All matches:', match_2); // 如果需要获取每个匹配的第一个捕获组(即 lemmaId 的值) for (let i = 0; i < match_2.length; i++) { console.log(`Match ${i + 1}:`, match_2[i]); console.log(`lemmaId value:`, match_2[i][1]); //"lemmaId":23360414,"lemmaTitle":"余亚军" let lemmaId = match_2[i].split('"lemmaId":')[1].split(`,"lemmaTitle":"${keyword}"`)[0]; let trueUrl = searchUrl + '/' + lemmaId + '?areyousuper'; console.log('trueUrl:', trueUrl); window.open(trueUrl, '_blank'); } } else { console.log('No matches found.'); } }) .catch(error => { console.error('请求错误:', error); }); } else { console.log('找不到符合条件的 script 数据'); window.open(`${searchUrl}?adplus`, '_blank'); } }) .catch(error => { console.error('请求错误:', error); }); } let home = document.querySelector("#J-lemma-main-wrapper") let tag = home.querySelector("div[class*='posterFlag_']") } function AYS() { setTimeout(function() { let home = document.querySelector("#J-lemma-main-wrapper") let tag = home.querySelector("div[class*='posterFlag_']") if (tag) { let url = window.location.href; let new_url = url.replace('?areyousuper',''); // 跳转到新的 URL window.location.href = new_url; } else { window.close(); } }, 5000); // 延迟一段时间 } //************************************************************************************* //----------------------------------------显示图片名称复制按钮 //************************************************************************************* function copyImgName(){ // 获取所有图片元素 let imageTitle = document.querySelector("#side > div.abstractAlbum_add > a > img"); // 创建的概述图 let imagesAll = document.querySelectorAll('img:not([src$=".svg"]):not([src$=".png"])'); let images = [...imagesAll, imageTitle]; // 循环处理每张图片 images.forEach(img => { // 创建按钮元素 let button = document.createElement('button'); //button.textContent = 'C'; button.id = 'copyImgName'; button.style.position = 'absolute'; button.style.bottom = '10px'; // 与底部边距 button.style.right = '10px'; // 与右侧边距 button.style.padding = '18px'; // 内边距 button.style.backgroundColor = 'rgba(255, 0, 255, 0.5)'; // 半透明背景 button.style.color = 'white'; // 白色文本 button.style.border = 'none'; // 无边框 button.style.cursor = 'pointer'; // 指针样式 button.style.zIndex = '9999999'; // 较高的 z-index button.style.fontFamily = 'inherit'; // 继承字体 button.style.fontSize = 'inherit'; // 继承字体大小 button.style.userSelect = 'none'; // 防止文本被选中复制 // 按钮点击事件处理程序-名称 button.addEventListener('click', function(event) { event.stopPropagation(); event.preventDefault(); // 获取图片的 src let src = img.src; // 提取图片路径中的参数 let picPath = src.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process.*/,'').trim() + '.png'; // 复制图片路径中的内容到剪贴板 navigator.clipboard.writeText(picPath) .then(() => console.log('图片路径已复制到剪贴板:' + picPath)) .catch(err => console.warning('复制失败:', err)); }); // 将按钮添加到图片的父元素中 img.parentNode.style.position = 'relative'; // 确保图片的父元素是相对定位的 // 如果已有button则删除 if (img.parentNode.querySelector('button#copyImgName')) { img.parentNode.querySelector('button#copyImgName').remove(); } // 专辑图片格式调整 if (img.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.classList.contains("module-musicAlbum") && img.parentNode.parentNode.querySelector('em[class*="bg_"]') ) { img.parentNode.parentNode.querySelector('em[class*="bg_"]').remove(); } img.parentNode.appendChild(button); // 创建按钮元素2-标题 let button_title = document.createElement('button'); //button_title.textContent = 'T'; button_title.id = 'copyImgNameTitle'; button_title.style.position = 'absolute'; button_title.style.bottom = '10px'; // 与底部边距 button_title.style.right = '50px'; // 与右侧边距 button_title.style.padding = '18px'; // 内边距 button_title.style.backgroundColor = 'rgba(255, 0, 0, 0.5)'; // 半透明背景 button_title.style.color = 'white'; // 白色文本 button_title.style.border = 'none'; // 无边框 button_title.style.cursor = 'pointer'; // 指针样式 button_title.style.zIndex = '9999999'; // 较高的 z-index button_title.style.fontFamily = 'inherit'; // 继承字体 button_title.style.fontSize = 'inherit'; // 继承字体大小 button_title.style.userSelect = 'none'; // 防止文本被选中复制 // 按钮点击事件处理程序 button_title.addEventListener('click', function(event) { event.stopPropagation(); event.preventDefault(); // 获取图片的 标题 let title_one = img.parentNode.title; let title_list = img.parentNode.parentNode.title; let title_alt = img.alt; let title = title_one || title_list || title_alt; // 复制图片路径中的内容到剪贴板 navigator.clipboard.writeText(title) .then(() => console.log('图片名称已复制到剪贴板:' + title)) .catch(err => console.warning('复制失败:', err)); }); // 将按钮添加到图片的父元素中 img.parentNode.style.position = 'relative'; // 确保图片的父元素是相对定位的 // 如果已有button则删除 if (img.parentNode.querySelector('button#copyImgNameTitle')) { img.parentNode.querySelector('button#copyImgNameTitle').remove(); } img.parentNode.appendChild(button_title); }); } function copyImgName_bgi(){ // 获取所有图片元素 const images = document.querySelectorAll('div[class*="thumbItem_"]'); // 循环处理每张图片 images.forEach(img => { // 创建按钮元素 const button = document.createElement('button'); button.textContent = 'C'; button.style.position = 'absolute'; button.style.bottom = '10px'; // 与底部边距 button.style.right = '10px'; // 与右侧边距 button.style.padding = '10px'; // 内边距 button.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; // 半透明背景 button.style.color = 'white'; // 白色文本 button.style.border = 'none'; // 无边框 button.style.cursor = 'pointer'; // 指针样式 button.style.zIndex = '9999999'; // 较高的 z-index button.style.fontFamily = 'inherit'; // 继承字体 button.style.fontSize = 'inherit'; // 继承字体大小 button.style.userSelect = 'none'; // 防止文本被选中复制 // 按钮点击事件处理程序 button.addEventListener('click', function(event) { event.stopPropagation(); event.preventDefault(); // 获取图片的样式中的背景图片链接 const backgroundImage = img.style.backgroundImage; // 提取图片链接中的路径 const matches = backgroundImage.match(/url\("(.+)"\)/); if (matches && matches.length > 1) { const imageUrl = matches[1]; // 在这里对图片链接进行操作,比如提取路径中的参数等 const picPath = imageUrl.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process.*/,'').trim() + '.png'; // 复制图片路径中的内容到剪贴板 navigator.clipboard.writeText(picPath) .then(() => console.log('图片路径已复制到剪贴板:' + picPath)) .catch(err => console.warning('复制失败:', err)); } else { console.warning('未找到背景图片链接'); } }); // 将按钮添加到图片的父元素中 img.parentNode.style.position = 'relative'; // 确保图片的父元素是相对定位的 img.parentNode.appendChild(button); }); } //************************************************************************************* //----------------------------------------按钮:目录 //************************************************************************************* function ABT_title(num){ let tag_A = document.querySelector('div[class*="catalogWrapper_"]');//目录所在 let tag_list = tag_A.querySelectorAll('a[href*="#"]');//目录所在 let i = num - 1; return(tag_list[i].textContent.trim()); } function copy_new(text){ let titleContent = text; // 创建一个临时的文本输入框(使用 textarea 类型) let tempInput = document.createElement("textarea"); tempInput.style.position = "absolute"; tempInput.style.left = "-9999px"; // 将其放到屏幕之外,使其不可见 tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); } function copy_nr(tag){ let titleContent = document.querySelector(tag).innerText.trim(); // 创建一个临时的文本输入框(使用 textarea 类型) let tempInput = document.createElement("textarea"); tempInput.style.position = "absolute"; tempInput.style.left = "-9999px"; // 将其放到屏幕之外,使其不可见 tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); } // 复制内容 正 的准备工作 function copy_nr_all_bingo(){ // 创建一个隐藏的 div 元素 var copyMain = document.createElement('div'); copyMain.id = 'copyMain'; copyMain.style.display = 'none'; // 隐藏该 div document.body.appendChild(copyMain); // 将其添加到 body 中 // 选取要复制的内容 var main = document.querySelector("div.J-lemma-content"); // 克隆 main 的内容到 copyMain var clonedContent = main.cloneNode(true); copyMain.appendChild(clonedContent); //删除参考资料 let sups = copyMain.querySelectorAll("sup"); sups.forEach((sup) => { sup.remove(); }); //删除表格-改为空行 let tables = copyMain.querySelectorAll("table"); tables.forEach((table) => { // 创建一个新的 div 元素,内容为换行符 let lineBreakDiv = document.createElement('div'); lineBreakDiv.textContent = '\n'; // 替换 table 元素 table.parentNode.replaceChild(lineBreakDiv, table); }); //删除"播报" let ttss = copyMain.querySelectorAll("span[data-tts-from='paragraph']"); ttss.forEach((tts) => { tts.remove(); }); //删除"播报" let edits = copyMain.querySelectorAll('div[class*="editLemma_"]'); edits.forEach((edit) => { edit.remove(); }); //删除参考资料行 let ckzl_s = copyMain.querySelectorAll('div[data-tag="paragraph"]'); ckzl_s.forEach((ckzl) => { if (ckzl.textContent === '参考资料'){ ckzl.remove(); } }); } // 复制内容 正 function copy_nr_all(){ function copyTextWithLineBreaks(selector) { const element = document.querySelector(selector); if (!element) { console.error(`Element with selector ${selector} not found`); return; } // 递归遍历节点,获取文本内容 function getTextWithLineBreaks(node) { let text = ''; node.childNodes.forEach(child => { if (child.nodeType === Node.TEXT_NODE) { text += child.textContent.replace('游戏数据,参考资料','游戏数据') + '\n'; // 文本节点加换行符 } else { text += getTextWithLineBreaks(child); // 递归处理子节点 } }); text = text.replace('\n\n\n','\n\n'); return text; } const textToCopy = getTextWithLineBreaks(element); // 复制到剪切板 navigator.clipboard.writeText(textToCopy) .then(() => { console.log('Text copied to clipboard'); }) .catch(err => { console.error('Failed to copy text: ', err); }); } // 调用函数,并传入要复制的元素的选择器 copyTextWithLineBreaks('#copyMain'); } //************************************************************************************* //----------------------------------------按钮:目录修改 //************************************************************************************* function editDirectory(flag,tag){ function editDirectoryFunc(tagList, newTagName){ // 遍历所有标签并将其修改为newTagName tagList.forEach(function(tagElement) { // 创建一个新的newTagName元素 let h1Element = document.createElement(`${newTagName}`); // 复制元素的内容和属性到newTagName元素 h1Element.innerHTML = tagElement.innerHTML; Array.from(tagElement.attributes).forEach(function(attr) { h1Element.setAttribute(attr.name, attr.value); }); // 替换newTagName元素为yuan元素 tagElement.parentNode.replaceChild(h1Element, tagElement); }); } //正文 let contentTag = document.querySelector(`${tag}`);//正文所在标签 // 获取所有一级目录(h2)标签 let L1Tag = contentTag.querySelectorAll("h2"); editDirectoryFunc(L1Tag, "h1"); // 获取所有二级目录(h3)标签 let L2Tag = contentTag.querySelectorAll("h3"); editDirectoryFunc(L2Tag, "h2"); // 获取所有二级目录(h3)标签 let ListTag = document.querySelectorAll(`${tag} ul`); editDirectoryFunc(ListTag, "div"); // 获取所有加粗目录(B)标签 //let BTag = contentTag.querySelectorAll("span[class*='text_'][class*='bold_']"); //editDirectoryFunc(BTag, "h3"); function editDirectoryFunc_delOther(tagList){ // 遍历所有标签并将其删除 tagList.forEach(function(tagElement) { // 删除 tagElement.remove(); }); } // 获取所有地图标签 let mapTag = contentTag.querySelectorAll('div[data-module-type="map"]'); console.log('mapTag:',mapTag); editDirectoryFunc_delOther(mapTag); // 获取所有分集剧情 let plotTag = contentTag.querySelectorAll('div[data-module-type="plot"]'); console.log('plotTag:',plotTag); editDirectoryFunc_delOther(plotTag); // 获取所有杂志写真 let magazineTag = contentTag.querySelectorAll('div[data-module-type="magazine"]'); console.log('magazineTag:',magazineTag); editDirectoryFunc_delOther(magazineTag); // 获取所有合并类图册标 let albumTag = contentTag.querySelectorAll('div[data-module-type="album"] a[class*="albumWrapper_"]'); if (flag === 'FF') { // console.log('albumTag:',albumTag); editDirectoryFunc_delOther(albumTag); } else { console.log('albumTag合并类图:',albumTag); // 遍历所有标签 albumTag.forEach(function(tagElement) { if (tagElement && tagElement.href) { // 获取图册的 href let href = tagElement.href; // 提取图片路径中的参数 let name = href; // 获取词条的 title let titleContent = document.querySelector('head > meta[property="og:title"]').content; // 获取图册的 title let titleAlbum = tagElement.title; let title = titleAlbum || titleContent; // 添加图片信息 let newTag = document.createElement('div'); newTag.textContent = '【【' + name + '|【Album】|' + title + '】】'; tagElement.parentNode.appendChild(newTag); } // 删除 tagElement.remove(); }); } // 获取所有展开图册标 let galleryAlbumTag = contentTag.querySelectorAll('div[class*="galleryWrapper_"]'); if (flag === 'FF') { // console.log('albumTag:',albumTag); editDirectoryFunc_delOther(galleryAlbumTag); } else { console.log('albumTag展开类图:',galleryAlbumTag); // 遍历所有标签 galleryAlbumTag.forEach(function(tagElement) { if (tagElement.querySelector('div[class*="galleryView_"]') && tagElement.querySelector('div[class*="galleryView_"]').getAttribute('data-gallery')) { let tagA = tagElement.querySelector('div[class*="galleryView_"]'); let tagB = tagElement.querySelector('div[class*="galleryDesc_"]'); // 获取带ID的URL let itemTitle = document.querySelector('head > link[hreflang="x-default"]').href; // 获取图册的 dataGallery let dataGallery = tagA.getAttribute('data-gallery'); // 获取图册的 dataImg let tagList = tagA.querySelectorAll('img'); console.log('albumTag展开类图tagList:',tagList); let dataImg = tagList[0]?.src?.replace('https://bkimg.cdn.bcebos.com/pic/','')?.replace(/\?x-bce-process.*/,'')?.trim(); let name = itemTitle.replace('baike.baidu.com/item','baike.baidu.com/pic') + '/' + dataGallery + '/' + dataImg; // 获取词条的 title let titleContent = document.querySelector('head > meta[property="og:title"]').content; // 获取图册的 title let titleAlbum; if (tagB && tagB.textContent) { titleAlbum = tagB.textContent; } let title = titleAlbum || titleContent; console.log('albumTag展开类图name:',name); console.log('albumTag展开类图title:',title); // 添加图片信息 let newTag = document.createElement('div'); newTag.textContent = '【【' + name + '|【Album】|' + title + '】】'; tagElement.parentNode.appendChild(newTag); } // 删除 tagElement.remove(); }); } // 获取所有单张图片标签 let lemmaPictureTag = contentTag.querySelectorAll('div[class*="lemmaPicture_"]'); if (flag === 'FF') { console.log('lemmaPictureTag:',lemmaPictureTag); editDirectoryFunc_delOther(lemmaPictureTag); } else { console.log('lemmaPictureTag:',lemmaPictureTag); // 遍历所有标签 lemmaPictureTag.forEach(function(tagElement) { // 获取图片的 src let src = tagElement.querySelector('a img').src; // 提取图片路径中的参数 let name = src.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process.*/,'').trim() + '.png'; // 获取图片的 title let title = tagElement.querySelector('a').title || ''; // 添加图片信息 let newTag = document.createElement('div'); newTag.textContent = '【【' + name + '|【imgisthis】|' + title + '】】'; tagElement.parentNode.appendChild(newTag); // 删除 tagElement.remove(); }); } // 获取所有按钮 let buttonTag = contentTag.querySelectorAll('button'); console.log('buttonTag:',buttonTag); editDirectoryFunc_delOther(buttonTag); // 获取所有模板-演员表 let actorTag = contentTag.querySelectorAll('div[data-module-type="actor"] div'); if (flag === 'TT') {//暗中复制 console.log('buttonTag:',actorTag); editDirectoryFunc_delOther(actorTag); } else if (flag === 'FF') { console.log('buttonTag:',actorTag); editDirectoryFunc_delOther(actorTag); } if (flag === 'TT') {//有序目录修改 change_list(0); } // 获取所有模板-角色介绍 let roleTag = contentTag.querySelectorAll('div[class*="roleWrap_"]'); if (flag === 'TT') {//暗中复制 console.log('buttonTag:',roleTag); // 遍历所有标签 roleTag.forEach(function(tagElement) { // 添加信息 let newTag = document.createElement('div'); newTag.textContent = '《【《角色介绍》】》'; tagElement.parentNode.appendChild(newTag); // 删除 tagElement.remove(); // 删除表格 let del_role = contentTag.querySelectorAll('table#changeTablef_actor_role'); if (del_role.length > 0) { del_role.forEach(function(tagElement) { tagElement.remove(); }); } }); } else if (flag === 'FF') { console.log('buttonTag:',roleTag); editDirectoryFunc_delOther(roleTag); } // 获取所有模板-参演电影movieAndTvPosterWrapper_ let movieTag = contentTag.querySelectorAll('div[class*="movieAndTvPosterWrapper_"]'); console.log('buttonTag:',movieTag); editDirectoryFunc_delOther(movieTag); // 获取所有模板-音乐专辑 let musicAlbumTag = contentTag.querySelectorAll('div[class*="module-musicAlbum"]'); console.log('buttonTag:',musicAlbumTag); editDirectoryFunc_delOther(musicAlbumTag); } //新建隐藏tag并写入内容 function editNewTag(){ // 如果div#copyNewTag存在,删除它 if (document.querySelector("div#copyNewTag")) { document.querySelector("div#copyNewTag").remove(); } function addNewTag() { // 获取目标元素 const sourceDiv = document.querySelector("div.J-lemma-content"); const targetDiv = document.querySelector("div#copyNewTag"); // 创建一个新的div元素 const newDiv = document.createElement('div'); newDiv.id = 'copyNewTag'; // 将目标元素的内容复制到新元素 sourceDiv.childNodes.forEach(child => { newDiv.appendChild(child.cloneNode(true)); }); // 将新元素添加到网页中 document.querySelector("body").appendChild(newDiv); // 设置新元素为隐藏 newDiv.style.display = 'none'; } addNewTag(); } //写一个js,要求复制指定标签下的内容,像鼠标划选复制一样连带格式一同复制到剪切板 function copyElementContentToClipboard(elementSelector) { const element = document.querySelector(elementSelector); if (!element) { console.log('[复制正文]未找到要复制的内容'); return; } console.log('element',element); // 创建一个临时的可编辑的div元素 const tempDiv = document.createElement('div'); tempDiv.contentEditable = 'true'; tempDiv.style.position = 'absolute'; tempDiv.style.left = '-9999px'; document.body.appendChild(tempDiv); // 将目标元素的内容复制到临时div中 tempDiv.innerHTML = element.innerHTML; // 选择临时div的内容 tempDiv.focus(); document.execCommand('selectall'); // 执行复制命令 document.execCommand('copy'); // 移除临时div document.body.removeChild(tempDiv); console.log('[复制正文]带格式正文内容已复制'); } function ABT_1_bingo() { var tableMain = document.createElement('div'); tableMain.id = 'tableMain'; tableMain.style.display = 'none'; // 隐藏该 div document.body.appendChild(tableMain); // 将其添加到 body 中 // 选取要复制的内容 let main = document.querySelector("div.J-lemma-content"); // 克隆 main 的内容到 tableMain var clonedContent = main.cloneNode(true); tableMain.appendChild(clonedContent); console.log('tableMain',tableMain); //删除参考资料 let sups = tableMain.querySelectorAll("sup"); sups.forEach((sup) => { sup.remove(); }); //删除"播报" let ttss = tableMain.querySelectorAll("span[data-tts-from='paragraph']"); ttss.forEach((tts) => { tts.remove(); }); //删除"播报" let edits = tableMain.querySelectorAll('div[class*="editLemma_"]'); edits.forEach((edit) => { edit.remove(); }); //删除参考资料行 let ckzl_s = tableMain.querySelectorAll('div[data-tag="paragraph"]'); ckzl_s.forEach((ckzl) => { if (ckzl.textContent === '参考资料'){ ckzl.remove(); } }); // 清理多余目录保留表格所在区域 let divElements = tableMain.querySelectorAll('div'); // 确保转换为数组以便使用索引 for(let i = 0; i < divElements.length; i++) { if (divElements[i] && divElements[i].textContent && divElements[i].textContent.trim() === "能力设定") { break; // 遇到目标文本则停止循环 } else if (divElements[i]) { divElements[i].remove(); } } for(let i = divElements.length; i > 0; i--) { if (divElements[i] && divElements[i].textContent && divElements[i].textContent.trim() === "角色专属") { break; // 遇到目标文本则停止循环 } else if (divElements[i]) { divElements[i].remove(); } } // console.log('tableMain',tableMain); // 查找位于它们之间的button#复制表格元素 let copyButton = tableMain.querySelector("button#复制表格") if (copyButton) { // 找到了button#复制表格元素,可以在这里进行你的操作 copyButton.click(); } else { console.log('未找到button#复制表格元素'); } } //************************************************************************************* //************************************************************************************* //----------------------------------------页面 //************************************************************************************* //************************************************************************************* let url = window.location.href; console.log('url:'+url); //词条页面 if (url.includes("baike.baidu.com/item") && !url.includes("baike.baidu.com/pic") && !url.includes('?adplus')) { console.log('词条页面'); function auto() { //自动化词条页面 if (url.includes("?areyousuper") && !url.includes("?fromtitle=")) { console.log('自动化词条页面'); AYS(); } //自动化词条页面,小问题 else if (url.includes("?fromtitle=") && !url.includes("?areyousuper")) { console.log('自动化词条页面'); //let new_url = document.querySelector('head > link[hreflang="x-default"]').href + '?areyousuper'; // 使用 URL 对象解析当前的 URL let urlParams = new URLSearchParams(window.location.search); // 获取查询参数 fromtitle 和 fromid 的值 let fromtitle = urlParams.get('fromtitle'); // let fromid = urlParams.get('fromid'); // 打印结果 // let new_url = 'https://baike.baidu.com/item/' + fromtitle + '/' + fromid; let lemmaId = window.PAGE_DATA.navigation.disamLemma.lemmaId; let list_url = 'https://baike.baidu.com/item/' + fromtitle + '/' + lemmaId; console.log('lemmaId:', lemmaId); console.log('new_url:', list_url); // 跳转到新的 URL window.location.href = list_url; } //聚焦加载图册 let galleryAlbumTag = document.querySelector("div.J-lemma-content").querySelectorAll('div[class*="galleryWrapper_"]'); // 当前索引 let currentIndex = 0; let time = 500; // 定义函数来聚焦到下一个元素 function focusNextElement() { if (currentIndex < galleryAlbumTag.length) { // 当前元素 let element = galleryAlbumTag[currentIndex]; // 将当前元素滚动到视图中 element.scrollIntoView({ behavior: 'smooth', block: 'center' }); // 增加索引以便下次调用 currentIndex++; // 设置定时器,1秒后调用下一个元素 setTimeout(focusNextElement, time); } else if (currentIndex = galleryAlbumTag.length){ let titleTag = document.querySelector("h1.J-lemma-title"); // 将当前元素滚动到视图中 titleTag.scrollIntoView({ behavior: 'smooth', block: 'center' }); } } // 启动函数 focusNextElement(); // 显示图片、参考资料数量 setInterval(numCanSee, 1000); setInterval(window.gc, 1000); // 尝试强制执行垃圾回收 // 不显示概述图则显示 setTimeout(function() { if (!document.querySelector('#side > div[class*="abstractAlbum_"]') && !document.querySelector('div[class^="posterRight_"] > div[class^="abstractAlbum_"] > img')) { changeTitleImg(); } }, 3000); // 目录去杂 runFunction(delZ, 1000, 5); // 展开角色列表 setTimeout(function() { 函数_展开角色列表(); }, 5000); // 参考资料预备处理 setTimeout(function() { changeReference_ready(); }, 1000); //role // copy_nr_all_bingo(); // 更新img runFunction(changeP, 2000, 3); } auto(); //************************************************************************************* //----------------------------------------按钮:去参/显参/改参 //************************************************************************************* let type = ''; addButton("隐", "120px", "10px", document.querySelector("body"), function() { // 创建并显示弹窗 type = 'notsee'; delC(type); setInterval(() => delC(type), 1000); }); addButton("显", "70px", "10px", document.querySelector("body"), function() { // 创建并显示弹窗 type = 'cansee'; delC(type); }); addButton("改", "20px", "10px", document.querySelector("body"), function() { // 创建并显示弹窗 changeReference() }); //************************************************************************************* //----------------------------------------按钮:下图/表格/显图 //************************************************************************************* addButton("图", "300px", "10px", document.querySelector("body"), function() { copyImgName(); }); addButton("表", "250px", "10px", document.querySelector("body"), function() { delC('notsee'); changeTable(); // 在页面加载完成后调用函数 setTimeout(function() { addCopyButtonToTable(); }, 1000); }); addButton("下", "200px", "10px", document.querySelector("body"), function() { openNewPage(); }); //************************************************************************************* //----------------------------------------按钮:URL/词条名/义项名 //************************************************************************************* addButton("名", "500px", "10px", document.querySelector("body"), function() { let titleContent = document.querySelector('head > meta[property="og:title"]').content; // 创建一个临时的文本输入框 let tempInput = document.createElement("input"); tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("义", "450px", "10px", document.querySelector("body"), function() { //document.querySelector("#lemmaDesc > div.lemmaDescText_DgfBu") let titleContent = document.querySelector('#lemmaDesc > div[class*="lemmaDescText_"]').textContent.trim(); // 创建一个临时的文本输入框 let tempInput = document.createElement("input"); tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("概", "400px", "10px", document.querySelector("body"), function() { //document.querySelector("#lemmaDesc > div.lemmaDescText_DgfBu") let titleContent = document.querySelector('div[class*="J-summary"]').innerText.trim(); // 创建一个临时的文本输入框(使用 textarea 类型) let tempInput = document.createElement("textarea"); tempInput.style.position = "absolute"; tempInput.style.left = "-9999px"; // 将其放到屏幕之外,使其不可见 tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("头", "600px", "10px", document.querySelector("body"), function() { let img_many = document.querySelector("#side div[class*='abstractAlbum_'] img"); let img_a = document.querySelector("div[class*='smallFeatureWrap_'] div[class*='poster_'] div[class*='posterRight_'] img"); let img = img_many || img_a; event.stopPropagation(); event.preventDefault(); // 获取图片的 src let src = img.src; // 提取图片路径中的参数 let picPath = src.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process.*/,'').trim() + '.png'; // 复制图片路径中的内容到剪贴板 navigator.clipboard.writeText(picPath) .then(() => console.log('图片路径已复制到剪贴板:' + picPath)) .catch(err => console.warning('复制失败:', err)); }); addButton("U", "650px", "10px", document.querySelector("body"), function() { let titleContent = document.querySelector('head > link[hreflang="x-default"]').href; // 创建一个临时的文本输入框 let tempInput = document.createElement("input"); tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("模", "700px", "10px", document.querySelector("body"), function() { // 假设使用可选链操作符安全地获取第一个元素的 name 属性 let mod_type = window.PAGE_DATA?.extData?.kpdClassify?.[0]?.name; mod_type = mod_type .replace('行政区划','行政规划') console.log("mod_type",mod_type); copy_new(mod_type) }); addButton("FF", "600px", "80px", document.querySelector("body"), function() { let flag = 'FF'; let tag = 'div.J-lemma-content'; editDirectory(flag,tag); }); addButton("TT", "650px", "80px", document.querySelector("body"), function() { //新建隐藏tag并写入内容 editNewTag(); //修改隐藏tag的内容 let flag = 'TT'; let tag = 'div#copyNewTag'; editDirectory(flag,tag); // 复制指定标签下的内容,像鼠标划选复制一样连带格式一同复制到剪切板 setTimeout(function() { copyElementContentToClipboard(tag); }, 200); }); const targetDiv = document.querySelector('body'); // 在网页上动态创建一个输入框 function createInputBox() { const inputBox = document.createElement('input'); // 创建一个输入框 const inputContent = inputBox.value.trim(); // 获取输入框中的内容(去除首尾的空白字符) targetDiv.appendChild(inputBox); // 或者将其插入到页面的其他位置 inputBox.id = '判断'; //inputBox.style.position = 'absolute'; inputBox.type = 'text'; // 设置输入框类型为文本 inputBox.style.position = "fixed"; inputBox.style.bottom = "450px"; inputBox.style.right = "80px"; inputBox.style.width = "50px"; inputBox.style.height = "45px"; inputBox.style.background = "black"; inputBox.style.opacity = "1"; inputBox.style.color = "white"; inputBox.style.textAlign = "center"; inputBox.style.lineHeight = "45px"; inputBox.style.fontSize = "30px";//按钮元素的字体大小 inputBox.style.cursor = "pointer"; inputBox.style.zIndex = "99999"; inputBox.placeholder = '❓'; // 设置输入框的占位符为名称 // 先定义点击事件处理程序 const handleInputClick = (inputContent) => { let textTag = document.querySelector('head > meta[property="og:title"]'); const content = textTag.content; const insertionTarget = targetDiv; const createPlusElement = (text, className) => { const plusElement = document.createElement('div'); plusElement.style.fontSize = '30px'; plusElement.style.position = "fixed"; plusElement.style.bottom = "500px"; plusElement.style.right = "80px"; plusElement.style.width = "50px"; plusElement.style.height = "45px"; plusElement.style.background = "black"; plusElement.style.opacity = "1"; plusElement.style.color = "white"; plusElement.style.textAlign = "center"; plusElement.style.lineHeight = "45px"; plusElement.style.cursor = "pointer"; plusElement.style.zIndex = "99999"; plusElement.textContent = text; plusElement.classList.add(className); return plusElement; }; // 移除之前的 plus-div const existingPlusElement = insertionTarget.querySelector('.plus-div'); if (existingPlusElement) { insertionTarget.removeChild(existingPlusElement); } // 根据输入内容与meta标签内容比较结果创建不同的plus元素 const plusText = inputContent === content ? '✅' : '❌'; const plusElement = createPlusElement(plusText, 'plus-div'); insertionTarget.appendChild(plusElement); }; // 监听回车键按下事件 inputBox.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); // 阻止默认的回车键行为 // 直接调用处理函数并传入输入框的内容 handleInputClick(inputBox.value); } }); // 返回创建的输入框 return inputBox; }; createInputBox() //************************************************************************************* //----------------------------------------按钮:🔄/⏫/⏬ //************************************************************************************* addButton("⏫", "120px", "80px", document.querySelector("body"), function() { // 滚动到顶部 window.scrollTo({ top: 0, behavior: 'smooth' }); }); addButton("🔄", "70px", "80px", document.querySelector("body"), function() { // 刷新网页 location.reload(); }); addButton("⏬", "20px", "80px", document.querySelector("body"), function() { // 滚动到底部 window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); }); //************************************************************************************* //----------------------------------------按钮:特/序/xxl //************************************************************************************* addButton("特", "200px", "80px", document.querySelector("body"), function() { // 刷新网页 processInput_2(); }); addButton("序", "250px", "80px", document.querySelector("body"), function() { change_list(2); }); addButton("xxl", "300px", "80px", document.querySelector("body"), function() { changeBasics(); }); //************************************************************************************* //----------------------------------------按钮:目录 //************************************************************************************* function addButton_text() { let tag_A = document.querySelector('div[class*="catalogWrapper_"]');//目录所在 let tag_list = tag_A.querySelectorAll('a[href*="#"]');//目录所在 //tag_list.length为目录数量 function ABT_1() { addButton("T1", "300px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(1)); }); addButton("N1", "300px", "150px", document.querySelector("body"), function() { let tag_A = document.querySelector('div[class="J-lemma-content"]');//正文所在 let tag = document.querySelector('div[class="J-lemma-content"]');//正文所在 copy_nr(tag); }); } function ABT_2() { addButton("T2", "250px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(2)); }); addButton("N2", "250px", "150px", document.querySelector("body"), function() { }); } function ABT_3() { addButton("T3", "200px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(3)); }); addButton("N3", "200px", "150px", document.querySelector("body"), function() { }); } function ABT_4() { addButton("T4", "120px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(4)); }); addButton("N4", "120px", "150px", document.querySelector("body"), function() { }); } function ABT_5() { addButton("T5", "70px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(5)); }); addButton("N5", "70px", "150px", document.querySelector("body"), function() { }); } function ABT_6() { addButton("T6", "20px", "210px", document.querySelector("body"), function() { copy_new(ABT_title(6)); }); addButton("N6", "20px", "150px", document.querySelector("body"), function() { }); } //循环按照目录数量设置按钮 for (let i = 0;i < tag_list.length;i++) { let index = i + 1; eval(functionName); } } // addButton_text(); function addButton_table() { // 选取要复制的内容 let main = document.querySelector("div.J-lemma-content"); let tableList = main.querySelectorAll("table"); console.log('table',tableList); //tag_list.length为目录数量 function ABT_1() { tableList.forEach(function(table, index) { let caption = table.querySelector('caption'); let header = table.querySelectorAll('tr th'); let tableImg = table.querySelectorAll('img'); if (tableList.length === 3 && index === 0) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("S0", "300px", "210px", document.querySelector("body"), function() { CopyTable(table); }); } if (caption && caption.textContent.trim()) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("ST", "300px", "150px", document.querySelector("body"), function() { CopyTable_T(table); }); } }); } function ABT_2() { tableList.forEach(function(table) { let caption = table.querySelector('caption'); let header = table.querySelectorAll('tr th'); let tableImg = table.querySelectorAll('img'); if (!caption && header.length === 6 && tableImg.length === 0 && tableList.length > 3) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("SX", "250px", "210px", document.querySelector("body"), function() { CopyTable(table); }); } if (!caption && header.length === 2 && header[1].textContent === '描述' && tableImg.length === 0) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("JN", "250px", "150px", document.querySelector("body"), function() { CopyTable(table); }); } }); } function ABT_3() { tableList.forEach(function(table) { let caption = table.querySelector('caption'); let header = table.querySelectorAll('tr th'); let tableImg = table.querySelectorAll('img'); if (!caption && header.length === 2 && tableImg.length > 0) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("ZS", "200px", "210px", document.querySelector("body"), function() { CopyTable(table); }); } }); } function ABT_4() { tableList.forEach(function(table) { let caption = table.querySelector('caption'); let header = table.querySelectorAll('tr th'); let tableImg = table.querySelectorAll('img'); if (!caption && header.length >= 2 && header[1].textContent.trim().includes('台词') && tableImg.length === 0) { let emTag = table.parentNode.querySelector('em[class*="more_"]'); if (emTag) { emTag.click(); emTag.remove(); } addButton("TC", "120px", "210px", document.querySelector("body"), function() { CopyTable(table); }); } }); } //循环按照目录数量设置按钮tableList.length for (let i = 0;i < 4;i++) { let index = i + 1; let functionName = `ABT_${index}()`; eval(functionName); } } function addButton_img() { // 选取要复制的内容 let main = document.querySelector("div.J-lemma-content"); let tableList = main.querySelectorAll("table"); function copyImg(img) { // 获取图片的 src let src = img.src; // 提取图片路径中的参数 let picPath = src.replace('https://bkimg.cdn.bcebos.com/pic/','').replace(/\?x-bce-process.*/,'').trim() + '.png'; // 复制图片路径中的内容到剪贴板 navigator.clipboard.writeText(picPath) .then(() => console.log('图片路径已复制到剪贴板:' + picPath)) .catch(err => console.warning('复制失败:', err)); } tableList.forEach(function(table) { let tableImg = table.querySelectorAll('img'); function ABT_1() { addButton("🔴", "500px", "210px", document.querySelector("body"), function() { copyImg(tableImg[0]); }); } function ABT_2() { addButton("🟡", "500px", "150px", document.querySelector("body"), function() { copyImg(tableImg[1]); }); } function ABT_3() { addButton("🟢", "450px", "210px", document.querySelector("body"), function() { copyImg(tableImg[2]); }); } function ABT_4() { addButton("🔵", "450px", "150px", document.querySelector("body"), function() { copyImg(tableImg[3]); }); } function ABT_5() { addButton("⚫", "400px", "210px", document.querySelector("body"), function() { copyImg(tableImg[4]); }); } function ABT_6() { addButton("⚪", "400px", "150px", document.querySelector("body"), function() { copyImg(tableImg[5]); }); } if (tableImg.length > 0) { for (let i = 0;i < tableImg.length;i++) { let index = i + 1; let functionName = `ABT_${index}()`; eval(functionName); } } }); } // 在页面加载完成后调用函数 setTimeout(function() { delC('notsee'); changeTable(); addCopyButtonToTable(); }, 1000); //游戏角色 setTimeout(function() { let desc = document.querySelector("#lemmaDesc > div[class*='lemmaDescText_']").textContent.trim(); if (desc.includes('战舰少女') || desc.includes('苍蓝誓约')) { addButton_table(); addButton_img(); } }, 1000); addButton("正", "400px", "80px", document.querySelector("body"), function() { copy_nr_all_bingo(); setTimeout(() => { copy_nr_all(); }, 2000); }); } //图册页面 else if (url.includes('baike.baidu.com/pic') && !url.includes('baike.baidu.com/item') && !url.includes('autodownload') && !url.includes('?adi')) { console.log('图册页面'); // 更新img runFunction(changeP, 500, 100); setTimeout(function() { copyImgName_bgi(); }, 1000); // 延迟一段时间 addButton("词", "500px", "10px", document.querySelector("body"), function() { let titleContent = document.querySelector('head > title').textContent.replace('图片_百度百科',''); // 创建一个临时的文本输入框 let tempInput = document.createElement("input"); tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("册", "400px", "10px", document.querySelector("body"), function() { let titleContent = document.querySelector("#root > div > div > div > span").textContent.replace('图片_百度百科',''); // 创建一个临时的文本输入框 let tempInput = document.createElement("input"); tempInput.value = titleContent; document.body.appendChild(tempInput); // 选择文本内容 tempInput.select(); tempInput.setSelectionRange(0, 99999); // 兼容 iOS // 复制文本内容 document.execCommand("copy"); // 移除临时文本输入框 document.body.removeChild(tempInput); }); addButton("下", "300px", "10px", document.querySelector("body"), function() { //还没写 }); } //下载页面——新 else if (url.includes('?adi') && url.includes('baike.baidu.com/pic')) { console.log('下载页面——新'); setTimeout(function() { openNewPage_openPageList(); }, 2000); } //下载图片-附加 else if (!url.includes('?adi') && url.includes('?adplus')) { setTimeout(() => { openNewPage(); }, 10000); setTimeout(() => { window.close(); }, 20000); } //无运行 else if (!url.includes('?adi') && url.includes('?nothing')) { // } })();