只要听说过电脑的人都能看懂的网上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篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到 ...
随机推荐
- 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...
- “玲珑杯”ACM比赛 Round #11 B -- 萌萌哒的第二题
DESCRIPTION 一条东西走向的河两边有都排着工厂,北边有n间工厂A提供原材料,南边有n间工厂B进行生产.现在需要在工厂A和工厂B之间建运输桥以减少运输成本.可是每个工厂B只能接受最多6个工厂A ...
- CF990B Micro-World 贪心 第十六
Micro-World time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- 用深度学习技术FCN自动生成口红
1 这个是什么? 基于全卷积神经网络(FCN)的自动生成口红Python程序. 图1 FCN生成口红的效果(注:此两张人脸图来自人脸公开数据库LFW) 2 怎么使用了? 首 ...
- Ubuntu开机出现grub指令,无法正常开机
问题 最近开机出现了如下的界面: 分析问题 首先看看GNU GRUB是什么东东?干什么用的? GNU GRUB是多重引导加载程序.通俗点说,它就是用来一个可以让你选择运行什么操作系统的程序. 在你开机 ...
- 移动端rem距离单位的使用
在做移动端开发的时候大家肯定会遇到适配问题,手机的屏幕大小有非常多的类别,使用传统的px距离单位已经无法满足我们的需要,于是rem便横空出世,他与百分比定位是比较像的,但是也是有一定的区别,在这里就跟 ...
- 单细胞转录组测序技术(scRNA-seq)及细胞分离技术分类汇总
单细胞测序流程(http://learn.gencore.bio.nyu.edu) 在过去的十多年里,高通量测序技术被广泛应用于生物和医学的各种领域,极大促进了相关的研究和应用.其中转录组测序(RNA ...
- 数据库常用SQL语句(二):多表连接查询
前面主要介绍了单表操作时的相关查询语句,接下来介绍一下多表之间的关系,这里主要是多表数据记录的查询,也就是如何在一个查询语句中显示多张表的数据,这也叫多表数据记录的连接查询. 在实现连接查询时,首先是 ...
- Storm 系列(六)—— Storm 项目三种打包方式对比分析
一.简介 在将 Storm Topology 提交到服务器集群运行时,需要先将项目进行打包.本文主要对比分析各种打包方式,并将打包过程中需要注意的事项进行说明.主要打包方式有以下三种: 第一种:不加任 ...
- 008 Python基本语法元素小结
目录 一.概要 二.保留字 三.温度转换 一.概要 缩进.注释.命名.变量.保留字 数据类型.字符串. 整数.浮点数.列表 赋值语句.分支语句.函数 input().print().eval(). p ...