半肾
精华
|
战斗力 鹅
|
回帖 0
注册时间 2016-12-11
|
本帖最后由 三葉Mitsuha 于 2017-6-14 14:36 编辑
昨天在eBookJapan买了本漫画,自己写了段半自动抓取图片的代码。手动翻页,自动下载当前页的图片。因为ebj的图片是经过混淆的,所以我是直接抓取canvas里解密显示后的内容。
现有的知识我看不懂具体的解密过程,而且也对此没有好的思路,所以实现不了自动下载……js学得不够精啊
具体用法:
- 打开chrome浏览器(最新版,其他浏览器没测过不保证能用)
- 进入你想看的漫画的在线阅读界面(我只在双页模式下试过,别的阅读模式不清楚能否有效执行)
- 打开“控制台”也有叫“开发者工具”的(console)
- 粘贴代码进console,回车运行。(每2秒钟控制台会跳出一个“loop...”的信息)
- 慢慢翻完整个漫画吧,期间会自动下载当前页面的图片的了。在这之前别忘了去 “设置” -> “高级选项” 把“每次下载文件都询问保存位置”的选项给去掉
- 如果当前显示的页面还在加载中,下载器会下载下来一个空白页,这时候你需要先跳到前几页,完后执行downloader.remove(x)(把x换成空白页的页码数字,页码以下载下来的文件名为准)。再回到下载失败的那一页,如果成功下载显示了就继续翻下一页,否则再回到执行downloader.remove(x) 的步骤。
网络状况好的话我通常2秒钟翻一次页,每次翻页,页面都刚好加载完的话很快就能下载下来一部漫画了。
- let downloader = (function() {
- const inner = document.getElementById('inner');
- let looping = false;
- const downloaded = {}
- const downloadBlob = function(index) {
- return function(blob) {
- const a = document.createElement('a');
- a.download = index;
- a.href = window.URL.createObjectURL(blob);
- a.click();
- downloaded[index] = true;
- window.URL.revokeObjectURL(a.href);
- }
- }
- const loop = function() {
- console.clear();
- console.log("looping...", JSON.stringify(downloaded));
- [...inner.childNodes].map(function(canvas) {
- let page = Number(canvas.getAttribute('page'));
- if (!isNaN(page) && canvas.className === "current") {
- if (downloaded[Number(page) + 1]) {
- return;
- } else {
- canvas.toBlob(downloadBlob(Number(page) + 1));
- }
- }
- return true;
- });
- if (looping)
- setTimeout(loop, 2000);
- }
- return {
- start: function() {
- looping = true;
- setTimeout(loop, 2000)
- },
- stop: function() {
- looping = false;
- },
- remove: function(index) {
- delete downloaded[index]
- }
- }
- })();
- downloader.start();
复制代码 效果演示
 |
|