方便使用程序员手册插件制作自定义的手册文件,写了这个一键截取网页正文的快捷指令,类似于一些网络剪藏的功能,但是更加灵活。该脚本根据以下配置文件文件进行截取:
key:用来识别网址。
reg:用来匹配网页正文的选择器。
replace:定义网址某些内容的替换规则。
main_config:所有网页都执行的一些替换规则,如下面就是去掉网页中的样式和span标签。
{
"web_contents_flags": [
{
"key": ".*jianshu.*",
"reg": "article._2rhmJa",
"replace": [
{
"type":"string",
"rp_src": "data-original-src",
"rp_target": "src"
}
]
},
{
"key": ".*blog.csdn.*",
"reg": "div.blog-content-box"
},
"main_config": {
"clearflags":["< *\/ *span *>","< *span *>","style=\"(.*?)\""]
}
}
指令代码
var https = require("https")
function loadPage(url) {
var pm = new Promise(function(resolve, reject) {
https.get(url, function(res) {
var html = '';
res.on('data', function(d) {
html += d.toString()
});
res.on('end', function() {
resolve(html);
});
}).on('error', function(e) {
reject(e)
});
});
return pm;
}
//清除span style
function clearHtml(htmlStr) {
let clearflags = mainConfig.clearflags
console.log(clearflags)
clearflags.forEach((flag, index) => {
let style_reg = new RegExp(flag, 'gi')
htmlStr = htmlStr.replace(style_reg, '')
})
return htmlStr
}
utools.setExpendHeight(100)
var url = '{{BrowserUrl}}'
let configPath = process.env['UtoolsCoreData'] + '/Data/websiteMainContentsMap.json'
let file = fs.readFileSync(configPath)
let jsonObj = JSON.parse(file)
let cssArr = jsonObj.web_contents_flags
let mainConfig = jsonObj.main_config
//检验网址是否拥有配置文件
let regItem = null
cssArr.forEach((item, index) => {
var reg = new RegExp(item.key)
if (reg.test(url)) {
regItem = item
return false
}
})
if (regItem != null) {
loadPage(url).then(function(content) {
//获取主体
var dom = quickcommand.htmlParse(content)
var htmlStr = dom.querySelector(regItem.reg).outerHTML
//替换特定网页特定
try{
replaceArr = regItem.replace
if (replaceArr != null && replaceArr.length > 0) {
replaceArr.forEach((item, index) => {
if (item.type == 'selector') {
let contentForRp = dom.querySelector(item.rp_src).outerHTML
// console.log(contentForRp)
if(contentForRp != null){
htmlStr = htmlStr.replace(contentForRp, '')
}
} else {
let rg = new RegExp(item.rp_src, 'gi')
htmlStr = htmlStr.replace(rg, item.rp_target)
}
})
}
}catch(err){
// console.log(err)
quickcommand.showMessageBox(err,'error')
}
//清除无效的标记和样式
htmlStr = clearHtml(htmlStr)
console.log(htmlStr)
electron.clipboard.writeText(htmlStr)
quickcommand.showMessageBox('成功复制正文')
quickcommand.setTimeout(() => {
utools.outPlugin()
}, 1500)
})
} else {
quickcommand.showMessageBox('不存在配置文件!')
quickcommand.setTimeout(() => {
utools.outPlugin()
}, 1500)
}