在chrome浏览器上下载txt小说的Javascript代码

前段时间在追一部网络小说,想把小说下载到本地离线阅读,利用chrome浏览器开发模式,编写了一段下载小说页面中所有章节内容,并合并为一个文本文件的Javascript代码。

//章节目录所在的标签ID
var txtListID = "list";
//小说章节正文所在的标签ID
var txtContentID = "content";function syncSleep(time) {return new Promise((resolve)=>setTimeout(resolve, time));
}//网页链接文档列表
var docLst = [];//XmlHttpReauest
var XMLHttp = {_getInstance: function() {return this._createObj();},_createObj: function() {if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc.objXMLHttp = new XMLHttpRequest();} else if (window.ActiveXObject) {// code for IE6, IE5objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");}return objXMLHttp;},// 发送请求(方法[post,get], 地址, 数据, 回调函数)  sendReq: function(method, url, data, callback) {var objXMLHttp = this._getInstance();with (objXMLHttp) {try {// 加随机数防止缓存  if (url.indexOf("?") > 0) {url += "&randnum=" + Math.random();} else {url += "?randnum=" + Math.random();}open(method, url, true);// 设定请求编码方式  setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');send(data);onreadystatechange = function() {if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304)) {callback(objXMLHttp);}}} catch (e) {alert(e);}}}
}//Xml文档Parser
function Parser() {if (window.DOMParser) {return new DOMParser();} else // Internet Explorer{xmlDoc = new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async = "false";return xmlDoc;}
}var promises = [];
//下一行代码是关键,用于生成小说页面上所有章节链接网页列表。这需要根据不同小说网站的章节目录页面布局,选择不同的ID或者CLASS。
var srcDoc = document.getElementById(txtListID).children[0];var ad = Array.prototype.slice.call(srcDoc.children);
var txtListCount = 0;
ad.forEach(function(item, idx) {var tmpd = item.children[0];if (tmpd != undefined) {if (tmpd.nodeName === "A") {promises.push(new Promise(resolve=>{XMLHttp.sendReq("GET", tmpd.href, null, function(xhttp) {var parser = Parser();var doc = parser.parseFromString(xhttp.responseText, "text/html");var ct = doc.getElementById(txtContentID).innerHTML;docLst.push({"idx": idx,"url": tmpd.href,"section": tmpd.innerText,"txt": ct});console.log(idx, tmpd.innerText, tmpd.href);resolve();});}));}}
})function SaveToFile(data, filename) {if (!data) {console.error('Console.save: No data')return;}if (!filename)filename = 'console.json';if (typeof data === "object") {data = JSON.stringify(data, undefined, 4)}var blob = new Blob([data],{type: 'text/json'});e = document.createEvent("MouseEvents");a = document.createElement("a");a.download = filename;a.href = window.URL.createObjectURL(blob);a.dataset.downloadurl = ["text/json", a.download, a.href].join(':');e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);a.dispatchEvent(e);window.URL.revokeObjectURL(a.href);
}//小说的书名
var txtTitle=document.getElementById("info").innerText
var txtUrl=document.URLvar docStr = "\n"+txtTitle+"\n"+txtUrl+"\n";
Promise.all(promises).then(function() {docLst.sort((a,b)=>{return a.idx - b.idx});docLst.forEach(function(item) {docStr = docStr + "\n第"+item.section +"\n"+ item.txt+"\n"});[{in: "<br>",to: " "}, {in: "&nbsp;",to: " "},{in:"XX小说网",to:"\n"}].forEach(item=>{var rg = new RegExp(item.in,"g");docStr = docStr.replace(rg, item.to);})//console.log(docStr);SaveToFile(docStr,"docStr.txt");
});

上述代码需要在chrome开发模式下,新建snippet代码片段,复制粘贴到代码片段中运行。由说小说网站页面布局存在差异,需要针对性的分析页面布局,生成正确的章节网址列表。由于个人水平限制,代码中有不足或错漏之处,还请方家指正。

在chrome浏览器上下载txt小说的Javascript代码相关推荐

  1. 使用Python+Chrome浏览器批量下载Ocean Color上遥感数据

    目录 1.前言 2.主要思路及代码 3.结果展示 建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529 1.前言 最近遇见一个很尴尬的事情.之前写过用IDM批量 ...

  2. 利用Chrome浏览器“自动下载”功能窃取Windows登录密码

    本文讲的是利用Chrome浏览器"自动下载"功能窃取Windows登录密码,在过去的十几年中,除了IE以及Edge浏览器之外,其余还没有公开针对SMB认证攻击的方法.这篇文章介绍的 ...

  3. 在Chrome 浏览器上滚动截屏

    浏览器原生功能实现滚动截屏,截取整个页面;|;插件推荐「Nimbus Screenshot」 在Chrome 浏览器上滚动截屏,不需要插件和任何 app,利用 chrome 浏览器原生功能即可实现. ...

  4. 让 Android 应用在 Chrome 浏览器上运行

    让 Android 应用运行在电脑上,大部分人会使用 Android 模拟器,现存的模拟器品牌也有很多,有的甚至还专门为手机游戏做了一些优化.说白了模拟器就是把整个 Android 系统搬到了电脑上, ...

  5. [Selenium] 如何在老版本的Chrome 浏览器上使用selenium

    由于Chrome Driver 只兼容Chrome  浏览器12.0.712.0 和之后的新版本,会因此如果要在老版本的Chrome  浏览器上使用Selenium, 则只能使用 SeleniumRC ...

  6. Chrome浏览器上集成IE内核方案

    Chrome浏览器上集成IE内核方案 1. 架构图 双核功能的基本思路是,在chrome原有的render 管理的基础上,添加trident内核对象并在切换时将两个渲染的内核数据进行同步,进而将内核网 ...

  7. 解决在Chrome浏览器上打印Web页面时无法选择布局(横向,纵向)

    问题描述: 在Chrome浏览器上打印Web页面时无法选择布局(横向,纵向) 解决方案: 在style文件中加入@page的size设置 @page {size: auto;//打印可以选择布局:横向 ...

  8. 如何设置IDM为谷歌Chrome浏览器默认下载工具

    如何设置IDM为谷歌Chrome浏览器默认下载工具 IDM Internet Download Manager(简称IDM)是一个用于Windows系统的国外下载工具,IDM可被Google Chro ...

  9. chrome浏览器驱动下载

    下载地址:chrome浏览器驱动下载地址 1.查看需要操作的chrome浏览器的版本 2.在下载地址中找到对应的版本,下载 3.解压,将解压得到的chromedriver.exe放在chrome浏览器 ...

  10. 将数据库数据导出到Excel中,并可以在浏览器上下载Excel

    将数据库数据导出到Excel中,并可以在浏览器上下载Excel 附代码: //设置文件保存路径 public static String url ="F:\\Workspase\\BackC ...

最新文章

  1. LeCun自曝使用C语言23年之久,2年前才上手Python,还曾短暂尝试Lua
  2. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题
  3. SQLServer 客户端远程访问配置
  4. 轻松简单地开发Web Services 2
  5. SQL Server 2008 阻止保存要求重新创建表的更改
  6. 命令行下安装的tensorflow怎么打开_CourseMaker微课制作教程18:录ppt一直“正在打开……”及WPS下ppt满屏放映怎么办?...
  7. java是如何实现原语的_Java中的低GC:使用原语而不是包装器
  8. (接口)银联证书上传被修改的问题和读取证书的绝对路径问题
  9. silverlight 缺少对象错误
  10. 仿无名云易支付首页模板
  11. vbs按钮传递过程_iOS面试题:事件传递和响应机制
  12. 人脸方向学习(十一):Face Landmark Detection-PFLD解读
  13. Ilasm.exe和Ildasm.exe的简单使用
  14. retinex 的水下图像增强算法_Retinex图像增强算法
  15. win7禁用显示方向旋转快捷键
  16. 全民一起玩Python提高篇第四课:深入数据类型与语法细节(下)
  17. 百川云旺客服申请测试流程
  18. 厦门商业贷款转公积金攻略
  19. v-model的底层原理
  20. 随机过程 Markov 链(下)

热门文章

  1. Alexander Tropsha:AI从零自学设计新型药物分子,研究登Science子刊|42问AI与机器人未来...
  2. 怎么引入oracle驱动包,Maven引入oracle驱动包
  3. Hulu热招|广告智能团队
  4. 腾讯和360之争所折射出的下作
  5. 360随身wifi3代linux驱动下载,360随身wifi3驱动
  6. C++中---结构体变量的默认值以及构造函数的应用
  7. 北京亿阳信通Oracle笔试题
  8. performSelector一系列方法调用和延时调用导致的内存泄露
  9. webgl的平行光漫反射示例
  10. 网络安全-MySQL数据库