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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值