coco漫画获取隐藏的图片链接
网站分析
打开目标网站:https://www.cocomanhua.com/, 随便打开一部漫画: https://www.cocomanhua.com/10330/1/205.html
F12 打开工具开始分析

先直接发送GET请求看是否可以拿到图片的下载链接

继续查看源代码, 找到突破口







最后得到一个名为mh_info 的json数据
mh_info = {
startimg: 1,
enc_code1: "aVp6aWlITE1XcGJmSllMd0Z2NFhIZz09",
mhid: "10330",
enc_code2: "dzNaUXJ5SXFUangvNFZDQzZPdjRFSGpsMEVyYzdtTFdNMUsyR2pXcHIzWVRuTGxqZlVYTkFwenhxWENDajVrYXlvS0ZOQkV1T0w3N0pDTDFneHhkblpobkwyWWx4ank3c0tCZ3ZDUk05c1k9",
mhname: "未婚爸爸",
pageid: 2823662,
pagename: "二十几个壮汉",
pageurl: "1/205.html",
readmode: 3,
maxpreload: 5,
defaultminline: 1,
domain: "img.cocomanhua.com",
manga_size: "",
default_price: 0,
price: 0
};
然后又发现两个加密的东西enc_code1和enc_code2 ,到这里线索好像就断了没什么头绪那怎么办?我们再往下看看,有没有新的发现。

再打个断点调试一下看看,


两个字符串一模一样, 那么和mh_onfo联系起来了,好像有那么一点思路了。可以得到图片得地址就是:
' + mh_info['domain'] + '/comic/'+ __cdecrypt(_0xad15x7c, CryptoJS[__Oxa17db[0x4f]][__Oxa17db[0x52]][__Oxa17db[0x51]](mh_info[__Oxa17db[0x1c3]]).toString(CryptoJS[__Oxa17db[0x4f]].Utf8)) + 0001.jpg
我们点击翻页, 看一下下一张图片得url链接:

//img.cocomanhua.com/comic/10330/Z2hWczlBTFBwQzE2OW1hV2F3UW1LcnBrUzJiLzE2Wkw3YVdjc3FlOTZvYz0=/0002.jpg
只有后面得0001.jpg 变成了 0002.jpg , 可以得到规律,下一张图片得链接就是变成0003.jpg
回头再看看刚才获得得mh_info 里面的数据只有一个stratimg,但是发现并不知道每一章节漫画你一共有多少张图片?
回到渲染好得页面看下, 找下突破口。




的到结论,总的图片页数就
if (typeof mh_info[__Ox97c0e[0x0]] == __Ox97c0e[0x1]) {
totalImageCount = mh_info[__Ox97c0e[0x2]]
} else {
totalImageCount = parseInt(eval(base64[__Ox97c0e[0x4]](__Ox97c0e[0x3])))
}
获取图片下载链接
整理一下思路就是 详情页---->获取C_DATA---->mh_info, 通过enc_code2 获取img_path, 通过enc_code1获取到totalImageCount
扒得到mh_info的代码

按照分析时候的套路扒到底后得到以下代码
var __READKEY = 'fw12558899ertyui';
var DECRIPT_DATA;
try {
DECRIPT_DATA = __cdecrypt(__READKEY, CryptoJS.enc.Base64.parse(C_DATA).toString(CryptoJS.enc.Utf8));
} catch (error) {
DECRIPT_DATA = __cdecrypt("JRUIFMVJDIWE569j", CryptoJS.enc.Base64.parse(C_DATA).toString(CryptoJS.enc.Utf8));
}
eval(DECRIPT_DATA);

整理一下得到最后的代码
var __READKEY = 'fw12558899ertyui';
function __cdecrypt(key, word) {
var key = CryptoJS.enc.Utf8.parse(key);
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
};
function decode_data(C_DATA, key, default_key) {
C_DATA = CryptoJS.enc.Base64.parse(C_DATA).toString(
CryptoJS.enc.Utf8);
try {
C_DATA = __cdecrypt(key || __READKEY, C_DATA);
} catch (e) {
C_DATA = __cdecrypt(
typeof default_key === 'string' ? default_key
: "JRUIFMVJDIWE569j", C_DATA);
}
return C_DATA;
}
var image_info = eval(decode_data(C_DATA));
安装一下node环境,运行看下结果

获取img_path

上面的函数整理一下大概的意思就是
__cdecrypt( __READKEY,CryptoJS.enc.Base64.parse(enc_code2).toString(CryptoJS.enc.Utf8))
不难发现其实就是上面的decode_data函数, 所以最后就是
decode_data(mh_info.enc_code2, "fw125gjdi9ertyui", "")
获取totalImageCount

var __READKEY = 'fw12558899ertyui';
var DECRIPT_DATA;
try {
DECRIPT_DATA = __cdecrypt(__READKEY, CryptoJS.enc.Base64.parse(mh_info.enc_code1).toString(CryptoJS.enc.Utf8));
} catch (error) {
DECRIPT_DATA = __cdecrypt("JRUIFMVJDIWE569j", CryptoJS.enc.Base64.parse(mh_info.enc_code1).toString(CryptoJS.enc.Utf8));
}
eval(DECRIPT_DATA);
整理一下就是
decode_data(mh_info.enc_code1)
最后就是合成完整的图片路径
var base_URL = 'https://www.cocomanhua.com/'
var chapter_data = {}
var chapter_image_base_path = base_URL.replace(/:\/\/.+/, '://')
+ mh_info.domain + "/comic/" + encodeURI(chapter_data .imgpath);
chapter_data.image_list = []; for (; image_NO <= chapter_data.totalimg; image_NO++) {
var image_url = chapter_image_base_path + (Array(4).join("0") + image_NO).slice(-4) + ".jpg";
mh_info.image_list.push(image_url);
}
完整运行一下代码看下结果

下载图片
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Time : 2020/10/28 15:35
# Author : Amd794
# Email : 2952277346@qq.com
# Github : https://github.com/Amd794 import re import execjs from threading_download_images import get_response class CoCoManHua(object):
@staticmethod
def _cocomanhua(detail_url):
response = get_response(detail_url)
data = re.findall('var C_DATA.*?\'(.*?)\'', response.text)[0]
ctx = execjs.get().compile(open('../js/_cocomanhua.js', encoding='utf-8').read(), cwd='../js/node_modules')
images_url = ctx.eval(f'getArr("{data}")')
return images_url if __name__ == '__main__':
print(CoCoManHua._cocomanhua('https://www.cocomanhua.com/11701/1/188.html'))
先运行下代码看下能不能得到链接

最后整合到主程序中运行看下效果


测试运行一下


在文章下方直接留言,请在备注中注明转载。
coco漫画获取隐藏的图片链接的更多相关文章
- 如何获取Flickr图片链接地址作为外链图片
Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...
- 使用selenium的方式获取网页中图片的链接和网页的链接,来判断是否是死链(二)
上一篇使用Java正则表达式来判断和获取图片的链接以及跳转的网址,这篇使用selenium的自带的API(getAttribute)来获取网页中指定的内容 实现内容:获取下面所有图片的链接地址以及跳转 ...
- IOS: 使用imageIO获取和修改图片的exif信息
使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...
- 图片预览(base64和blob:图片链接)和ajax上传、下载(带进度提示)
直接上代码 html和js <!DOCTYPE html> <html> <head> <meta name="viewport" con ...
- [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
在做茶城网改版工作的时候,又遇到一个新问题,我需要用jQuery写一个通过点击左右图标来翻阅图片的小插件,写好后测试可以正常运行,但是放到Tab中后发现只有第一个Tab中的代码能够正常运行,其它全部罢 ...
- 获取Bing每日图片API接口
bing图片每日更新,对于这一点感觉挺不错的,如果能够把bing每日图片作为博客背景是不是很不错呢?首先我们进入Bing首页,会发现自动转到中国版.不过这没关系,中国版更符合国情,速度也比国际版快一些 ...
- 【转】微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应
原文[https://blog.csdn.net/qq_31383345/article/details/53127804] 早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于 ...
- 微信小程序学习点滴《十二》:图片等比例缩放 获取屏幕尺寸图片尺寸 自适应
原文:http://www.wxapp-union.com/portal.php?mod=view&aid=360 早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于屏 ...
- jQuery无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
用jQuery写一个通过点击左右图标来翻阅图片的小插件,写好后测试可以正常运行,但是放到Tab中后发现只有第一个Tab中的代码能够正常运行,其它全部罢工了. 用Chrome自带的开发工具一查,发现罢工 ...
- 使用Jsoup解决网页中图片链接问题
在做Facebook和WhatsApp分享的时候,分享出去的谷歌短链,Facebook获取不到大图,和竞品展示的不一样,WhatsApp分享出去的短链没有图片和描述. WhatsApp: 分析竞品UC ...
随机推荐
- 【技术积累】Java中的常用类【一】
Math类 Math类是Java中的一个数学工具类,提供了一系列常用的数学方法.下面是Math类的常用方法及其案例: abs() 返回一个数的绝对值. int num = -10; int absNu ...
- 伸展树(Splay)详解
引入 在一条链中,二叉查找树的时间复杂度就会退化成 \(O(n)\),这时我们就需要平衡树来解决这个问题. \(Splay\)(伸展树)是平衡树的一种,它的每一步插入.查找和删除的平摊时间都是 \(O ...
- debezium之mysql配置
实验环境 全部部署于本地虚拟机 1 mysql 参考 官方文档 和 根据官方示例镜像(debezium/example-mysql,mysql版本为8.0.32) 1.1 创建用户 官方镜像里一共有三 ...
- redis 使用 nologin 用户启动
添加不可登录的redis用户 sudo useradd -M -s /sbin/nologin redis 为redis新建目录,并设置属性 mkdir -p /data/redis &&am ...
- ubuntu server安装图形化界面
只需一个命令,然后重启即可: # apt-get install ubuntu-desktop # 查看下一次启动的设置 systemctl get-default # reboot
- 2021-6-17 plc连接
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 转 致创业者:APP已死 服务永生
前几日,有位创业者和我讲他在带领团队做一个将爱踢球的人集中在一起的App,我告诉他你的创业方向错了.原因在于你的目的是要为爱踢球的人提供服务,而你现在却在竭尽全力的做App,你应该做的是设计你为爱踢球 ...
- 春秋云镜像-CVE-2022-0788
准备: 攻击机:win10. 靶机:春秋云镜像-CVE-2022-0788. 写这个的时候在网上想查找下该漏洞的利用方式,没有找到相关的资料,因此记录下自己通过这个靶场的poc与exp. curl ' ...
- 园子的脱困努力-云厂商合作:领取阿里云免费ECS试用资源,部署Java Web环境,送小礼品
在园子脱困的关键时期,每一笔收入都很重要,一边在会员救园,一边我们要努力把握每一个商务合作机会,争取早日走出困境. 之前园子维持生存的收入主要来自于与云厂商的合作,但去年由于云厂商推广策略的调整,这块 ...
- CodeForces 1332E Height All the Same
题意 对于一个\(n*m\)的矩阵,有两种操作 一个格子加二 一个格子和另一个相邻的格子同时加一 通过这两种操作最终使得所有矩阵元素相等 对于矩阵元素来说,有\(L\leq a_{i,j}\leq R ...