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

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

用时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. Pytest插件pytest-assume多重断言

    Pytest插件pytest-assume多重断言 背景 import pytest def test_assume1(): assert 1 == 2 print('hello') assert 2 ...

  2. NodeJS 实战系列:DevOps 尚未解决的问题

    本文将通过展示 NodeJS 应用里环境变量的提取过程,来一窥 DevOps 技术是如何应用在现在云平台上的运维工作中的.同时我也想让大家在这里看到 DevOps 的另外一面,即它并非全能,从本地开发 ...

  3. TypeScript 学习笔记 — 类的基本用法(五)

    目录 TS 中定义类 类中实例属性.方法 + 修饰符 public protected private readonly 实例方法 类中原型属性.方法 + 访问器 原型属性 + 访问器 原型方法 类中 ...

  4. Cesium Ellipsoid(十四)

    由方程(x/A)^2+(y/b)^2+(z/c)^2=1在笛卡尔坐标系中定义的二次曲面.Cesium主要用来表示行星体的形状.通常使用提供的常量之一,而不是直接构造此对象. 不用new,直接就可以使用 ...

  5. JZOJ 【2021.11.10NOIP提高组联考】

    简要题解 这套题比较 \(H_2O\) 建议题目背景美文共赏 \(\text{T1}\) 显然一个 \(O(n^3)\) 不能过的 \(dp\) 然而过了?! 用心在该卡时间的地方卡一卡 \(\tex ...

  6. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    题目大意 对于 \(m = [1,\lfloor \frac n 2 \rfloor]\) 要求在一个序列中恰好选出 \(m\) 个不相邻的数使得权值和最大 其中 \(1\) 的左边是 \(n\),\ ...

  7. 三天吃透MySQL八股文(2023最新整理)

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  8. 达标式减量策略又一例证(STRASS研究)

    标签: 类风湿关节炎; T2T策略; TNF抑制剂; 药物减停; STRASS研究 达标式减量策略又一例证(STRASS研究): RA维持期个体化减停TNF拮抗剂是可能的 电邮发布日期: 2016年1 ...

  9. CCRD总目录(2007年至今,动态更新中)

    中信国健临床通讯总目录 (动态更新.末次更新: 2015-07-06) 年份 目录网址 2010年 1.2010年第01期 (或者浏览有备注的目录: 2010年第01期 ) 2.  2010年第02期 ...

  10. idea导入tomcat8源码搭建源码调试环境

    从apache tomcat下载tomcat8源码 1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个pom.xml放入源码根目录 <?xm ...