这段程序使看到了好的东西,又没有零钱的产物

还是老师让画思维导图我不想画还想白嫖的想法

用时20分钟

就拿这个来作为例子 https://mm.edrawsoft.cn/template/286842

1. 找到一个突破点

我看了网络,没有接口,没办法偷懒

思维导图是canvas渲染的,我也懒得找数据从哪里来的,所以就只有大纲了

function getOutline(node) {
let info = {child: []};
info.title = $(node).children(".ed-outline-title").find("span").text();
$(node).children(".ed-outline").each(function (index, ele) {
info.child.push(getOutline(ele));
});
return info;
}
// 运行
// 里面是jquery的css选择器,选择的是大纲的节点
getOutline($("#app > div > div > div:nth-child(4) > div.ed-outline.ed-outline--top").get(0))

这会生成一个Json

{
"child": [
{
"child": [
{
"child": [],
"title": "没有孩子的三级"
},
{
"child": [],
"title": "没有孩子的三级"
}
],
"title": "有孩子的二级"
},
{
"child": [],
"title": "没有孩子的二级"
}
],
"title": "一级"
}

有了json,怎么转化为思维导图呢?

用markmap!

2. json转markdown生成思维导图

先做json转markdown,很简单

function toMarkdown(data, depth=0) {
let markdownStr = "";
data.title = data.title.replace(/[(\r\n)(\n)]/g,"<br/>");
if(data.title=="") {
// 有的标题不对劲,会干扰markmap的生成
data.title = "&nbsp;";
}
markdownStr += " ".repeat(depth)+"- "+data.title+"\n";
for (let i in data.child) {
markdownStr += toMarkdown(data.child[i], depth+1);
}
return markdownStr;
}

在markdown里,换行能引起各种各样的错误,所以我将每一层的文字的换行符替换成<br/>

接下来是生成思维导图

试用: https://markmap.js.org/repl

源码: https://github.com/markmap/markmap

把刚才的那一段示例生成为markdown

- 一级
- 有孩子的二级
- 没有孩子的三级
- 没有孩子的三级
- 没有孩子的二级

打开网址,将markdown填入文本框



非常完美,这样子给老师交差就方便了

好了完整代码放到这里, 要是有变化我也不管啦, 我已经和老师交差了

(function () {
function getOutline(node) {
let info = {child: []};
info.title = $(node).children(".ed-outline-title").find("span").text();
$(node).children(".ed-outline").each(function (index, ele) {
info.child.push(getOutline(ele));
});
return info;
}
function toMarkdown(data, depth=0) {
let markdownStr = "";
data.title = data.title.replace(/[(\r\n)(\n)]/g,"<br/>");
if(data.title=="") {
// 有的标题不对劲,会干扰markmap的生成
data.title = "&nbsp;";
}
markdownStr += " ".repeat(depth)+"- "+data.title+"\n";
for (let i in data.child) {
markdownStr += toMarkdown(data.child[i], depth+1);
}
return markdownStr;
}
let outlineBox = $("#app > div > div > div:nth-child(4) > div.ed-outline.ed-outline--top").get(0);
let copyBtn = $(`<button style="position:absolute;">复制思维导图markdown</button>`);
copyBtn.css({
"top": $(outlineBox).offset().top+"px",
"right": "0px"
});
copyBtn.click(function () {
navigator.clipboard.writeText(toMarkdown(getOutline(outlineBox)));
});
$("body").append(copyBtn);
})();

阅读了源码,发现有更简单的方法

这是一个Object,里面存着所有的东西

window.__NUXT__.state["active-work"]

大纲请看对象的下的outlines

svg文件和预览图请看对象下的config

更加详细的信息看workInfo

还有评论等等的都在这个里面

还有,workInfo里有一个链接,我总感觉可以直接下载到emmx文件

我已经被学校燃尽了,以后有缘我再研究

哦吼吼,能看到这个链接就说明我的文章被爬虫爬了

请尊重原作者: https://www.cnblogs.com/dffxd/

[前端js] 爬取亿图脑图大纲的更多相关文章

  1. 前端js 爬取 获取网页

    1.存在问题 same origin policy(同源策略) 页面中的Javascript只能读取,访问同域的网页.这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和 ...

  2. node.js爬取数据并定时发送HTML邮件

    node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...

  3. JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One

    JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One JavaScript 高级程序设计 (第4版) 思维导图下载 JavaScript 高级程序设计 (第4版) 脑图 ...

  4. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  5. node.js爬取ajax接口数据

    爬取页面数据与爬取接口数据,我还是觉得爬取接口数据更加简单一点,主要爬取一些分页的数据. 爬取步骤: 1.明确目标接口地址,举个例子 : https://www.vcg.com/api/common/ ...

  6. Node.js爬取豆瓣数据

    一直自以为自己vue还可以,一直自以为webpack还可以,今天在慕课逛node的时候,才发现,自己还差的很远.众所周知,vue-cli基于webpack,而webpack基于node,对node不了 ...

  7. 深夜,我用python爬取了整个斗图网站,不服来斗

    QQ.微信斗图总是斗不过,索性直接来爬斗图网,我有整个网站的图,不服来斗. 废话不多说,选取的网站为斗图啦,我们先简单来看一下网站的结构 网页信息 从上面这张图我们可以看出,一页有多套图,这个时候我们 ...

  8. Python学习笔记(五十)爬虫的自我修养(三)爬取漂亮妹纸图

    import random import urllib from urllib import request import os ################################### ...

  9. PHP 结合前端 ajax 爬取网站信息后, 向指定用户发送指定短信;

    <?php /** * Description * @authors Your Name (you@example.org) * # 根据时时彩的最新一期的号码, 判断如果为首尾同号则发送短信 ...

  10. Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

随机推荐

  1. drf-视图集、路由系统、action装饰器

    1.9个视图扩展类 1.两个视图基类:APIView.GenricAPIView 2.5个视图扩展类:CreateModelMixin,UpdateModelMixin,RetrieveModelMi ...

  2. DBSCAN学习笔记

    基本概念 核心点:若某个点的密度达到算法设定的阈值,即ε-邻域内点的数量(包括自己)不小于minPts,则该点为核心点. 边界点:在ε-邻域内点的数量小于minPts,但是落在核心点邻域内的点. 噪声 ...

  3. JavaScript 、三个点、 ...、点点点 是什么语法

    笔者在学习ts函数式的时候见到这样的写法,这个语法是es6的扩展运算符,可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开:还可以在构造字面量对象时, 将对象表达式按key-va ...

  4. 关于联想对Jim博士的质疑

    对Jim博士质疑的质疑 因为关注司马南,从他的空间里看到Jim博士和其龃龉,大致看了Jim博士头条里的文章,因为看到自己常用的EPICS,上午匆忙就写了上面的文. Jim博士是去年在头条上看到的,因为 ...

  5. NETAPP硬盘更换

    netapp硬盘新增 一.找到坏盘,插上新盘# 1.登陆到想要点亮的硬盘相对应的控制器上,并进去高级模式. priv set advanced 2.利用disk show -v 查看想要点亮的硬盘名字 ...

  6. 另类数据获取法-eax法

    有些基址非常难追 所以我们用一个另类的方法来追一下 复杂的汇编代码 ------------------ call 0x****** mov esi,eax; mov ***, dword ptr d ...

  7. vue2.x中关于引用图片的问题

    vue中引用图片的几种情况 错误片段一 <!-- template --> <img :src="p" alt="" width=" ...

  8. TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式

    TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 -- 网络地址的分配方式 关于 DHCP(DHCP, Dynamic Host Co ...

  9. HGAME_2023_WEB_WP_WEEK3

    Ping to the host 很明显的rce,简单测试一下发现空格,cat,:被办,且执行无回显,空格用${IFS},%09,$IFS$9等等来绕过,我们利用dnslog将执行结果外带出来,这里使 ...

  10. JZOJ 2020.02.01【NOIP提高组】模拟A 组

    2020.02.01[NOIP提高组]模拟A 组 二月份第一场比赛 闲话 惨烈啊! 50+30+0=80分 一题都没A 唉 最高150? \(zzh\) 暴虐A组 总结: 若干新东西 \(T1\) 我 ...