配合程序员手册插件编写的网页截取命令

方便使用程序员手册插件制作自定义的手册文件,写了这个一键截取网页正文的快捷指令,类似于一些网络剪藏的功能,但是更加灵活。该脚本根据以下配置文件文件进行截取:
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)
}

你可能感兴趣的:(我的原创Utools工具集)