只要听说过电脑的人都能看懂的网上pdf全书获取项目
作者:周奇
最近我要获取《概统》的教材自学防挂科(线代已死),于是我看到
htt链ps:/链/max链.book接118接.com接/html/2018/0407/160495927.shtm
这里有东北大学的教材。
我想获取这个pdf,然鹅要20块,我又穷。
但我想,“所见即所得”,“凡走过必留下痕迹”,你只要放在页面上,肯定要被我得到。
看到它请求的是图片,有点难受,不过图片也凑合着看。
所以我在下面就要介绍这个“只要听说过电脑的人都能看懂的”网上pdf全书获取项目(其实是大量图片的获取
项目),为“信息民主化的幻象”续命……
js代码分三部分。
1:把需求图片转为允许跨域的图片(不然canvas会出错),并批量生成canvas标签
2:把HTMLcollection的伪数组转化为js数组,并排序生成的js数组
3:扫上面得到的数组,每个图片都转为dataUrl(base64的字符串)并写入p标签。
最后在Chrome的HTML面板上找到这个p标签,右键copy element即可。
js:
//使用备注:每次只改part 1 for循环的循环变量的i,且part1必须单独执行(因为canvas被dom记录需要时间,冷却一下再执行part2 3)
- //part 1 : obtain canvas
- function imgTagtoCanvas(src,i) {
- //js没有引用传递。。。
- var img = new Image();
- img.setAttribute('crossOrigin', 'anonymous'); //必须在加载前设置允许跨域,吼则:Tainted canvases may not be exported
- var canvas = document.createElement("canvas"); //创建canvas元素
- img.src = src;
- //图片加载完毕
- img.onload = function () {
- canvas.width = img.width;
- canvas.height = img.height;
- canvas.className = "cs"+i.toString();
- canvas.getContext("2d").drawImage(img,0,0,img.width,img.height); //将图片绘制到canvas中
- document.head.append(canvas);
- }
- }
- var Imgs = document.querySelector("#ctn").getElementsByTagName("img");
- console.log(Imgs.length);
- for(var i=0;i<Imgs.length;i++){
- imgTagtoCanvas(Imgs[i].src,i);
- }
- //part 2 : obtain dataUrl as text
- var canvases = document.getElementsByTagName("canvas");
- console.log(canvases.length);
- //要先把arraylike转化为array再排序,排序是因为xhr请求返回的时间不同导致了顺序混乱
- var makeArray = function(obj){
- var res = [];
- for(var i=0,len=obj.length; i<len; i++){
- res.push(obj[i]);
- }
- return res;
- }
- function sortCanvas(a,b)
- {
- return parseInt(a.className.split("cs")[1]) - parseInt(b.className.split("cs")[1]);
- }
- canvases = makeArray(canvases);
- canvases.sort(sortCanvas);
- //part 3 : obtain dataUrl as text
- //var textArea = document.createElement("textarea");
- //textArea.style.background = 'transparent';
- var p = document.createElement("p");
- for(var i=0;i<canvases.length;i++){
- var dataUrl = canvases[i].toDataURL('image/'+'jpeg');
- var txt = dataUrl.split(",")[1] + "\n";
- //textArea.value += txt;
- p.innerText += txt;
- }
- document.body.appendChild(p);
python代码仅仅是把那个字符串里每一个base64串分离出来,然后还原出图片。在imgs.txt里
只需把复制的字符串的最前面的<p>和最后面的</p>删掉
- import os
- #import pwd
- import stat
- import sys
- import base64
- import ctypes
- def main():
- txtf = open('imgs.txt','r')
- lines = txtf.readline().split("<br>")
- #print(lines[-1]) #test shows that there is no "\n"
- x = 141
- for line in lines:
- if len(line) <= 0:
- continue
- else:
- #以下几行是打补丁,61是初值
- #if x-61 < 2:
- #x += 1
- #continue
- print(len(line))
- x += 1
- imgobj = base64.b64decode(line)
- imgf = open('p%d.jpg' % x,'wb')
- imgf.write(imgobj)
- imgf.close()
- txtf.close()
- main()
只要听说过电脑的人都能看懂的网上pdf全书获取项目的更多相关文章
- 小学生都能看懂的FFT!!!
小学生都能看懂的FFT!!! 前言 在创新实践重心偷偷看了一天FFT资料后,我终于看懂了一点.为了给大家提供一份简单易懂的学习资料,同时也方便自己以后复习,我决定动手写这份学习笔记. 食用指南: 本篇 ...
- 55张图吃透Nacos,妹子都能看懂!
大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第1篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...
- 机器学习敲门砖:任何人都能看懂的TensorFlow介绍
机器学习敲门砖:任何人都能看懂的TensorFlow介绍 http://www.jiqizhixin.com/article/1440
- 搭建分布式事务组件 seata 的Server 端和Client 端详解(小白都能看懂)
一,server 端的存储模式为:Server 端 存 储 模 式 (store-mode) 支 持 三 种 : file: ( 默 认 ) 单 机 模 式 , 全 局 事 务 会 话 信 息 内 存 ...
- log4j漏洞的产生原因和解决方案,小白都能看懂!!!!
核弹级bug Log4j,相信很多人都有所耳闻了,这两天很多读者都在问我关于这个bug的原理等一些问题,今天咱们就专门写一篇文章,一起聊一聊这个核弹级别的bug的产生原理以及怎么防止 产生原因 其实这 ...
- Unity 打包发布Android新手教学 (小白都能看懂的教学 ) [转]
版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ531193915 扫码关注微信公众号,获取最新资源 最近在Unity的有些交流群里,发现好多Unity开发 ...
- 小学生都能看懂的数位dp
前言 数位dp其实很久前就知道了,也做过几道和其他算法混在一起的题目,其实通过手玩是能做的 但毕竟是种算法,还是系统学下比较好(节省手玩时间) 模板题 P2602 [ZJOI2010]数字计数 化简题 ...
- 小白都能看懂的tcp三次握手
众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...
- 这是一篇每个人都能读懂的最小生成树文章(Kruskal)
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到 ...
随机推荐
- javaScript 基础知识汇总(五)
1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...
- mongodb 启动 WARNING: soft rlimits too low, transparent_hugepage/enabled is 'always'. never
今天启动mongodb的时候,之前一直没注意,今天发现又warning,想整一整. 下面是告警 2019-09-05T12:00:55.271+0800 I CONTROL [initandliste ...
- 2019nc#3
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Graph Games 点击查看 进入讨论 18/292 未通过 B Crazy Binary String 点击查看 1107/3615 ...
- 【EDU68 E】 Count The Rectangles 数据结构算几何
CF # 题意 总共有5000条线段,这些线段要么水平,要么垂直,问这些线段组成了多少矩形. # 思路 这是一个n*n*(log)的思路 自己一开始想着枚举两条垂直边,想着怎么把水平的边插入,再进行冗 ...
- 杭电2018暑假多校第一场 D Distinct Values hdu6301 贪心
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 【LeetCode】[0001] 【两数之和】
题目描述 思路分析 Java代码 代码链接 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标.你可以假设每种输入只会对 ...
- 每天学会一点点(HashMap实现原理及源码分析)
HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希 ...
- Android-WebView支持input file启用相机/选取照片
webview要调起input-file拍照或者选取文件功能,可以在webview.setWebChromeClient方法中重写指定的方法,来拦截webview的input事件,并做我们相应的操作. ...
- 洛谷 P1091合唱队列
吾王剑之所指,吾等心之所向 ——<Fate/stay night> 题目:https://www.luogu.org/problem/P ...
- fireFox模拟 post请求、上传插件,火狐浏览器中文postman插件
ApiPost是一个支持团队协作,支持模拟POST.GET.PUT等常见请求,并可直接生成文档的API调试.管理工具. 它拥有以下功能特性: 1.文档管理ApiPost不仅可以快速生成接口文档,还支持 ...