var collectParser;(()=>{"use strict";var e=[function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]});t.__esModule=!0,t.parse=void 0,o(t,n(1),"parse")},function(e,t,n){var o=this&&this.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function fulfilled(e){try{step(o.next(e))}catch(e){i(e)}}function rejected(e){try{step(o.throw(e))}catch(e){i(e)}}function step(e){e.done?r(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((o=o.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,o,r,i,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:verb(0),throw:verb(1),return:verb(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function verb(i){return function(c){return function step(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,o=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){a.label=i[1];break}if(6===i[0]&&a.label<r[1]){a.label=r[1],r=i;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(i);break}r[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],o=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}};t.__esModule=!0,t.parse=t.ParseType=void 0;var i,a=n(2),c=n(3),l=n(15),s=n(16);function html(e){if(!e)return"";if("string"==typeof e)return getHtmlByStr(e);if((0,a.isObject)(e))return getHtmlByObj(e);var t="";if(Array.isArray(e))for(var n=0,o=e;n<o.length;n++){var r=o[n];if("string"==typeof r)t+=getHtmlByStr(r);else{if(!(null==r?void 0:r.selector))continue;t+=getHtmlByObj(r)}}return t}function getHtmlByStr(e){if("string"!=typeof e)return"";var t="";try{t=Array.from(document.querySelectorAll(e)).reduce((function(e,t){return validateEl(t),e+t.outerHTML}),"")}catch(o){var n=document.querySelector(e);n&&(validateEl(n),t=n.outerHTML||"")}return t}function getHtmlByObj(e){var t;if(!(0,a.isObject)(e)||!(null==e?void 0:e.selector))return"";if("string"!=typeof e.selector)return"";var n="",o=Array.from(document.querySelectorAll(e.selector||void 0));return o.length&&((e.exclude||[]).forEach((function(e){o.forEach((function(t){var n=t.querySelector(e);null==n||n.remove()}))})),(e.include||[]).forEach((function(e){o.forEach((function(t){var o=t.querySelector(e);o&&(validateEl(o),n+=o.outerHTML)}))})),(null===(t=e.include)||void 0===t?void 0:t.length)||o.forEach((function(e){validateEl(e),n+=e.outerHTML}))),n}function validateEl(e){try{if(!e)return;"hidden"===e.style.visibility&&(e.style.visibility="visible"),"none"===e.style.display&&(e.style.display="block")}catch(e){console.error("validateEl error")}}!function(e){e.Manual="manual",e.Auto="auto"}(i=t.ParseType||(t.ParseType={})),t.parse=function parse(e){return void 0===e&&(e={type:i.Auto,modifyPage:!0}),o(this,void 0,void 0,(function(){var t,n,o,a,u,h,d,f,p;return r(this,(function(r){switch(r.label){case 0:t="",n="",o="",a="body",u=e.type,h=e.modifyPage,u=u||i.Auto,h=void 0===h||Boolean(h);try{(0,l.before)(h)}catch(e){console.error("执行 before 基础清理规则失败")}return(d=c.default.find((function(e){return"string"==typeof e.url&&location.href.includes(e.url)||"string"!=typeof e.url&&new RegExp(e.url).test(location.href)})))?d.timeout?[4,new Promise((function(e){return setTimeout(e,d.timeout)}))]:[3,2]:[3,3];case 1:r.sent(),r.label=2;case 2:if(t=d.name||"",d.title)try{n=function text(e){var t;return e?null===(t=document.querySelector(e))||void 0===t?void 0:t.innerText:""}(d.title)}catch(e){console.error("从配置获取title失败")}if("function"==typeof d.beforeParse)try{d.beforeParse(h)}catch(e){console.error("执行指定解析前dom清理规则失败")}if(a=d.content,u===i.Auto&&a)try{o=html(a)}catch(e){o=(0,s.getMainContent)(),console.error("从配置获取内容失败")}if(u===i.Auto&&o&&"function"==typeof d.afterParse)try{o=d.afterParse(o,h)}catch(e){console.error("解析出内容后执行特定规则失败")}if(u===i.Auto&&"function"==typeof d.getContent)try{f=d.getContent(),o=(0,l.formatAIData)(f),n="".concat(d.name,"-").concat(f.title||document.title)}catch(e){console.error("执行特定格式化网站内容规则失败")}r.label=3;case 3:try{(0,l.after)(h)}catch(e){console.error("执行 after 基础清理规则失败")}return p={source:t||location.host,title:(n||document.title||location.host).slice(0,100),content:o},u===i.Auto&&(p.content=o||(0,s.getMainContent)()||document.body.outerHTML),u===i.Manual&&(p.selector=a,p.getContentBySelector=function(e){var t=d?html(e||a):(0,s.getMainContent)();if(t||(t=document.body.innerHTML),"function"==typeof(null==d?void 0:d.afterParse))try{t=d.afterParse(t,h)}catch(e){console.error("解析出内容后执行特定规则失败")}return t}),[2,p]}}))}))}},(e,t)=>{t.__esModule=!0,t.isObject=void 0,t.isObject=function isType(e){return function(t){return Object.prototype.toString.call(t)==="[object ".concat(e,"]")}}("Object")},function(e,t,n){var o=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))};t.__esModule=!0;var r=n(4),i=n(5),a=n(6),c=n(7),l=n(8),s=n(9),u=n(10),h=n(11),d=n(12),f=n(13),p=n(14),m=[{name:"微信",url:"https://mp.weixin.qq.com/",title:"#activity-name",content:[{selector:"#meta_content",weight:1},{selector:"#page_top_area",weight:2},{selector:"#js_content",weight:3}],beforeParse:r.beforeParseWeixin,afterParse:r.afterParseWeixin},{name:"简书",url:"https://www.jianshu.com/p/",title:"h1",content:"article",beforeParse:p.beforeParseJianshu},{name:"掘金",url:"https://juejin.cn/post/",title:".article-title",content:"#article-root"},{name:"知乎专栏",url:"https://zhuanlan.zhihu.com/p/",title:".Post-Title",content:[{selector:".TitleImage",weight:1},{selector:".Post-RichText",weight:2}],beforeParse:i.beforeParseZhihu},{name:"知乎日报",url:"https://daily.zhihu.com/story",title:"div.DailyHeader-title",content:"div.answer",beforeParse:i.beforeParseZhihu},{name:"知乎",url:/https:\/\/www\.zhihu\.com\/question\/.+?\/answer\//,title:".QuestionHeader-title",content:[{selector:".Question-mainColumn .AnswerCard",include:[".ContentItem-meta .AuthorInfo-content .AuthorInfo-name .Popover",".ContentItem-meta .AuthorInfo-content .AuthorInfo-detail",".RichContent"],weight:2},{selector:".Question-mainColumn .MoreAnswers",include:[".List-item .AuthorInfo-content .AuthorInfo-name .Popover",".List-item .AuthorInfo-content .AuthorInfo-detail",".RichContent"],weight:1}],beforeParse:i.beforeParseZhihu},{name:"知乎",url:"https://www.zhihu.com/question/",title:".QuestionHeader-title",content:{selector:".List-item",include:[".AuthorInfo-content .AuthorInfo-name .Popover",".ContentItem-meta .AuthorInfo-content .AuthorInfo-detail",".RichContent"]},beforeParse:i.beforeParseZhihu},{name:"36氪",url:/https:\/\/(www\.)?36kr\.com\/newsflashes\//,title:"h1.item-title",content:".item-desc"},{name:"36氪-列表",url:"https://www.36kr.com/newsflashes",content:"div.newsflash-catalog-flow-list"},{name:"36氪",url:/https?:\/\/(www\.)?36kr\.com\/p\//,title:"h1.article-title",content:"div.articleDetailContent"},{name:"36氪",url:/https?:\/\/m\.36kr\.com\/p\//,title:".body-title",content:"#body-content"}],v=[{name:"CSDN",url:/https:\/\/blog\.csdn\.net\/[^/]+\/article\/details\//,title:".title-article",content:"#content_views"},{name:"小红书",url:"https://www.xiaohongshu.com/protocols/activityitem",title:".title",content:[{selector:".subtitle",weight:1},{selector:".content-wrapper",weight:2}]},{name:"小红书",url:"https://www.xiaohongshu.com/explore",title:"#detail-title",content:[{selector:".swiper-slide:not(.swiper-slide-duplicate)",weight:2},{selector:"#detail-desc",weight:1}],beforeParse:a.beforeParseXhs},{name:"人人都是产品经理",url:/https:\/\/www\.woshipm\.com\/.+\.html$/,title:".article--title",content:{selector:".article--content",exclude:[".support-author"]}},{name:"雪球",url:/https:\/\/xueqiu\.com\/\d+?\/\d+/,title:".article__bd__title",content:".article__bd__detail",beforeParse:c.beforeParseXueQiu},{name:"雪球访谈",url:/https:\/\/xueqiu\.com\/talks/,title:"",content:".interviewLists"},{name:"虎嗅",url:"https://www.huxiu.com/article/",title:".article__title",content:[{selector:".article-img",weight:1},{selector:"#article-content",weight:2}]},{name:"财经头条",url:/https?:\/\/www\.caijingtoutiao\.com\/\w+\/\d+/,title:".title",content:".textcontent"}],g=[{name:"Deepseek",url:"https://chat.deepseek.com/",getContent:l.getDeepseekContent},{name:"腾讯元宝",url:"https://yuanbao.tencent.com/chat",getContent:s.getYuanbaoContent},{name:"通义千问",url:"https://tongyi.aliyun.com/",getContent:u.getTongyiContent},{name:"kimi",url:"https://kimi.moonshot.cn/",getContent:h.getKimiContent},{name:"doubao",url:"https://www.doubao.com/",getContent:d.getDoubaoContent},{name:"yiyan",url:"https://yiyan.baidu.com/",getContent:f.getYiyanContent}];t.default=o(o(o(o(o([],m,!0),v,!0),[{name:"搜狐",url:/https?:\/\/www\.sohu\.com\/[a-z]\//,title:".text-title h1",content:[{selector:"#mp-editor",exclude:["#backsohucom"]}]},{name:"搜狐",url:"https://news.sohu.com/a/",title:".text-title h1",content:"article"},{name:"百度搜索",url:/https?:\/\/www\.baidu\.com/,title:"title",content:[{selector:"ul.s-news-rank-content",weight:1},{selector:"#hotsearch-content-wrapper",weight:2}]},{name:"百家号",url:"https://baijiahao.baidu.com/",title:"div.index-module_articleTitle_28fPT",content:[{selector:"div.index-module_articleWrap_2Zphx",exclude:["div.index-module_mediaWrap_213jB"]}]},{name:"网易新闻",url:"https://www.163.com/news/article",title:"h1.post_title",content:[{selector:".post_info",exclude:[".post_jubao","img"],weight:1},{selector:".post_content",include:[".post_body"],weight:2}]},{name:"网易新闻",url:"https://c.m.163.com/news/a/",title:"h1.header-top",content:[{selector:".article-body",exclude:[".js-open-newsapp"]}]},{name:"网易红彩",url:"https://www.163.com/sports/article/",title:".article-title",content:".article-details"},{name:"网易号",url:"https://www.163.com/dy/article/",title:".post_title",content:".post_body"},{name:"今日头条",url:"https://www.toutiao.com/article/",title:".article-content>h1",content:"article"},{name:"今日头条",url:"https://www.toutiao.com/w/",title:".wtt-content>h1",content:"article"},{name:"人民日报",url:/http:\/\/cpc|theory\.people\.com\.cn\//,title:".text_c h1",content:[{selector:".text_c .sou",weight:1},{selector:".show_text",weight:2}]},{name:"人民日报",url:"http://gx.people.com.cn/",title:"#newstit",content:[{selector:".author",weight:1},{selector:".channel",weight:2},{selector:".rm_txt_con",weight:3}]},{name:"人民日报",url:"http://health.people.com.cn/",title:".title h2",content:[{selector:".artOri",exclude:["share"],weight:1},{selector:".artDet",weight:2}]},{name:"ChinaDaily",url:"https://global.chinadaily.com.cn/",title:".content-left h1",content:"#Content"},{name:"财新",url:/\w+\.caixin.com\/(\d+-)+\d+\//,title:"#conTit h1",content:[{selector:"#conTit .artInfo",exclude:["img","a"],weight:1},{selector:".content",weight:2}]},{name:"澎湃新闻",url:"https://www.thepaper.cn/",title:".news_title",content:[{selector:".news_about",exclude:[".player-icon",".font_size"],weight:1},{selector:".news_txt",weight:2}]},{name:"腾讯新闻",url:"https://new.qq.com/",title:".LEFT>h1",content:".content-article"},{name:"新浪财经",url:"https://finance.sina.com.cn/",title:"h1.main-title",content:"#artibody"},{name:"新周刊",url:"https://www.neweekly.com.cn/article/",title:".title",content:[{selector:".summary",weight:1},{selector:"#articleContent",weight:2}]},{name:"经济日报",url:"http://paper.ce.cn/pc/content/",title:"#Title",content:[{selector:".author",weight:1},{selector:".attachment",weight:2},{selector:"#ozoom",weight:3}]},{name:"南方网",url:"https://news.southcn.com/",title:".article_title",content:[{selector:".fl",weight:1},{selector:"#content",weight:2}]},{name:"起点读书",url:"https://read.qidian.com/chapter/",title:".content-wrap",content:".read-content"},{name:"Readhub",url:"https://readhub.cn/topic/",title:".style_title__JEMd0",content:".style_summary__4Z1HV"},{name:"Readhub",url:"https://readhub.cn/topic",title:".style_title__JEMd0",content:".style_summary__4Z1HV"},{name:"爱范儿",url:"http://www.ifanr.com/data/",title:"p.c-single-data__desc",content:"article"},{name:"界面新闻",url:"https://www.jiemian.com/article/",title:".article-header h1",content:".article-content"},{name:"央视网",url:/https?:\/\/news\.cctv\.com\/\d{4}\/(\d{2}\/)+/,title:"#title_area h1",content:"#text_area"},{name:"央视新闻",url:/https:\/\/.+\.cctv\.com\/\d+\//,title:"#title_area h1",content:"#content_area"},{name:"果壳",url:"https://www.guokr.com/article/",title:"#activity-name",content:"#js_content"},{name:"易信",url:"https://yixin.im/official/detail/",title:".m-pic-text-details .text-title",content:{selector:".m-pic-text-details",exclude:[".text-title"]}},{name:"牛客网",url:"https://www.nowcoder.com/discuss/",title:".discuss-title",content:{selector:".post-topic-main",exclude:[".clearfix"]}}],!0),[{name:"21财经",url:"https://m.21jingji.com/article/",title:".titleHead h1",content:[{selector:".newsInfo",weight:1},{selector:".newsDate",weight:2},{selector:".txtContent",weight:3}]},{name:"腾讯体育",url:"https://kbsapp.sports.qq.com/article/",title:".tit",content:".detail-content"},{name:"UC",url:"https://mparticle.uc.cn/article.html?",title:".content-header h1",content:".contentbox"},{name:"顶端新闻",url:"https://static.dingxinwen.com/",content:".zhengwen",timeout:5e3}],!0),g,!0)},(e,t)=>{t.__esModule=!0,t.afterParseWeixin=t.beforeParseWeixin=void 0,t.beforeParseWeixin=function beforeParseWeixin(e){if(void 0===e&&(e=!0),e){["meta","script","body link",".js_tx_video_container","video","iframe"].forEach((function(e){document.querySelectorAll(e).forEach((function(e){e.remove()}))}));["js_mp_video_container_0","page/appmsg_new/combo.css","page/appmsg_new/not_in_mm.css","page/pages/video.css","meta_content","js_pc_weapp_code","js_pc_qr_code","js_preview_reward_author","js_preview_reward_qrcode","js_profile_qrcode","js_toobar3","js_b_comment_panel","js_like_toast","js_b_comment_final","js_loading","js_bottom_ad_area","js_a_like_comment","js_iframetest","js_more_read_area","js_sponsor_ad_area","js_fail","sg_tj","js_frient_cmt_area","js_cmt_area","js_cmt_container","js_minipro_dialog"].forEach((function(e){var t=document.getElementById(e);t&&t.remove()}));[".video_iframe",".code-snippet__line-index"].forEach((function(e){var t,n=document.querySelectorAll(e)||[];null===(t=n.forEach)||void 0===t||t.call(n,(function(e){e.remove()}))}))}!function filterImage(e){void 0===e&&(e=!0);var t=["reward_qrcode_img","profile_avatar","pic_haokan"],n=document.querySelectorAll("img");document.querySelector("#activity-name")&&n.forEach((function(n){var o=n.dataset&&n.dataset.src;o?(n.src=o,"none"===n.style.display&&(n.style.display="initial")):e&&n.remove(),t.forEach((function(t){n.classList.contains(t)&&e&&n.remove()}))}))}(e),e&&function modifyImgArticleContent(){var e=document.querySelector("#page_top_area"),t=(null==e?void 0:e.querySelectorAll(".swiper_item"))||[];if(null==t?void 0:t.length){for(var n=Array.from(t).map((function(e){return e.getAttribute("data-src")})),o="",r=0;r<n.length;r++){var i=n[r];try{new URL(i),o+='<img src="'.concat(i,'" alt="').concat(i,'" />')}catch(e){console.log("微信-图文格式文章，获取图片url失败")}}e.innerHTML=o}}()},t.afterParseWeixin=function afterParseWeixin(e,t){var n;void 0===t&&(t=!0);try{n=e.replace(/(style=.*?;?)color:[\s\S]*?;/g,"$1").replace(/(style=.*?;?)(background-color|background):[\s\S]*?;/g,"$1")}catch(t){n=e}return n}},(e,t)=>{t.__esModule=!0,t.beforeParseZhihu=void 0,t.beforeParseZhihu=function beforeParseZhihu(e){void 0===e&&(e=!0),document.querySelectorAll("img").forEach((function(t){var n=t.dataset&&(t.dataset.actualsrc||t.dataset.original);n?t.src=n:e&&t.remove()}))}},(e,t)=>{t.__esModule=!0,t.beforeParseXhs=void 0,t.beforeParseXhs=function beforeParseXhs(e){void 0===e&&(e=!0);var t=document.getElementById("detail-desc");if(e&&t)for(var n=t.querySelectorAll("a"),o=0;o<n.length;o++){var r=document.createElement("span");r.textContent=n[o].textContent||n[o].innerText;for(var i=0;i<n[o].attributes.length;i++){var a=n[o].attributes[i];r.setAttribute(a.name,a.value)}n[o].parentNode.replaceChild(r,n[o])}}},(e,t)=>{t.__esModule=!0,t.beforeParseXueQiu=void 0,t.beforeParseXueQiu=function beforeParseXueQiu(e){var t=document.getElementsByTagName("h-char");if(e)for(;t.length;){var n=t[0].innerText,o=document.createTextNode(n);t[0].parentNode.replaceChild(o,t[0])}}},function(e,t){var n=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))};t.__esModule=!0,t.getDeepseekContent=void 0;t.getDeepseekContent=function getDeepseekContent(){var e=document.querySelector("#root > div > div:nth-child(2) > div:nth-child(2) > div > div:nth-child(2) > div > div > div:first-child"),t=[],o="";return e&&e.childNodes.forEach((function(e,r){var i;if(r%2==0){var a=null==e?void 0:e.querySelector("div:first-child");a&&(t.push({type:"question",value:a.innerText}),o||(o=a.innerText))}else{var c=(null==e?void 0:e.childNodes)?n([],e.childNodes,!0):[];if(c.length){var l="",s=[],u=c.findIndex((function(e){return e.classList.contains("ds-markdown")}));if(u>1){var h=null==e?void 0:e.querySelector("div:nth-child(".concat(u,")"));if(h&&!h.classList.contains("ds-markdown")){var d=null==e?void 0:e.querySelector("div:nth-child(".concat(u,") > div:first-child"));d&&(l=d.innerText);var f=null==e?void 0:e.querySelector("div:nth-child(".concat(u,") > div:nth-child(2)"));f&&(f.childNodes.forEach((function(e){e.innerText&&(s.push(e.innerText),s.push("<br/>"))})),s.length&&s.pop())}}var p=null==e?void 0:e.querySelector(".ds-markdown"),m=(null===(i=null==p?void 0:p.cloneNode)||void 0===i?void 0:i.call(p,!0))||p,v=null==m?void 0:m.querySelectorAll("span.ds-markdown-cite");null==v||v.forEach((function(e){return e.remove()})),(l||s||m)&&t.push({value:m?m.innerHTML:"",title:l,content:s,type:"answer"})}}})),{link:location.href,list:t,title:o}}},(e,t)=>{t.__esModule=!0,t.getYuanbaoContent=void 0;t.getYuanbaoContent=function getYuanbaoContent(){var e=document.querySelector(".agent-chat__list__content"),t=[],n="";return e&&e.childNodes.forEach((function(e){var o;if(e.classList.contains("agent-chat__list__item--human")){var r=null==e?void 0:e.querySelector(".agent-chat__bubble__content");r&&(t.push({type:"question",value:r.innerText}),n||(n=r.innerText))}if(e.classList.contains("agent-chat__list__item--ai")){var i=null==e?void 0:e.querySelector(".hyc-component-reasoner__think-header"),a=null==e?void 0:e.querySelector(".hyc-component-reasoner__think-content .hyc-common-markdown"),c=[];a&&a.childNodes.forEach((function(e){e.innerText&&c.push(e.innerText)}));var l=null==e?void 0:e.querySelector(".hyc-component-reasoner__text .hyc-common-markdown"),s=(null===(o=null==l?void 0:l.cloneNode)||void 0===o?void 0:o.call(l,!0))||l;if(s){var u=null==s?void 0:s.querySelectorAll("div.hyc-common-markdown__ref-list");null==u||u.forEach((function(e){return e.remove()}))}(i||a||s)&&t.push({type:"answer",value:s?s.innerHTML:"",title:i?i.innerText:"",content:c})}})),{link:location.href,list:t,title:n}}},function(e,t){var n=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))};t.__esModule=!0,t.getTongyiContent=void 0;t.getTongyiContent=function getTongyiContent(){var e=document.querySelector('[class^="scrollWrapper--"] div:nth-child(2)'),t=[],o="";return e&&e.childNodes.forEach((function(e){if(n([],e.classList,!0).some((function(e){return e.startsWith("questionItem--")}))&&(t.push({type:"question",value:e.innerText}),o||(o=e.innerText)),n([],e.classList,!0).some((function(e){return e.startsWith("answerItem--")}))){var r=null==e?void 0:e.querySelector(".tongyi-markdown");r&&t.push({type:"answer",value:r?r.innerHTML:""})}})),{link:location.href,list:t,title:o}}},(e,t)=>{t.__esModule=!0,t.getKimiContent=void 0;t.getKimiContent=function getKimiContent(){var e,t=document.querySelector(".chat-content-list"),n=[],o="";return t&&(null===(e=t.querySelectorAll(".chat-content-item"))||void 0===e||e.forEach((function(e){var t,r=null==e?void 0:e.querySelector(".segment-user"),i=null==e?void 0:e.querySelector(".segment-assistant");if(r&&(n.push({type:"question",value:r.innerText}),o||(o=r.innerText)),i){var a=null==i?void 0:i.querySelector(".k1-research .k1-research-item:last-child"),c=[],l="";if(a){var s=a.querySelector(".researchItem-summary");s&&(l=s.innerText);var u=a.querySelector(".researchItem-detail .markdown");u&&u.childNodes.forEach((function(e){e.innerText&&c.push(e.innerText)}))}var h=null==i?void 0:i.querySelector(".segment-content-box > .markdown-container .markdown"),d=(null===(t=null==h?void 0:h.cloneNode)||void 0===t?void 0:t.call(h,!0))||h,f=null==d?void 0:d.querySelectorAll("span.rag-tag");null==f||f.forEach((function(e){return e.remove()})),(l||c.length||d)&&n.push({type:"answer",value:d?d.innerHTML:"",title:l,content:c})}}))),{link:location.href,list:n,title:o}}},(e,t)=>{t.__esModule=!0,t.getDoubaoContent=void 0;t.getDoubaoContent=function getDoubaoContent(){var e=document.querySelector('[class^="message-list-"] [class^="content-"] [class^="inter-"]'),t=[],n="";return e&&e.childNodes.forEach((function(e){var o,r=null==e?void 0:e.querySelector('[data-testid="send_message"] [data-testid="message_text_content"]'),i=null==e?void 0:e.querySelector('[data-testid="receive_message"] [data-testid="message_content"]'),a=(null===(o=null==i?void 0:i.cloneNode)||void 0===o?void 0:o.call(i,!0))||i;if(r&&(t.push({type:"question",value:r.innerText}),n||(n=r.innerText)),a){var c=a.querySelectorAll('img[aria-hidden="true"], img[data-testid="in_painting_picture"], picture>source, span>span.ref_content_circle');null==c||c.forEach((function(e){return e.remove()}));var l=a.querySelectorAll("img");null==l||l.forEach((function(e){var t=e,n=e.parentNode;if(n){for(;n&&"BODY"!==n.nodeName&&"DIV"!==n.nodeName;)n=(t=n).parentNode;if(n&&n!==e.parentNode)try{t.nextSibling?n.insertBefore(e,t.nextSibling):n.appendChild(e)}catch(e){}}})),t.push({type:"answer",value:a.innerHTML})}})),{link:location.href,list:t,title:n}}},(e,t)=>{t.__esModule=!0,t.getYiyanContent=void 0;t.getYiyanContent=function getYiyanContent(){var e=document.querySelector("#card_list_id"),t=[],n="";return e&&Array.from(e.querySelectorAll(".dialogue_card_item")).reverse().forEach((function(e){var o=null==e?void 0:e.querySelector("#question_text_id"),r=null==e?void 0:e.querySelector("#answer_text_id"),i=(null==r?void 0:r.parentNode)||r;o&&(t.push({type:"question",value:o.innerText}),n||(n=o.innerText)),i&&t.push({type:"answer",value:i.innerHTML})})),{link:location.href,list:t,title:n}}},(e,t,n)=>{t.__esModule=!0,t.beforeParseJianshu=void 0;var o=n(15);t.beforeParseJianshu=function beforeParseJianshu(e){void 0===e&&(e=!0),document.querySelectorAll("img").forEach((function(t){if(!t.getAttribute("src")){var n=(0,o.imgGetDataSrc)(t);n?t.src=n:e&&t.remove()}}))}},(e,t)=>{function imgGetDataSrc(e){return e.getAttribute("data-src")||e.getAttribute("data-original-src")}t.__esModule=!0,t.formatAIData=t.after=t.before=t.imgGetDataSrc=void 0,t.imgGetDataSrc=imgGetDataSrc,t.before=function before(e){void 0===e&&(e=!0),e&&["audio","video","svg","script"].forEach((function(e){document.querySelectorAll(e).forEach((function(e){e.remove()}))})),document.querySelectorAll("img").forEach((function(t){var n=t.getAttribute("src");if(!imgGetDataSrc(t)){if(!n)return void(e&&t.remove());if(n.indexOf("data:image")>-1)return;if(!n.startsWith("http")&&!n.includes(location.host)){if(n.startsWith("//"))return void t.setAttribute("src","".concat(location.protocol).concat(n));t.setAttribute("src",new URL(n,window.location.href).href)}}}))},t.after=function after(){var e=document.querySelectorAll("img"),setImgSize=function(e){var t=e.offsetWidth,n=e.offsetHeight;t&&(e.setAttribute("width","".concat(t,"px")),e.setAttribute("height","".concat(n,"px")))};e.forEach((function(e){e.complete&&0!==e.naturalWidth?setImgSize(e):e.addEventListener("load",(function(){setImgSize(e)}))}))},t.formatAIData=function formatAIData(e){var t=e.link,n=e.createTime,o=void 0===n?Date.now():n,r=e.list,i=void 0===r?[]:r;return'<div data-alias="layout"><p style="white-space:pre-wrap;line-height:1.75;font-size:14px;text-align:left;"><span style="font-weight: bold;">原文链接：</span><a href="'.concat(t,'" ><span style="text-decoration: underline;color: rgb(3, 102, 214);">').concat(t,'</span></a></p><p style="white-space:pre-wrap;line-height:1.75;font-size:14px;text-align:left;"><span style="font-weight: bold;">保存时间：</span>').concat(function formatTimestamp(e){var t=new Date(e),pad=function(e){return e<10?"0"+e:e},n=t.getFullYear(),o=pad(t.getMonth()+1),r=pad(t.getDate()),i=pad(t.getHours()),a=pad(t.getMinutes()),c=pad(t.getSeconds());return"".concat(n,"-").concat(o,"-").concat(r," ").concat(i,":").concat(a,":").concat(c)}(o),"</p></div>").concat(i.map((function(e){var t;return"question"===e.type?'<p style="white-space:pre-wrap;line-height:1.75;font-size:14px;text-align:left;"></p><p style="white-space:pre-wrap;line-height:1.75;font-size:14px;text-align:right;justify-content:flex-end"><span style="font-weight:bold">'.concat(e.value,"</span></p>"):"answer"===e.type?"".concat(e.title?'<p style="white-space:pre-wrap;line-height:1.75;font-size:14px;"><span style="font-weight:bold">'.concat(e.title,"</span></p>"):"").concat((null===(t=e.content)||void 0===t?void 0:t.length)?"<quote>".concat(e.content.map((function(e){return'<p style="white-space:pre-wrap;line-height:1.75;font-size:14px;text-align:left;">'.concat(e,"</p>")})).join(""),"</quote>"):"").concat(e.value):""})).join(""))}},(e,t)=>{t.__esModule=!0,t.getMainContent=void 0;var n=["HTML","HEAD","META","TITLE","SCRIPT","STYLE","LINK","IMG","FORM","INPUT","BODY","BUTTON","TEXTAREA","SELECT","OPTION","LABEL","IFRAME","UL","OL","LI","DD","DL","DT","A","OBJECT","PARAM","EMBED","NOSCRIPT","EM","B","STRONG","I","INS","BR","HR","PRE","H1","H2","H3","H4","H5","CITE"],o=/comment|combx|disqus|foot|header|menu|rss|shoutbox|sidebar|sponsor/i,r=/article|entry|post|body|column|main|content/i,i=/comment/i,a=/\S/i,c={checkTagName:function(e){return-1===this.indexOf(n,e.tagName)},checkNotBlank:function(e){return Boolean(a.test(e.nodeValue))},checkVisibility:function(e){return!("hidden"===this.css(e,"visibility")||"none"===this.css(e,"display")||parseInt(this.css(e,"height"))<=0||parseInt(this.css(e,"width"))<=0)},checkSize:function(e){return e.offsetWidth>300&&e.offsetHeight>150},checkMinorContent:function(e){return Boolean(i.test(e.id+" "+e.className))},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},indexOf:function indexOf(e,t){if(e.indexOf)return e.indexOf(t);var n=-1;return this.each(e,(function(e){if(this[e]===t)return n=e,!1})),n},each:function(e,t,n){if(null!=e){if(void 0===e.length||this.isFunction(e)){for(var o in e)if(e.hasOwnProperty(o)&&!1===t.call(n||e[o],o,e[o]))break}else for(var r=0;r<e.length&&!1!==t.call(n||e,r,e[r]);r++);return e}},css:function(e,t){if("string"==typeof t)return function(e,t){var n="";if("float"===t&&(t=document.defaultView?"float":"styleFloat"),e.style[t])n=e.style[t];else if(e.currentStyle)n=e.currentStyle[t];else if(document.defaultView&&document.defaultView.getComputedStyle){t=t.replace(/([A-Z])/g,"-$1").toLowerCase();var o=document.defaultView.getComputedStyle(e,"");n=o&&o.getPropertyValue(t)}else n=null;if("auto"!==n&&-1===n.indexOf("%")||"width"!==t.toLowerCase()&&"height"!==t.toLowerCase()||"none"===e.style.display||-1===n.indexOf("%")||(n=e["offset"+t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()]+"px"),"opacity"===t)try{n=e.filters["DXImageTransform.Microsoft.Alpha"].opacity,n/=100}catch(t){try{n=e.filters("alpha").opacity}catch(e){}}return n}(e,t);this.each(t,(function(t,n){e.style[t]=n}))},trim:function(e){return"string"!=typeof e?e:e.replace(/^\s+/,"").replace(/\s+$/,"")},isHTTPS:"https:"===document.location.protocol},l=function(){function Section(e){this.elem=e,this._texts=this.getAllTexts(e,6),this.weight=this.calcWeight()}return Section.prototype.getAllTexts=function(e,t){var n=[];if(t>0)for(var o=e.firstChild;o;){if(3===o.nodeType&&c.checkNotBlank(o)){var r=o.parentNode||{},i=r.parentNode||{};c.checkMinorContent(r)||c.checkMinorContent(i)||!c.trim(o.nodeValue)||n.push(o)}else 1===o.nodeType&&c.checkTagName(o)&&(n=n.concat(this.getAllTexts(o,t-1)));o=o.nextSibling}return n},Section.prototype.calcWeight=function(){return this.calcStructWeight()*this.calcContentWeight()},Section.prototype.calcStructWeight=function(){for(var e=0,t=0,n=this._texts.length;t<n;t++){var o=this._texts[t],r=c.trim(o.nodeValue).length,i=1;if(!(r<20)){for(var a=o.parentNode;a&&a!=this.elem;a=a.parentNode)i-=.1;e+=Math.pow(i*r,1.25)}}return e},Section.prototype.calcContentWeight=function(){for(var e=1,t=this.elem;t;t=t.parentNode)t.id&&(r.test(t.id)&&(e+=.4),o.test(t.id)&&(e-=.8)),t.className&&(r.test(t.className)&&(e+=.4),o.test(t.className)&&(e-=.8));return e},Section}(),s=function(){function Page(e){this.contentDocument=e}return Page.prototype.getMainSection=function(){var e=null,t=this._getAllSection();if(!t||!t.length)return null;t.sort((function(e,t){return t.weight-e.weight}));for(var n=0;n<2&&(e=t[0],t.splice(0,1),e&&e.weight<500&&(e=null),!e);n++);return e||null},Page.prototype._getAllSection=function(){for(var e=Array.from(this.contentDocument.getElementsByTagName("*")),t=[];e.length;){var n=e.shift();if("IFRAME"!==n.tagName)c.checkTagName(n)&&c.checkSize(n)&&c.checkVisibility(n)&&(t[t.length]=new l(n));else if(n.contentDocument){var o=Array.from(n.contentDocument.getElementsByTagName("*"));e.push.apply(e,o)}}return t},Page}();t.getMainContent=function(){var e;return(null===(e=new s(window.document).getMainSection())||void 0===e?void 0:e.elem.innerHTML)||document.body.innerHTML}}],t={};var n=function __webpack_require__(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.exports}(0);collectParser=n})();