tampermonkey插件下载国家标准文件

#创作灵感#

         最近在一个系统招标正文中看到了一些国家标准,想要把文章下载下来,方便查阅,但是“国家标准全文公开系统”网站只提供了在线预览功能,没有提供下载功能,但是公司又需要文件,在网上找了一些办法,都没有成功。经过一些实践,发现通过tampermonkey插件写脚本可以获取,记录下来,分享给更多的人。

一、哪里可以免费获取“国家标准”文件?

(1)全国标准信息公共服务平台网址:https://std.samr.gov.cn/

(2)国家标准全文公开系统:https://openstd.samr.gov.cn/bzgk/gb/index

二、如何下载在线预览的国标(以Edge浏览器为例)?

第一步:点击“扩展-获取Microsoft Edge扩展”;

第二步:搜索tampermonkey插件;

第三步:获取并添加tampermonkey(篡改猴,又称“油猴”);

第四步:添加成功页面,在扩展处可看到安装的tampermonkey;

第五步:点击tampermonkey,选择“添加新脚本”;

第六步:将下面这段代码复制到脚本编辑页面,Ctrl+S保存;

脚本:

// ==UserScript==

// @name        国标下载

// @namespace    http://tampermonkey.net/

// @version      0.1

// @description  try to take over the world!

// @author      wcd

// @match        http://c.gb688.cn/*

// @icon        https://www.google.com/s2/favicons?sz=64&domain=gb688.cn

// @grant        none

// @require      https://code.jquery.com/jquery-3.6.0.min.js

//https://openstd.samr.gov.cn/bzgk/gb/index 国家标准全文公开系统

// ==/UserScript==

(function() {

    'use strict';

$(function(){

    $("head").append('<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>');

    let my_script=`<script>

            function px2Num(px) {

                return Number(px.split("px")[0].toString());

            }

            function getPages(){

                if( $("canvas[id^=canvas_]").length > 0 ) {

                    $("canvas[id^=canvas_]").delete();

                }

                var baseurl = "http://c.gb688.cn/bzgk/gb/";

                var pagecount = $("div.page").length;

                var pages = new Array(pagecount);

                var pagebg = new Array(pagecount);

                var title = $("title").text().split("|")[1].toString().trim();

                var pheight = $("#0").css("height");

                var pwidth = $("#0").css("width");

                $(".page").each(function(i, elem) {

                    if (elem.hasAttribute("bg")) {

                        pagebg[i] = elem.getAttribute("bg");

                    } else {

                        pagebg[i] = $(elem).children("span").first().css("background-image").split('"')[

                            1].split(/\\//).slice(-1)[0];

                    }

                });

                //拼合图片

                $(".page").each(function(i, elem) {

                    var canvasclone = $("canvas#canvas").clone();

                    canvasclone.attr("id","canvas_"+i).css("background-color","#FFFFFFFF");

                    $("#newimg").append(canvasclone);

                    var canvas = document.getElementById('canvas_'+i);

                    var ctx = canvas.getContext('2d');

                    ctx.fillStyle="white";

                    ctx.fillRect(0,0,px2Num(pwidth), px2Num(pheight));

                    $("#imgContainer").append("<img id=img_" + i + " src='" + baseurl+pagebg[i] + "' />")

                    var image = document.getElementById('img_'+i);

                    image.addEventListener('load', e => {

                        $(elem).children("span").each(function(j,s){

                            ctx.drawImage(image, -px2Num($(s).css("background-position-x")), -px2Num($(s).css("background-position-y")),  119, 168,

                            $(s).attr("class").split('-')[1]*119, $(s).attr("class").split('-')[2]*168, 119, 168);

                        });

                    });

                });

            }

            function isimgComplete(imgs){

                //$("img[id^=img_]")

                flag = true;

                for(i=0;i<imgs.length;i++){

                    flag=flag && imgs[i].complete;

                }

                return flag;

            }

            function downloadPDF(){

                if( $("canvas[id^=canvas_]").length == 0 ) {

                    alert("请先点击获取页面!");

                    return;

                }

                var images = $("img[id^=img_]");

                //alert(isimgComplete(images));

                if(!isimgComplete(images)){

                    alert("页面尚未提取完,稍后再试");

                    return;

                }

                var pheight = $("#0").css("height");

                var pwidth = $("#0").css("width");

                const { jsPDF } = window.jspdf;

                const pdf = new jsPDF('p','px',[px2Num(pwidth), px2Num(pheight)]);

                var title = $("title").text().split("|")[1].toString().trim();

                let [imgX, imgY] = [595.28, 841.89];

                let imgHeight = imgX / (px2Num(pwidth) / px2Num(pheight));

                $("canvas[id^=canvas_]").each(function(i,e){

                    pdf.addImage(document.getElementById('canvas_'+i).toDataURL('image/jpeg'), 'jpeg', 0, 0, px2Num(pwidth), px2Num(pheight), '', 'MEDDIUM');

                    //pdf.addImage(document.getElementById('canvas_'+i).toDataURL('image/png'), 'jpeg', 0, 0, imgX, imgHeight, '', 'SLOW');

                    pdf.addPage();

                });

                let targetPage = pdf.internal.getNumberOfPages();

                pdf.deletePage(targetPage); // 删除最后一页

                pdf.save(title + ".pdf");

            }

            function downloadPDF0(){

                while($("canvas[id^=canvas_]").length < $(".page").length){

                    setTimeout(function(){

                    },1000);

                }

            }

        </script>`;

    let source_img = `

        <div id="canvas_container">

            <input type="button" value="获取页面" οnclick="getPages()"/>

            <input type="button" value="下载pdf" οnclick="downloadPDF()"/>

        </div>

        <div id="imgContainer" style="display:none;"><img id="source" src=""></div>

        <div id="newimg" width="1190px"></div>

        <canvas id="canvas" width="1190px" height="1680px" style="display:none;"></canvas>`;

    //let btn = `<input type="button" value="获取页面" οnclick="getPages()"/>

              //<input type="button" value="下载pdf" οnclick="downloadPDF()"/>`;

    let style = `

        <style>

            #canvas_container {

                position: fixed;

                height: 30px;

                width: 150px;

                top: 50px;

                left: 10px;

                border: 1px;

                /*background-color: #00ff0099;*/

                border-radius: 3px;

            }

        </style>

    `;

    $("head").append(style);

    $("body").append(source_img);

    $("body").append(my_script);

    //$("body").append(btn);

    //alert($("title").text());

});

})();

最后,点击在线预览的国标,会在左上角看到“获取页面”和“下载pdf”按钮;

点击“获取页面”,再点击“下载pdf”,就可以把文件下载到本地了。

三、避坑!!!这些方法不要再用了,没用。

方法1:直接Ctrl+S保存当前页面,

再次访问还是需要网络,大部分情况下,一直处于加载中,无法浏览;

方法2:使用开发者工具,选择“网络-XHR”,就可以看到pdf文件。

但如果深扒的话,你会发现,国标一个页面由很多不完整的内容组成,是看不到文件的;

方法3:使用开发者工具,打开控制台(console),输入PDFViewerApplication.save() 或者

PDFViewerApplication.download()就能下载。

开发者应该都知道,我们并没有创建PDFViewerApplication启动器,又怎么可以下载呢?

方法4:使用开发者工具,直接在控制台中写脚本,不可行,直接手写代码,不能复制粘贴;

方法5:安装tampermonkey后,使用下面这段代码,我试过,不可行,具体原因没有深究;

// ==UserScript==

// @name         gb688下载

// @namespace    https://github.com/lzghzr/TampermonkeyJS

// @version      1.0.7

// @author       lzghzr, chorar

// @description  下载gb688.cn上的国标文件

// @supportURL  https://github.com/lzghzr/TampermonkeyJS/issues

// @match        *://*.gb688.cn/bzgk/gb/showGb*

// @match        *://*.samr.gov.cn/bzgk/gb/showGb*

// @connect     c.gb688.cn

// @license     MIT

// @grant        none

// ==/UserScript==

(function() {

    'use strict';

    const online = document.getElementById("toolbarViewerRight");

    if (online === null) {

        throw '获取页面元素失败!';

    }

    const download = document.querySelector('button.toolbarButton.download');

    if (download !== null) {

        download.remove();

    }

    const GBdownload = document.createElement('button');

    GBdownload.title = '下载';

    GBdownload.className = 'toolbarButton download';

    GBdownload.innerHTML = '<span>下载</span>';

    online.insertAdjacentElement('afterbegin', GBdownload);

    GBdownload.onclick = async () => {

        PDFViewerApplication.pdfDocument.saveDocument(PDFViewerApplication.pdfDocument.annotationStorage).then(res =>{

            const blob = new Blob([res], { type: "application/pdf" });

            const blobUrl = URL.createObjectURL(blob);

            const a = document.createElement("a");

            a.href = blobUrl;

            a.target = "_parent";

            a.download = document.title.substr(document.title.indexOf('|')+1).replace("/", '_')+".pdf";

            (document.body || document.documentElement).appendChild(a);

            a.click();

        }).catch(err =>{

            console.log(err)

        });

    };

})();

方法6:利用浏览器的另存为功能,效果同方法1;

方法7:利用浏览器的打印功能,保存到本地的只有1页,且没有任何内容;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gin项目部署到服务器并后台启动

文章目录 一、安装go语言环境的方式1.下载go安装包&#xff0c;解压&#xff0c;配置环境变量2.压缩项目上传到服务器并解压3.来到项目的根目录3.开放端口&#xff0c;运行项目 二、打包的方式1.在项目的根目录下输入以下命令2.把打包好的文件上传到服务器3.部署网站4.ssl证书 …

C++字体库开发之字体回退三

代码片段 class FontCoverage { public: using SP std::shared_ptr<FontCoverage>; virtual ~FontCoverage() default; virtual void set(int index, FontTypes::CoverageLevel level) 0; virtual FontTypes::Coverag…

004 线程的状态

文章目录 Java线程可能的状态&#xff1a; 状态名称说明NEW初始状态&#xff0c;线程被构建&#xff0c;但是还没有调用start()方法RUNNABLE运行状态&#xff0c;Java线程将操作系统中的就绪和运行两种状态笼统地称作"运行中"BLOCKED阻塞状态&#xff0c;表示线程阻…

职场办公受欢迎的电脑桌面便签,手机电脑同步的备忘录

在快节奏的职场生活中&#xff0c;有效的时间管理和信息记录变得尤为重要。为了帮助大家更好地应对工作挑战&#xff0c;好用的电脑桌面便签和手机电脑同步的备忘录&#xff0c;好用便签应运而生&#xff0c;成为了当前职场办公中的得力助手。 好用便签是一款备受青睐的电脑桌…

阿里云物联网应用层开发:第三部分,微信小程序和web客户端实现

文章目录 哔哩哔哩视频教程1、阿里云物联网平台对接微信小程序2、阿里云物联网平台对接web客户端2-1MQTT服务器编写2-2 web端Servlet部分编写备注哔哩哔哩视频教程 【阿里云物联网综合开发,STM32+ESP8266+微信小程序+web客户端一篇教程详细讲解】 https://www.bilibili.com/v…

.NET下的开源OCR项目:解锁图片文字识别的新篇章

在数字化时代&#xff0c;从图片中高效准确地提取文字信息已成为众多应用场景的迫切需求。OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术正是满足这一需求的关键技术。对于.NET开发者而言&#xff0c;幸运的是&#xff0c;存在多个开…

接私活儿神器,一款功能强大的 SaaS 快速开发平台

今天&#xff0c;推荐一个微服务 SaaS 快速开发平台系统项目&#xff0c;笔者第一次使用就有点上头&#xff0c;爱不释手&#xff0c;必须要推荐给大家。 这是我目前见过最好的微服务 SaaS 快速开发平台系统项目。功能完整&#xff0c;代码结构清晰。值得推荐。 项目介绍 本…

nginx部署多个项目;vue打包项目部署设置子路径访问;一个根域名(端口)配置多个子项目

本文解决&#xff1a; vue打包项目部署设置子路径访问&#xff1b;nginx部署多个子项目&#xff1b;一个ip/域名 端口 配置多个子项目&#xff1b;配置后&#xff0c;项目能访问&#xff0c;但是刷新页面就丢失的问题 注&#xff1a;本文需要nginx配置基础。基础不牢的可见文…

致力于打造一个操作最简单、功能最全面、创意最丰富的聊天记录管理工具

管理您的聊天数据 下载&#xff1a;https://download.csdn.net/download/mo3408/89497474 提供数据获取、导出、分析全栈式解决方案 获取信息 一键式操作&#xff0c;数据信手拈来 导出聊天记录 批量导出、自定义时间、消息类型任意选、Word、Excel、HTML、TXT想要哪个勾哪个…

在地图上根据经纬度,画一个矩型围栏,设置每个点的经纬度

在做一个需求时有一个小点就是添加一个配送区域(5公里直径内的)矩形围栏 我做的比较简单 大家看看有没有帮助, 也是精简代码。测试效果上相对是精准的 //谷歌&#xff0c;根据经纬度获取以它为中心半径为5公里内的矩形的四个点经纬度getDefalutPoints (lng: number, lat: num…

adb push 报错 ...error: failed to copy...

一、现象&#xff1a; 原因&#xff1a;没有权限导致的 二、解决方法&#xff1a; adb root adb remount #重新加载文件系统三、再次尝试&#xff1a;adb push xxx.apk /system/app 结果&#xff1a;成功

猫咖老板教你一招解决猫浮毛问题,质量好的猫用空气净化器分享

作为一名猫咖店老板&#xff0c;我经常被朋友问到关于宠物空气净化器的各种问题。有人认为这是个神器&#xff0c;而有人则认为这完全是花钱买智商税。其实我刚开始对购买宠物空气净化器也持怀疑态度&#xff0c;心想这么多钱花下去真的有效吗&#xff1f;但使用后&#xff0c;…

Axure教程:App侧边抽屉菜单交互制作

今天给大家示范一下抽屉菜单在Axure中的做法。在抽屉式菜单中&#xff0c;要实现两个交互效果&#xff0c;分别是&#xff1a; 交互一 抽屉菜单中1、2级菜单项的伸缩效果 实现逻辑&#xff1a;设置动态面板的切换状态及“推动/拉动原件”实现 交互二 菜单项的选中状态切换 …

vue的$nextTick是什么是干什么用的?

为什么需要使用$nextTick&#xff1f;他的使用场景 1.你在接口返回之后在获取高度 正常等页面加载在mounted这个钩子函数里 这时候就需要找到接口赋值的地方 这样就可以获取到数据操作以后的dom元素了 $nextTick是什么是干什么用的&#xff1f; $nextTick() 是 Vue.js 框…

iPad卡在白苹果开不了机怎么办?3种解决办法!

iPad开机卡在白苹果&#xff1f;iPad Air 黑屏重启白苹果&#xff1f;iPad Pro 莫名关机&#xff0c;开机白苹果无法启动&#xff1f;iPad mini 摔落、泡水等&#xff0c;开机一直显示白苹果&#xff0c;iPad出现这些情况怎么办&#xff1f; 无论是使用iPad、iPad Air、iPad P…

实验一 MATLAB \ Python数字图像处理初步

一、实验目的&#xff1a; 1&#xff0e;熟悉及掌握在MATLAB\Python中能够处理哪些格式图像。 2&#xff0e;熟练掌握在MATLAB\Python中如何读取图像。 3&#xff0e;掌握如何利用MATLAB\Python来获取图像的大小、颜色、高度、宽度等等相关信息。 4&#xff0e;掌握如何在M…

Jupyter Notebook 说明 和 安装教程【WIN MAC】

一、Jupyter Notebook 简介&#xff08;来源百度百科&#xff09; Jupyter Notebook&#xff08;此前被称为 Python notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行40多种编程语言。 Jupyter Notebook 的本质是一个Web应用程序&#xff0c;便于创建和共享程序文…

深度解码:需求跟踪的艺术与实战应用

文章目录 引言一、需求跟踪的定义二、需求跟踪矩阵2.1 需求跟踪矩阵包含的内容2.2 跟踪矩阵层级2.3 需求属性2.4 参考表格 三、需求跟踪的收益3.1 确保商业价值最大化3.2 满足客户期望3.3 范围管理3.4 决策支持3.5 提高效率和效果3.6 文档化和沟通3.7 变更管理3.8 测量和改进 四…

数据库表导出到excel

数据库表导出到excel:前置知识1 ALL_TAB_COLS 数据库表导出到excel:前置知识2 Quartz基本使用 数据库表导出到excel:前置知识3 项目封装的Quartz实现动态定时任务 数据库表导出到excel:前置知识4 业务和效果 发起清单下载control层InventoryDownloadLogController /* * */ pa…

iPhone白苹果怎么修复?4个方法解决你的烦恼!

其实iPhone手机出现“白苹果”这事&#xff0c;如果是iPhone轻度用户&#xff0c;可能大家一辈子都不会遇到一次。但如果是iPhone重度用户、越狱爱好者、软件收集狂&#xff0c;可能就会遇到了。 白苹果&#xff0c;一般指iOS设备出现软、硬件故障&#xff0c;卡在一个类似于启…