【第三弹】油猴解析某学术网站(weipu)文章下载链接
本帖最后由 shu810687117 于 2023-12-10 13:42 编辑如果出现获取链接失败,可以等等再试,对大家有帮助的话,后续继续更新其他站
更新说明
[*]修复了上个版本wanfang解析失败的问题
[*]更新了对weipu的下载支持
[*]当前支持zhiwang、wanfang、weipu
[*]最新比较忙,更新比较慢,后续将持续更新其他站
简介:
[*]使用油猴脚本在网页上插入按钮,按钮获取到网页上文件的ID,来调用外部接口实现免登录对文章进行下载。有问题欢迎回帖,看到会回复的。
[*]如果进入网页有按钮显示是正常,只有文章详情页面才会渲染按钮,有按钮说明脚本启动成功了。成功下载会弹出新窗口,如果新窗口被阻止了,需要允许一下。自己测试了火狐和edga浏览器。
使用方法:
[*]访问油猴脚本的链接一键安装(推荐)
[*]下载附件复制到油猴中
[*]复制脚本后,在油猴中新建脚本粘贴-保存。
注意:
[*]如果不成功,检查一下油猴插件是不是有访问所有URL的权限。
[*]不过当前接口有限制一天只能成功下载三次,大家自行使用吧。
**** Hidden Message *****
本帖最后由 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();
});
})();
感谢分享, 王雪峰 发表于 2023-12-11 16:54
还是大佬,知网,万方,现在的维普
有用给个好评和推荐哈,更新的动力 我这里的情况是,知网和万方没有下载按键;维普还有。已经一试再试,请楼主也排查看看,谢谢了 感谢分享,这么优秀还这么努力{:300_966:} vethenc 发表于 2023-12-10 13:42
感谢分享,这么优秀还这么努力
感谢感谢 厉害啊,大佬! 厉害啊大佬
感谢分享,这么优秀还这么努力 好东东下载看看 谢谢分享! 感谢大佬,看一看