shu810687117 发表于 2023-12-10 13:30

【第三弹】油猴解析某学术网站(weipu)文章下载链接

本帖最后由 shu810687117 于 2023-12-10 13:42 编辑

如果出现获取链接失败,可以等等再试,对大家有帮助的话,后续继续更新其他站
更新说明
[*]修复了上个版本wanfang解析失败的问题
[*]更新了对weipu的下载支持
[*]当前支持zhiwang、wanfang、weipu
[*]最新比较忙,更新比较慢,后续将持续更新其他站


简介:

[*]使用油猴脚本在网页上插入按钮,按钮获取到网页上文件的ID,来调用外部接口实现免登录对文章进行下载。有问题欢迎回帖,看到会回复的。
[*]如果进入网页有按钮显示是正常,只有文章详情页面才会渲染按钮,有按钮说明脚本启动成功了。成功下载会弹出新窗口,如果新窗口被阻止了,需要允许一下。自己测试了火狐和edga浏览器。

使用方法:
[*]访问油猴脚本的链接一键安装(推荐)
[*]下载附件复制到油猴中
[*]复制脚本后,在油猴中新建脚本粘贴-保存。

注意:
[*]如果不成功,检查一下油猴插件是不是有访问所有URL的权限。
[*]不过当前接口有限制一天只能成功下载三次,大家自行使用吧。







**** Hidden Message *****




Pojawa 发表于 2023-12-12 05:21

本帖最后由 Pojawa 于 2023-12-12 06:08 编辑

shu810687117 发表于 2023-12-11 09:02
没注意是在哪里的
重新读了一遍重新改了,很好奇你的代码风格,自己review的时候不累吗…………



// ==UserScript==
// @name         学术下载解析工具-知网-万方-维普
// @namespace    http://tampermonkey.net/
// @version      1.2-e2
// @description
// @author       XiaoM
// @match      *://*.cnki.net/kns8s/*
// @match      *://*.cnki.net/kcms2/*
// @match      *://d.wanfangdata.com.cn/*
// @match      *://lib.cqvip.com/Qikan/Article/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant      unsafeWindow
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js
// @require      https://unpkg.com/layui@2.8.18/dist/layui.js
// @connect      xuexi365.top
// @connect      wanfangdata.com.cn
// @grant GM_cookie

// ==/UserScript==

const xuexi365api = "http://www.xuexi365.top/api_zw/RTVC875CY";
const orderidRegex = /order\?id=(.*)/i;
const type2cn = {
    help: "如何使用", download: "帮我下载",
    download_caj: "下载CAJ", download_pdf: "下载PDF",
    download_wf: "下载PDF", download_vp: "下载PDF"
};

(function () {

    /* globals jQuery, $, waitForKeyElements */
    var $ = unsafeWindow.jQuery;

    // this.$ = this.jQuery = jQuery.noConflict(true);

    // @require file://D:\Microsoft VS Code\project\ZW下载\index.js
    {
      let link = document.createElement('link');
      link.rel = "stylesheet"
      link.href = 'https://unpkg.com/layui@2.8.18/dist/css/layui.css';
      document.head.appendChild(link);
    }

    // var script = document.createElement('script');
    // script.src = 'http://www.xuexi365.top/msg.js?'+Date.now();
    // document.head.appendChild(script);

    let help_content = "";
    fetch("http://www.xuexi365.top/msg.json?" + Date.now(), {anonymous: true,}).then(res => res.json()).then(json => {
            help_content = decodeURIComponent(json.updata_content + json.link_content + json.use_content);
            if (json.msg_active) {
                layer.open({
                  type: 1,
                  offset: ['16px', '16px'], // 详细可参考 offset 属性
                  id: 'ID-demo-layer-offset-1', // 防止重复弹出
                  content: '<div style="padding: 16px;">' + json.msg_content + '</div>',
                  area: '240px',
                  title: false,
                  btn: ['确定 [ 8秒后关闭 ]'],
                  time: 8000,
                  anim: 2,
                  //offset:'rb',
                  btnAlign: 'c', // 按钮居中
                  shade: 0, // 不显示遮罩
                  btn1: function () {
                        layer.closeAll();
                  }
                });
            }
      });


    function download(url, data) {
      const loadIndex = layer.msg('正在获取下载地址', {
            icon: 16, shade: 0.11,
            time: 300000, shadeClose: false
      });

      //console.log({dataFilename,dataDbname,orderid})
      const headers = new Headers();
      headers.set("Accept", "application/json, text/javascript, */*; q=0.01");
      headers.set("Content-Type", "application/json; charset=utf-8");
      fetch(url, {
            method: "POST", data: data, anonymous: true, headers: headers,
      }).then(res => res.json()).then(json => {

            try {
                json = JSON.parse(res.responseText);
            } catch (err) {
                console.log(err);
            }

            if (!$.isEmptyObject(json.data.code) && json.data.code > 0) {
                layer.alert(json.data.msg || '下载地址获取成功');
                window.open(json.data.url, "_blank");
            } else {
                layer.alert(json.data.msg || "网络错误,可能接口出现问题,请联系管理源");
            }
            layer.close(loadIndex);

      }).catch(err => {
            layer.close(loadIndex);
            layer.alert('请求异常', err);
      });
    }


    layui.use(function () {
      const util = layui.util;

      let bars = [];

      if (location.href.includes('cnki.net/kns8s')) {
            //查询页面
      }

      if (location.href.includes('cnki.net/kcms2')) {
            //详情页面
            bars = [{ // 定义可显示的 bar 列表信息 -- v2.8.0 新增
                type: 'help',
                style: 'background-color: #ff5722',
                icon: 'layui-icon-app'
            }, {
                type: 'download_caj',

                icon: 'layui-icon-download-circle',
                style: 'background-color: #3594ff;'
            }, {
                type: 'download_pdf',

                icon: 'layui-icon-download-circle',
                style: 'background-color: #5d9e2b;'
            }]
      }

      if (location.href.includes('d.wanfangdata.com.cn')) {
            //万方
            bars = [{ // 定义可显示的 bar 列表信息 -- v2.8.0 新增
                type: 'help',
                icon: 'layui-icon-app',
                style: 'background-color: #ff5722'
            }, {
                type: 'download_wf',
                icon: 'layui-icon-download-circle',
                style: 'background-color: #5d9e2b;'
            }]
      }

      if (location.href.includes('lib.cqvip.com')) {
            //维普
            bars = [{ // 定义可显示的 bar 列表信息 -- v2.8.0 新增
                type: 'help',
                icon: 'layui-icon-app',
                style: 'background-color: #ff5722'
            }, {
                type: 'download_vp',
                icon: 'layui-icon-download-circle',
                style: 'background-color: #5d9e2b;'
            }]
      }


      // 自定义固定条
      util.fixbar({
            bars: bars,
            // bar1: true,
            // bar2: true,
            default: false, // 是否显示默认的 bar 列表 --v2.8.0 新增
            // bgcolor: '#393D52', // bar 的默认背景色
            css: {bottom: 200},
            // target: '#target-test', // 插入 fixbar 节点的目标元素选择器
            // duration: 300, // top bar 等动画时长(毫秒)
            on: { // 任意事件 --v2.8.0 新增
                mouseenter: function (type) {
                  layer.tips(type2cn, this, {tips: 4, fixed: true});
                },
                mouseleave: ()=> layer.closeAll('tips'),
            },
            // 点击事件
            click: function (type) {
                console.log(this, type);

                if (type === 'help') {
                  layer.open({
                        type: 1,
                        offset: 'l',
                        anim: 'slideRight', // 从左往右
                        // area: ['420px', '240px'], // 宽高
                        area: ['320px', '100%'],
                        shade: 0.1,
                        shadeClose: true,
                        id: 'ID-demo-layer-direction-l',
                        content: help_content
                  });
                }

                if (type === 'download') {

                  if (1 !== $("#selectCount").text()) {
                        layer.tips("请查看这里,是否选定的不是一个", "#selectCount", {
                            tips: , time: 10000
                        });
                        layer.msg('您没有选择或则选择了多个!');
                        return
                  }

                  const FileNameSNZKPT = localStorage.getItem('FileNameSNZKPT');
                  const input = $('input').val()
                  if (input !== FileNameSNZKPT) {
                        layer.msg('请查看是否选择的内容不在本页面!');
                        return;
                  }

                  //children('.icon-collect').attr('data-filename')
                  const dataFilename = $('input').parent("td").parent("tr").find('.icon-collect').attr("data-filename");
                  const dataDbname = $('input').parent("td").parent("tr").find('.icon-collect').attr("data-dbname");
                  let orderid = $('input').parent("td").parent("tr").find('.downloadlink').attr("href");

                  let match = orderidRegex.exec(orderid);
                  orderid = match && match || orderid;

                  layer.confirm('这里下载可能是CAJ格式,需要PDF需要进入文章详情页点击按钮,确定要下载码?', {icon: 3}, function () {
                        let data = JSON.stringify({
                            'dataFilename': dataFilename,
                            'dataDbname': dataDbname,
                            'orderId': orderid
                        })
                        download(xuexi365api, data)
                  }, function () {
                        // layer.msg('点击取消的回调');
                  });
                }

                if (type === 'download_caj' || type === 'download_pdf') {

                  const dataFilename = $('#param-filename').val();
                  const dataDbname = $('#param-dbname').val();
                  let orderid = $('#' + type.replace('download_','') + 'Down').attr("href");

                  const match = orderidRegex.exec(orderid);
                  orderid = match && match || orderid;

                  let data = JSON.stringify({
                        'dataFilename': dataFilename,
                        'dataDbname': dataDbname,
                        'orderId': orderid
                  })

                  download(xuexi365api, data)
                }

                if (type === 'download_wf') {
                  //var downloadlink=$('.download .buttonItem').attr("href");
                  const downloadlink = $('.download').attr("href");
                  console.log(downloadlink);

                  fetch(downloadlink, {method: "HEAD", anonymous: true,}).then(res => res.json()).then(json => {
                        const url = json.finalUrl;
                        console.log("url:", url)
                        // 解析URL参数
                        const params = new URL(url);
                        // 获取指定参数的值
                        const paramValue = params.searchParams.get("service");
                        // ??????????????????????????????????
                        console.log('service', paramValue);

                        let queryurl = "http://www.xuexi365.top/api_wf/EDIDN5D5DP"
                        download(queryurl, JSON.stringify({'url': downloadlink}));
                  }).catch(err => {
                        layer.close(loadIndex);
                        layer.alert('请求异常', err);
                  });

                }

                if (type === 'download_vp') {
                  //var downloadlink=$('.download .buttonItem').attr("href");
                  // var downloadlink = $('.download').attr("href");
                  // console.log(downloadlink)

                  // let queryurl = "http://www.xuexi365.top/api_vp/LDIDN0D5DP"
                  // let data = JSON.stringify({ 'id': downloadlink,'info':'' })
                  // download(queryurl, data)
                  const fullText = $('.icon-free').parent('a').attr('onclick')
                  const startIndex = fullText.indexOf("(") + "(".length;
                  const endIndex = fullText.indexOf(")", startIndex);
                  const extractedText = fullText.substring(startIndex, endIndex);
                  const str_arr = extractedText.split(',');
                  const id = str_arr.replace(/'/g, "");
                  const info = str_arr.replace(/'/g, "");

                  //console.log(id,info)

                  const queryurl = "http://www.xuexi365.top/api_vp/LDIDN0D5DP"
                  download(queryurl, JSON.stringify({id, info}));
                }
            }
      });

      //隐藏知网原本滚动条
      $('.fixedbar').hide();
      $('.anxs-left-bom').hide();
      $('.web-tools').hide();
    });
})();


longwu1031 发表于 2023-12-10 13:53

感谢分享,

shu810687117 发表于 2023-12-11 19:04

王雪峰 发表于 2023-12-11 16:54
还是大佬,知网,万方,现在的维普

有用给个好评和推荐哈,更新的动力

拣尽寒枝不肯栖 发表于 2023-12-15 14:33

我这里的情况是,知网和万方没有下载按键;维普还有。已经一试再试,请楼主也排查看看,谢谢了

vethenc 发表于 2023-12-10 13:42

感谢分享,这么优秀还这么努力{:300_966:}

shu810687117 发表于 2023-12-10 13:42

vethenc 发表于 2023-12-10 13:42
感谢分享,这么优秀还这么努力

感谢感谢

DKBook 发表于 2023-12-10 13:44

厉害啊,大佬!

jinmouyuzhao 发表于 2023-12-10 13:45

厉害啊大佬

pfd8838 发表于 2023-12-10 13:45


感谢分享,这么优秀还这么努力

bigsea 发表于 2023-12-10 13:55

好东东下载看看

shupuyun 发表于 2023-12-10 14:02

谢谢分享!

axtx123 发表于 2023-12-10 14:06

感谢大佬,看一看
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【第三弹】油猴解析某学术网站(weipu)文章下载链接