Created
July 30, 2019 06:06
-
-
Save tiansh/01a2e201a748e2bb724bab652dd375a3 to your computer and use it in GitHub Desktop.
Revisions
-
tiansh created this gist
Jul 30, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,59 @@ /* * 从 jjwxc.net 下载文章 * 使用方法: * 1. 打开网址 http://www.jjwxc.net/onebook.php?novelid=0000000 (替换000为需要的数字) * 2. 打开网页控制台 * 3. 把这段粘贴进去 * 4. 等一段时间,浏览器提示你要下载时,确认下载 */ const decoder = new TextDecoder('gbk'); const parser = new DOMParser(); async function getContent(url) { const ab = await fetch(url).then(r=> r.arrayBuffer()); const html = decoder.decode(ab); const dom = parser.parseFromString(html, 'text/html'); const noveltextNode = dom.querySelector('.noveltext'); const titleNode = noveltextNode.querySelector('h2'); const title = titleNode.parentNode.removeChild(titleNode).textContent; const noteNode = noveltextNode.querySelector('.readsmall'); const note = noteNode && noteNode.parentNode.removeChild(noteNode).textContent.trim(); const text = [...noveltextNode.childNodes].map(x => { if (x.nodeType === Node.TEXT_NODE) { return x.textContent.replace(/ /g,'<SP!>>').trim().replace(/<SP!>>/g, ' ').trimRight(); } if (x.tagName.toUpperCase() === 'BR') return '\n'; return null; }).filter(x => x).join(''); return `## ${title}\n\n${text}\n\n${note?`--------\n${note}\n\n`:''}`; } async function getListContent(list) { const result = [], length = list.length; for (let index = 0; index < length; index++) { console.log('%d / %d', index, length); try { result.push(await getContent(list[index])); } catch (e) { console.error(e); } } return result; } async function downloadAsText() { const content = await getListContent([...document.querySelectorAll('a[itemprop="url"]')]) const text = '\ufeff' + content.join('\n\n========\n\n').replace(/\n/g, '\r\n'); const blob = new Blob([text], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; const title = document.querySelector('[itemprop="articleSection"]'); link.download = title.textContent + '.txt'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } downloadAsText()