iframe 返回上一页_doc88 文档下载 上

最近找一些国外的压力容器方面的资料。美帝在这方面耕耘上百年,各种文档标准非常齐全。当然买肯定是买不起的了,那怎么办?经过一番搜索,doc88上面东西不少。阅读还是可以的,但是想弄下来。怎么办?

### 摸索

- 小试牛刀F12

![image.png](https://upload-images.jianshu.io/upload_images/3797605-7c41a0089ed7f908.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这里先看看html中的结构,比如说用图片显示单个页面,然而并没有啊。我再去sources面板下去找找有没有相关的脚本。我发现mu.js这个脚本好像与PDF相关。PDFiumJS是个什么东西?貌似好像也许跟PDF有关系。作为一个只懂得二级C的机械汉子,把这研究出来怎么排版pdf估计是不可能。源代码分析的路子算是走不通了。

![mu.js](https://upload-images.jianshu.io/upload_images/3797605-d1b8328128ec3b59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 一头雾水

既然我看文旦的时候是动态加载的,那么网络返回的数据要直接是PDF页面,那不很妙么。

![网络请求](https://upload-images.jianshu.io/upload_images/3797605-27642600fafc7eac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![数据返回](https://upload-images.jianshu.io/upload_images/3797605-77196f3bd0dcaa90.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

看这返回的数据看是看不懂的,ebt是个什么数据,也搞不懂。

- 柳暗花明

再看一眼html吧。这里发现一个问题,所有内容显示应该是画在Canvas。为啥说应该是呢?因为前面html中,我既没有看到排版的div css等,也没有找到图片。在各页中只有canvas,而且其尺寸相当大。那怎么把Canvas画的内容弄出来呢?一顿搜索,貌似可行。

![发现Canvas](https://upload-images.jianshu.io/upload_images/3797605-0770dad09893864e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 实现

- 胜利在望

这里我先用选择子获取canvas,这里获取了很多。取一个``canvas``调用``toDataURL``函数,返回的数据是``base64``编码的。

```

array_c = document.querySelectorAll('canvas')

a = array_c[0]

a.toDataURL()

```

![image.png](https://upload-images.jianshu.io/upload_images/3797605-99b4d3c67a962fcf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

找个网站测试一下图片对不对!记得要把编码前面``data:image/png;base64,``删除。

![image.png](https://upload-images.jianshu.io/upload_images/3797605-37a3b3fd1ca476f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 大步流星

能获取图片那么这已经是非常大的进步了,接下来我们应该考虑把图片弄下来。这里不能只弄一张图片,而是应该把所有图片弄下来,做成一个PDF文档。怎么在浏览器里面合成PDF这个真不会。我想到另一个方法就是把图片发送到我自己的服务器上。当然这个服务器就是本地服务器。作为有点入门Python水平的菜鸟,能会的web框架也就是Flask了。

服务器端代码:

```

from flask import request, Flask

import io

import os

from flask_cors import CORS

from PIL import Image

import base64

app = Flask(__name__)

CORS(app)

@app.route('/')

def index():

return 'Index Page'

image_dir = 'images'

@app.route('/hook', methods=['POST'])

def hook():

#data = request.form

#print(data['name'])

prefix = 'data:image/png;base64,'

data = request.get_json()

base64_data= data['image']

image_id = data['id']

base64_data = base64_data.replace(prefix,'')

img_data = base64.b64decode(base64_data)

#image = Image.open(io.BytesIO(img_data))

# with open('image.txt','w') as f:

# f.write(base64_data)

path = os.path.join(image_dir,image_id+'.png')

with open(path,'wb') as f:

f.write(img_data)

return 'success'

if __name__=='__main__':

小程序 - 让APP加速RUN!(debug=True)

```

脚本代码(这些代码运行在浏览器的控制台):

```

function sendPages(){

cs = document.querySelectorAll('canvas')

cs.forEach((c)=>{

data = {"image":c.toDataURL(),"id":c.id}

fetch("http://127.0.0.1:5000/hook",{"mode":"cors","headers":{"Content-Type": "application/json"},"method":"POST","body":JSON.stringify(data)})

})

}

```

这些代码写了多久,咱是高手,所以写了10个小时(网易+B站+微博+搜索)。光这个CORS就让我郁闷了半天,只好B站蹉跎。咱只知道跨域会出现问题,但不知道跨域服务器也需要支持才行。

- 结尾

难道就这样行了么,显然还有很多问题。咱先不说这脚本要按F12然后到console运行的问题。如果我打开一个页数比较多的文档,那么开始肯定不会展开所有文档。我得点击继续阅读才行。还有一个非常重要的问题,文档是动态加载的。某个页面的文档被显示过才能加载,有点拗口。其实就是你得先看一遍文档,当然一秒也行,只要加载了就行。那我为了弄一个300页的文档,足足一个小时看文档。一页一秒,五分钟不就行了么。开玩笑,咱哪能这么集中精力。一页一页这么看,这是人干的事情么,只是为了翻页加载而已。所以这里得改。预知后事,请听下回倒腾。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值