鱼C论坛

 找回密码
 立即注册
楼主: 人造人

[作品展示] Python爬取斗破苍穹漫画

  [复制链接]
 楼主| 发表于 2018-10-25 12:21:13 | 显示全部楼层
暗夜之隐 发表于 2018-10-25 08:47
还是得麻烦一下您 ,您的代码我没太懂。 我现在写的可以下载图片了,但是获取的图片链接还是有问题,下载到 ...

贴一下你的代码我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:32:23 | 显示全部楼层
本帖最后由 暗夜之隐 于 2018-10-25 15:35 编辑

发重了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:33:08 | 显示全部楼层
人造人 发表于 2018-10-25 12:21
贴一下你的代码我看看

发了显示不出来呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:33:56 | 显示全部楼层
本帖最后由 暗夜之隐 于 2018-10-25 12:36 编辑
  1. import urllib.request
  2. from bs4 import BeautifulSoup as bs
  3. import re
  4. import os
  5. from urllib import parse

  6. from urllib.request import quote

  7. import io

  8. from PIL import Image
复制代码

  1. def urlopen(url):

  2.    
  3.     req = urllib.request.Request(url)

  4.     req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")

  5.     html = urllib.request.urlopen(req)

  6.     html = html.read()

  7.     return html

  8.     #urlopen 打开链接 并加了heaaders


  9. def url_list(url):

  10.     html = urlopen(url)

  11.     htm = html.decode('utf-8')

  12.     htm = bs(htm,'lxml')

  13.     cont = htm.div(class_="mhlistbody")

  14.     cont = cont[0]

  15.     cont = cont.find_all('a')

  16.     urllist = []

  17.     for i in cont:
  18.         
  19.         i = i.attrs
  20.         i = i['href']
  21.         i = 'http://www.manhuatai.com'+i
  22.         
  23.         urllist.append(i)

  24.     return urllist


  25. def content(url):
  26.    
  27.     os.mkdir('苍穹')
  28.     os.chdir('苍穹')

  29.     urllist = url_list(url)

  30.     for i in urllist:

  31.         html = urlopen(i)

  32.         html = html.decode('utf-8')

  33.         #这里是找到章节数
  34.         nmu = re.findall(r'(pageurl:")(\d*?)(")',html)
  35.         if len(nmu) == 0:
  36.             
  37.             continue

  38.         #这个是章节名字
  39.         htm = bs(html,'lxml')
  40.         h1 = htm.h1.string
  41.         os.mkdir(h1)
  42.         os.chdir(h1)
  43.         
  44.         #这个是获取图片链接的大写字母它是小说名字第一个字的拼音字母的大家
  45.         capital = re.search(r'mhid:".',html)
  46.         capital = capital.group()
  47.         capital = capital[-1]
  48.         capital = capital.capitalize()
  49.      
  50.         #这里是链接中间的文字
  51.         name = re.search(r'(mhname:")(.*?)(")',html)
  52.         name = name.group(2)
  53.         name = name+'拆分版'
  54.    
  55.         
  56.         
  57.         nmu = nmu[0]
  58.         nmu = nmu[1]
  59.         nmu = nmu+'话'
  60.         
  61.         #这里是找到这个章节一共有几张图片
  62.         page = re.search(r'(totalimg:)(\d*)(,)',html)
  63.         page = int(page.group(2))
  64.         
  65.    

  66.         cont_list = []

  67.         for i in range(1,page+1):

  68.             url = capital+'/'+name+'/'+nmu+'/'+str(i)+'.jpg-mht.middle.webp'

  69.             url = 'https://mhpic.jumanhua.com/comic/'+parse.quote(url)

  70.             print(url)

  71.             

  72.             cont_list.append(url)

  73.         for i in cont_list:
  74.             fi_name = h1+str(cont_list.index(i)+1)+'.jpg'
  75.             print(fi_name)
  76.             cont = urlopen(i)
  77.             img = Image.open(io.BytesIO(cont))
  78.             img.save(fi_name,'JPEG')

  79.         os.chdir(os.pardir)
  80.                



  81. url = "http://www.manhuatai.com/doupocangqiong/"

  82. list1 = content(url)


复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:40:00 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-25 13:28:59 | 显示全部楼层

你不应该对图片的地址做任何假设,图片的地址在mh_info的imgpath中保存着,当然是加密的,需要解密imgpath

  1. <script>var mh_info={imgpath:"H)6J)I:)=:)=;)I;)E4)F8)I<)<F)<H)I;)E=)F=)I:)<F)<:)I9)<<)<:)I;)<=)<<)6J;4;)I<)EJ)=H)6J",startimg:1,totalimg:8,mhid:"doupocangqiong",mhname:"斗破苍穹",pageid:1562714,pagename:"第707话 晋级斗宗(中)",pageurl:"707",readmode:1,maxpreload:5,defaultminline:1,domain:"cnmanhua.com",comic_size:"-mht.middle",default_price:0,price:0,time_diff:186874852};var cnzz_comic = ["_trackEvent","斗破苍穹","mht_"+(isMobile?"wap":"pc"),"",0];_czc = [["_setAccount", "1261814609"]];_czc.push(cnzz_comic);  /* 图片加载时cnzz事件统计 */</script>
复制代码
  1. imgpath:"H)6J)I:)=:)=;)I;)E4)F8)I<)<F)<H)I;)E=)F=)I:)<F)<:)I9)<<)<:)I;)<=)<<)6J;4;)I<)EJ)=H)6J"
复制代码

  1. def DecodeImgPath(pageid, str1):
  2.     imgpath = str()
  3.     for i in str1:
  4.         imgpath += chr(ord(i) - pageid % 10)
  5.     return imgpath

  6. def FixEscapeSequence(str1):
  7.     beg = 0
  8.     while True:
  9.         index = str1.find('\\', beg)
  10.         if index == -1:
  11.             break
  12.         str1 = str1[:index] + str1[index + 1:]
  13.         beg = index + 1
  14.     return str1

  15. def SwitchWebp(src, rules):
  16.     rules = rules or '-noresize'
  17.     src += rules
  18.     return src + '.webp'

  19. imgpath = r"H)6J)I:)=:)=;)I;)E4)F8)I<)<F)<H)I;)E=)F=)I:)<F)<:)I9)<<)<:)I;)<=)<<)6J;4;)I<)EJ)=H)6J"
  20. pageid = 1562714
  21. page = 1
  22. startimg = 1
  23. comic_size = "-mht.middle"

  24. print(imgpath)
  25. imgpath = DecodeImgPath(pageid, FixEscapeSequence(imgpath))
  26. print(imgpath)

  27. fixed_line = 'mhpic.jumanhua.com'
  28. filename = str(startimg + page - 1) + '.jpg'
  29. chapter_addr_rule = 'https://' + fixed_line + '/comic/' + imgpath + filename
  30. print(SwitchWebp(chapter_addr_rule, comic_size))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 13:35:01 | 显示全部楼层
人造人 发表于 2018-10-25 13:28
你不应该对图片的地址做任何假设,图片的地址在mh_info的imgpath中保存着,当然是加密的,需要解密imgpat ...

这个确实不懂  这解密有模块 函数用法是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-25 13:37:13 | 显示全部楼层
暗夜之隐 发表于 2018-10-25 08:47
还是得麻烦一下您 ,您的代码我没太懂。 我现在写的可以下载图片了,但是获取的图片链接还是有问题,下载到 ...

因为这个链接不是这样构造出来的,图片的地址在mh_info的imgpath中保存着,需要解码
你这样的假设就会像你举的这个例子一样会少一个V,因为这个链接不是这样构造出来的,这个链接不符合你提到的这个规律
  1. 我对这个链接的来组成是这样写的: 'https://mhpic.jumanhua.com/comic/'+小说名字第一个字的字母大写+小说名字+章节数加一个字符串‘话’+图片的数字编号(如第一张就是1.jpg)+-mht.middle.webp
复制代码

  1. def SwitchWebp(src, rules):
  2.     rules = rules or '-noresize'
  3.     src += rules
  4.     return src + '.webp'

  5. def GetPicUrl(mh_info, page):
  6.     fixed_line = 'mhpic.jumanhua.com'
  7.     filename = str(mh_info['startimg'] + page - 1) + '.jpg'
  8.     chapter_addr_rule = 'https://' + fixed_line + '/comic/' + mh_info['imgpath'] + filename
  9.     return SwitchWebp(chapter_addr_rule, mh_info['comic_size'])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 13:40:31 | 显示全部楼层
本帖最后由 暗夜之隐 于 2018-10-25 21:25 编辑
人造人 发表于 2018-10-25 13:37
因为这个链接不是这样构造出来的,图片的地址在mh_info的imgpath中保存着,需要解码
你这样的假设就会像 ...


谢谢 看到您的代码了 我再细看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 14:35:05 | 显示全部楼层
xiexie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 15:46:24 | 显示全部楼层
菜鸟来膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 22:11:11 | 显示全部楼层
人造人 发表于 2018-10-25 13:28
你不应该对图片的地址做任何假设,图片的地址在mh_info的imgpath中保存着,当然是加密的,需要解密imgpat ...

我看了一下您的代码 发现 这个规律才是解码关键  pageid % 10   但是这个是那里来的 转换后的ascii码减去  这个ID的百分之10  就得到了URL中间的关键部份 这个算法是在JS里面吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 22:25:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-25 22:30:13 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-25 23:01:24 | 显示全部楼层
暗夜之隐 发表于 2018-10-25 22:11
我看了一下您的代码 发现 这个规律才是解码关键  pageid % 10   但是这个是那里来的 转换后的ascii码减去 ...

通过动态调试找到的
  1. (function () {
  2.         mh_info.imgpath = mh_info.imgpath.replace(/./g, function (a) {
  3.                 return String.fromCharCode(a.charCodeAt(0) - mh_info.pageid % 10)
  4.         })
  5. })
复制代码


1.png

  1. __cr.getPicUrl = function (e) {
  2.         var i = lines[chapter_id].use_line,
  3.                 o = parseInt(mh_info.startimg) + e - 1 + ".jpg",
  4.                 t = "https://" + i + "/comic/" + mh_info.imgpath + o;
  5.         return __cr.switchWebp(t, mh_info.comic_size)
  6. }
复制代码

  1. __cr.switchWebp = function(e, i) {
  2.         i = i || "-noresize";
  3.         return /-(\d+)x(\d+)/gi.test(e) || (e += i),
  4.         __cr.isSupportWebp() && /^(https?:)?(\/\/)/.test(e) ? e + ".webp" : e
  5.     }
复制代码

  1. Array.prototype.forEach || (Array.prototype.forEach = function (e, i) {
  2.                 var o, t;
  3.                 if (null == this)
  4.                         throw new TypeError(" this is null or not defined");
  5.                 var n = Object(this),
  6.                         r = n.length >>> 0;
  7.                 if ("function" != typeof e)
  8.                         throw new TypeError(e + " is not a function");
  9.                 for (arguments.length > 1 && (o = i),
  10.                         t = 0; t < r;) {
  11.                         var a;
  12.                         t in n && (a = n[t],
  13.                                         e.call(o, a, t, n)),
  14.                                 t++
  15.                 }
  16.         }),
  17.         function (window, undefined) {
  18.                 window.use_domain = {},
  19.                         window.lines = {},
  20.                         window.chapter_id = 0;
  21.                 var __cr = window.__cr = {
  22.                         timeout: 1e4
  23.                 };
  24.                 __cr.getPage = function () {
  25.                                 var temp = __cr.cookie("urecord"),
  26.                                         page = 1;
  27.                                 if (!temp)
  28.                                         return page;
  29.                                 var tempArr = [];
  30.                                 try {
  31.                                         tempArr = eval(temp)
  32.                                 } catch (e) {
  33.                                         __cr.cookie("urecord", null)
  34.                                 }
  35.                                 return $.each(tempArr, function (e, i) {
  36.                                                 if (i[0] == mh_info.mhid && i[2] == mh_info.pageurl && i[5])
  37.                                                         return page = parseInt(i[5]), !1
  38.                                         }),
  39.                                         temp = null,
  40.                                         page
  41.                         },
  42.                         __cr.setRecord = function () {
  43.                                 var p = __cr.thispage;
  44.                                 p == mh_info.totalimg && 3 == __cr.userReadMode && (p = 0);
  45.                                 var str = "[['" + mh_info.mhid + "','" + mh_info.mhname + "','" + mh_info.pageurl + "','" + mh_info.pagename + "','" + (new Date).getTime() + "','" + p + "']",
  46.                                         temp = __cr.cookie("urecord") || [];
  47.                                 $.each(eval(temp), function (e, i) {
  48.                                                 if (e >= 10)
  49.                                                         return !1;
  50.                                                 i[0] != mh_info.mhid && (str += ",['" + i.join("','") + "']")
  51.                                         }),
  52.                                         str += "]",
  53.                                         __cr.cookie("urecord", str, {
  54.                                                 expires: 8760
  55.                                         }),
  56.                                         str = p = null
  57.                         },
  58.                         __cr.goPage = function (e) {
  59.                                 return $(window).scrollTop(0),
  60.                                         "next" == e && (e = __cr.thispage + 1),
  61.                                         "prev" == e && (e = __cr.thispage - 1), (e = parseInt(e, 10)) < 1 ? (alert("已经是第一页了"), !1) : (__cr.thispage = e,
  62.                                                 __cr.setRecord(),
  63.                                                 location = location.pathname + location.search, !1)
  64.                         },
  65.                         __cr.reloadPic = function (e, i) {
  66.                                 return window.stop ? window.stop() : document.execCommand("Stop"),
  67.                                         $(e).parent().siblings("img").attr("src", __cr.getPicUrl(i)),
  68.                                         $(e).parent().hide(),
  69.                                         __cr.st_showerr[i] = setTimeout("__cr.imgOnError(" + i + ")", __cr.timeout), !1
  70.                         },
  71.                         __cr.cr = "w1355i56n63d6464o7267w8786.65p786r8579o95m98p00t31=78_32_53c54r54.54c54h34a55r78c89o98d97e97",
  72.                         __cr.speedTest = function (e, i) {
  73.                                 $(".mod-speedtest").length ? __st.init(e, "/comic/" + mh_info.imgpath + (i + mh_info.startimg - 1) + ".jpg" + (mh_info.comic_size || "") + "?" + (new Date).getTime()) : ($.ajax({
  74.                                                 url: "//feedback.yyhao.com/static/speedtest.js",
  75.                                                 dataType: "script",
  76.                                                 scriptCharset: "utf-8"
  77.                                         }),
  78.                                         setTimeout(function () {
  79.                                                 __cr.speedTest(e, i)
  80.                                         }, 1e3))
  81.                         },
  82.                         __cr.setLine = function (e) {
  83.                                 if (e && !(e.status > 0)) {
  84.                                         var i = {
  85.                                                 use_line: e.data[0].domain,
  86.                                                 all_line: e.data,
  87.                                                 expire: 6e5 + (new Date).getTime()
  88.                                         };
  89.                                         __cr.cookie(e.domain, JSON.stringify(i)),
  90.                                                 __cr.getLine()
  91.                                 }
  92.                         },
  93.                         __cr.saveLine = function (json) {
  94.                                 if (json = eval(json),
  95.                                         json && 0 != json.length) {
  96.                                         var arr = [];
  97.                                         $.each(json, function (e, i) {
  98.                                                 var o = {
  99.                                                         domain: i[0],
  100.                                                         name: i[1],
  101.                                                         status: i[2]
  102.                                                 };
  103.                                                 arr.push(o)
  104.                                         });
  105.                                         var cachelines = {
  106.                                                 use_line: arr[0].domain,
  107.                                                 all_line: arr,
  108.                                                 expire: 6e5 + (new Date).getTime()
  109.                                         };
  110.                                         __cr.cookie(json.domain, JSON.stringify(cachelines), {
  111.                                                         expires: 1
  112.                                                 }),
  113.                                                 __cr.getLine()
  114.                                 }
  115.                         },
  116.                         __cr.getPicUrl = function (e) {
  117.                                 var i = lines[chapter_id].use_line,
  118.                                         o = parseInt(mh_info.startimg) + e - 1 + ".jpg",
  119.                                         t = "https://" + i + "/comic/" + mh_info.imgpath + o;
  120.                                 return __cr.switchWebp(t, mh_info.comic_size)
  121.                         },
  122.                         __cr.getLine = function () {
  123.                                 lines[chapter_id] = __cr.cookie(use_domain[chapter_id]),
  124.                                         lines[chapter_id] ? lines[chapter_id] = JSON.parse(lines[chapter_id]) : lines[chapter_id] = {
  125.                                                 use_line: "mhpic." + use_domain[chapter_id],
  126.                                                 all_line: [],
  127.                                                 expire: 0
  128.                                         }
  129.                         },
  130.                         __cr.showPic = function (e) {
  131.                                 e = e || __cr.thispage || 1;
  132.                                 $(".mh_comiclist");
  133.                                 if (e > mh_info.totalimg)
  134.                                         __cr.thispage = 0,
  135.                                         __cr.setRecord(),
  136.                                         $(function () {
  137.                                                 $(".mh_readend").show()
  138.                                         });
  139.                                 else {
  140.                                         var i = 3 == __cr.userReadMode ? mh_info.totalimg : e,
  141.                                                 o = "";
  142.                                         new Function(function (e, i, o, t, n, r) {
  143.                                                 if (n = function (e) {
  144.                                                         return (e < 10 ? "" : n(parseInt(e / 10))) + ((e %= 10) > 35 ? String.fromCharCode(e + 29) : e.toString(36))
  145.                                                 }, !"".replace(/^/, String)) {
  146.                                                         for (; o--;)
  147.                                                                 r[n(o)] = t[o] || n(o);
  148.                                                         t = [
  149.                                                                         function (e) {
  150.                                                                                 return r[e]
  151.                                                                         }
  152.                                                                 ],
  153.                                                                 n = function () {
  154.                                                                         return "\\w+"
  155.                                                                 },
  156.                                                                 o = 1
  157.                                                 }
  158.                                                 for (; o--;)
  159.                                                         t[o] && (e = e.replace(new RegExp("\\b" + n(o) + "\\b", "g"), t[o]));
  160.                                                 return e
  161.                                         }('4["\\1\\6\\0\\5\\1\\9"](8["\\3\\2\\7\\0\\3\\2"])', 0, 10, "x6f|x70|x65|x64|window|x6d|x72|x63|__cr|x74".split("|"), 0, {}))();
  162.                                         for (var t = e; t <= i; t++) {
  163.                                                 if (__cr.isLimit() && (t > 1 || e > 1)) {
  164.                                                         o += __cr.scheme.init();
  165.                                                         break
  166.                                                 }
  167.                                                 o += '<div class="mh_comicpic" p="' + t + '"><img ' + (t == e ? 'src="' + __cr.getPicUrl(e) + '"' : "d") + "/>",
  168.                                                         o += __cr.isLimit() ? '<span class="try-read"><img src="//image.samanlehua.com/file/global/' + __cr.scheme.getHost() + '_tryread.png" /></span>' : "",
  169.                                                         3 != __cr.userReadMode && (o += "<br>第 " + t + " 页 / 共 " + mh_info.totalimg + " 页<br>"),
  170.                                                         o += '<div class="mh_loading">服务器君正在努力载入图片,请稍候...</div><div class="mh_loaderr">已长时间未能载入图片,您可以:<br><span onclick="__cr.reloadPic(this,' + t + ')" class="mh_btn">重载图片</span> <span class="mh_btn contact">反馈报错</span> <span onclick="__cr.speedTest(this,' + t + ')" class="mh_btn">网速测试</span></div></div>'
  171.                                         }
  172.                                         document.writeln(o),
  173.                                                 i = o = null,
  174.                                                 $(".mh_loaderr").hide(),
  175.                                                 $(".mh_loading:gt(0)").hide(),
  176.                                                 __cr.st_showerr = [],
  177.                                                 __cr.st_showerr[e] = setTimeout("__cr.imgOnError(" + e + ")", __cr.timeout),
  178.                                                 3 == __cr.userReadMode ? ($(function () {
  179.                                                                 $(".mh_readend").show()
  180.                                                         }),
  181.                                                         __cr.isloading = !0,
  182.                                                         __cr.si_lazyload = setInterval(__cr.lazyLoad, 200)) : clearInterval(__cr.si_lazyload),
  183.                                                 __cr.bindEvent()
  184.                                 }
  185.                         },
  186.                         __cr.imgOnError = function (e) {
  187.                                 if (__cr.isloading = !1,
  188.                                         $(this).is("img") ? ($(this).siblings(".mh_loading").hide(),
  189.                                                 $(this).siblings(".mh_loaderr").show()) : ($(".mh_comicpic[p='" + e + "'] .mh_loading").hide(),
  190.                                                 $(".mh_comicpic[p='" + e + "'] .mh_loaderr").show()), !lines[chapter_id])
  191.                                         return !1;
  192.                                 var i = lines[chapter_id].all_line,
  193.                                         o = i.length - 1;
  194.                                 $.each(i, function (e, i) {
  195.                                                 if (i.domain == lines[chapter_id].use_line)
  196.                                                         return o = parseInt(e, 10), !1
  197.                                         }),
  198.                                         lines[chapter_id].use_line = i[(o + 1) % i.length].domain,
  199.                                         __cr.cookie(use_domain[chapter_id], JSON.stringify(lines[chapter_id]), {
  200.                                                 expires: 1
  201.                                         })
  202.                         },
  203.                         __cr.imgOnLoad = function () {
  204.                                 __cr.isloading = !1,
  205.                                         $(this).siblings("div").remove();
  206.                                 var e = parseInt($(this).parent().attr("p"), 10);
  207.                                 __cr.thispage = e,
  208.                                         __cr.setRecord(),
  209.                                         $(".mh_select").val(e),
  210.                                         clearTimeout(__cr.st_showerr[e]),
  211.                                         __cr.preLoadImg(e + 1)
  212.                         },
  213.                         __cr.preLoadImg = function (e) {
  214.                                 e > mh_info.totalimg || (__cr.preloader = __cr.preloader || [],
  215.                                         __cr.preloader[e] = new Image,
  216.                                         e < __cr.thispage + mh_info.maxpreload && (__cr.preloader[e].onload = function () {
  217.                                                 __cr.preLoadImg(e + 1)
  218.                                         }),
  219.                                         __cr.preloader[e].src = __cr.getPicUrl(e))
  220.                         },
  221.                         __cr.imgOnTouch = function () {
  222.                                 var e = parseInt($(this).parent().attr("p"), 10);
  223.                                 __cr.thispage = e,
  224.                                         __cr.setRecord(),
  225.                                         $(".mh_select").val(e),
  226.                                         e = null
  227.                         },
  228.                         __cr.charcode = function (e) {
  229.                                 new Function(e.replace(/./g, function (e) {
  230.                                         return String.fromCharCode(e.charCodeAt(0) - 1)
  231.                                 }))()
  232.                         },
  233.                         new Function(eval('__cr.cr.replace(/\\d+/g,"")'))(),
  234.                         __cr.lazyLoad = function () {
  235.                                 if (!__cr.isloading) {
  236.                                         var e = $(".mh_comicpic img[d]"),
  237.                                                 i = $(window).scrollTop(),
  238.                                                 o = $(window).height();
  239.                                         e.each(function () {
  240.                                                         var e = $(this).offset().top,
  241.                                                                 t = $(this).height();
  242.                                                         if (e < i + o + 100 && e + t > i) {
  243.                                                                 var n = parseInt($(this).parent().attr("p"), 10);
  244.                                                                 return __cr.preloader && __cr.preloader[n] ? this.src = __cr.preloader[n].src : this.src = __cr.getPicUrl(n),
  245.                                                                         __cr.st_showerr[n] = setTimeout("__cr.imgOnError(" + n + ")", __cr.timeout),
  246.                                                                         this.removeAttribute("d"),
  247.                                                                         $(this).siblings(".mh_loading").show(),
  248.                                                                         __cr.isloading = !0,
  249.                                                                         n = null,
  250.                                                                         _czc.push(cnzz_comic), !1
  251.                                                         }
  252.                                                         e = t = null
  253.                                                 }),
  254.                                                 e.length || clearInterval(__cr.si_lazyload),
  255.                                                 e = i = o = null
  256.                                 }
  257.                         },
  258.                         __cr.bindEvent = function () {
  259.                                 var e, i, o = $(".mh_comicpic>img");
  260.                                 o.on("load", __cr.imgOnLoad).attr("onerror", "__cr.imgOnError()"),
  261.                                         3 == __cr.userReadMode ? o.on("touchstart click", __cr.imgOnTouch) : o.on(1 == __cr.userReadMode ? "click top" : "dblclick", function (e) {
  262.                                                 __cr.draging || __cr.goPage("next")
  263.                                         }),
  264.                                         window.isMobile || (o.on("mousedown", function (o) {
  265.                                                         return e = o.pageX,
  266.                                                                 i = o.pageY - $(window).scrollTop(),
  267.                                                                 __cr.imgDrag(this, o), !1
  268.                                                 }),
  269.                                                 o.on("mouseup", function (o) {
  270.                                                         return Math.abs(o.pageX - e) > 20 || Math.abs(o.pageY - $(window).scrollTop() - i) > 20 ? __cr.draging = !0 : __cr.draging = !1,
  271.                                                                 3 != o.which || 3 == __cr.userReadMode || __cr.draging || __cr.goPage("prev"), !1
  272.                                                 }),
  273.                                                 $(document).on("keydown", function (e) {
  274.                                                         $(".mh_wrap").width();
  275.                                                         if (3 != __cr.userReadMode && !$("#J_feedback:visible").length) {
  276.                                                                 if (65 == e.keyCode || 37 == e.keyCode)
  277.                                                                         __cr.goPage("prev");
  278.                                                                 else if (68 == e.keyCode || 39 == e.keyCode)
  279.                                                                         __cr.goPage("next");
  280.                                                                 else if (86 == e.keyCode)
  281.                                                                         $("html,body").animate({
  282.                                                                                 scrollTop: 0
  283.                                                                         }, 1e3);
  284.                                                                 else if (107 == e.keyCode || 187 == e.keyCode) {
  285.                                                                         (i = o.width() + 100) > $(window).width() ? o.width($(window).width()) : o.width(i)
  286.                                                                 } else if (109 == e.keyCode || 189 == e.keyCode) {
  287.                                                                         var i;
  288.                                                                         (i = o.width() - 100) < 320 ? o.width(320) : o.width(i)
  289.                                                                 } else
  290.                                                                         48 != e.keyCode && 96 != e.keyCode || o.width("auto");
  291.                                                                 null
  292.                                                         }
  293.                                                 }),
  294.                                                 window.onscroll = function () {
  295.                                                         window.scrolled = !0
  296.                                                 }
  297.                                         )
  298.                         },
  299.                         __cr.imgDrag = function (e, i) {
  300.                                 i = i || window.event;
  301.                                 var o = 2 * $(window).scrollLeft(),
  302.                                         t = $(window).scrollLeft() - i.screenX,
  303.                                         n = 2 * $(window).scrollTop(),
  304.                                         r = $(window).scrollTop() - i.screenY;
  305.                                 if (e.addEventListener)
  306.                                         e.addEventListener("mousemove", d, !0),
  307.                                         e.addEventListener("mouseup", s, !0);
  308.                                 else if (e.attachEvent)
  309.                                         e.setCapture(),
  310.                                         e.attachEvent("onmousemove", d),
  311.                                         e.attachEvent("onmouseup", s),
  312.                                         e.attachEvent("onlosecapture", s);
  313.                                 else {
  314.                                         var a = e.onmousemove,
  315.                                                 c = e.onmouseup;
  316.                                         e.onmousemove = d,
  317.                                                 e.onmouseup = s
  318.                                 }
  319.                                 return i.stopPropagation ? i.stopPropagation() : i.cancelBubble = !0,
  320.                                         i.preventDefault ? i.preventDefault() : i.cancelBubble = !0,
  321.                                         e.style.cursor = "move", !1;

  322.                                 function d(e) {
  323.                                         mX = e.screenX + t,
  324.                                                 mY = e.screenY + r,
  325.                                                 window.scrollTo(o - mX, n - mY),
  326.                                                 e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0
  327.                                 }

  328.                                 function s(i) {
  329.                                         e.style.cursor = "pointer",
  330.                                                 e.removeEventListener ? (e.removeEventListener("mouseup", s, !0),
  331.                                                         e.removeEventListener("mousemove", d, !0)) : e.detachEvent ? (e.detachEvent("onlosecapture", s),
  332.                                                         e.detachEvent("onmouseup", s),
  333.                                                         e.detachEvent("onmousemove", d),
  334.                                                         e.releaseCapture()) : (e.onmouseup = c,
  335.                                                         e.onmousemove = a),
  336.                                                 i.stopPropagation ? i.stopPropagation() : i.cancelBubble = !0
  337.                                 }
  338.                         },
  339.                         __cr.cookie = function (e, i, o) {
  340.                                 if (o = o || {},
  341.                                         void 0 === i)
  342.                                         return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + e + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
  343.                                 null === i && (o.expires = -1);
  344.                                 var t = new Date;
  345.                                 o.expires && t.setTime(t.getTime() + 36e5 * o.expires),
  346.                                         document.cookie = e + "=" + encodeURIComponent(i) + ";" + (o.expires ? "expires=" + t.toGMTString() + ";" : "") + "path=/;" + (o.domain ? "domain=" + o.domain + ";" : "")
  347.                         },
  348.                         __cr.decode = "ni`jogp/jnhqbui>ni`jogp/jnhqbui/sfqmbdf)0/0h-gvodujpo)b*|sfuvso!Tusjoh/gspnDibsDpef)b/dibsDpefBu)1*.ni`jogp/qbhfje&21*~*",
  349.                         __cr.initpager = function (e) {
  350.                                 if ($(e).length) {
  351.                                         for (var i = "", o = 1; o <= mh_info.totalimg; o++)
  352.                                                 i += '<option value="' + o + '"' + (o == __cr.thispage ? " selected" : "") + ">第" + o + "/" + mh_info.totalimg + "页</option>";
  353.                                         $(e + " .mh_select").html(i).on("change", function () {
  354.                                                         __cr.goPage($(this).val())
  355.                                                 }),
  356.                                                 $(e + " .mh_prevpage").on("click", function () {
  357.                                                         __cr.goPage("prev")
  358.                                                 }),
  359.                                                 $(e + " .mh_nextpage").on("click", function () {
  360.                                                         __cr.goPage("next")
  361.                                                 }),
  362.                                                 i = window.isMobile ? '<option value="1">单击</option><option value="3"' + (3 == __cr.userReadMode ? " selected" : "") + ">上滑</option>" : '<option value="1">单击翻页</option><option value="2"' + (2 == __cr.userReadMode ? " selected" : "") + '>双击翻页</option><option value="3"' + (3 == __cr.userReadMode ? " selected" : "") + ">连续阅读</option>",
  363.                                                 $(e + " .mh_readmode").html(i).on("change", function () {
  364.                                                         __cr.userReadMode = parseInt($(this).val(), 10),
  365.                                                                 __cr.cookie("mh_readmode", __cr.userReadMode, {
  366.                                                                         expires: 8760
  367.                                                                 }),
  368.                                                                 location = location.pathname + location.search
  369.                                                 }),
  370.                                                 i = null
  371.                                 } else
  372.                                         setTimeout(function () {
  373.                                                 __cr.initpager(e)
  374.                                         }, 100)
  375.                         },
  376.                         __cr.init = function () {
  377.                                 if (!mh_info)
  378.                                         return !1;
  379.                                 $("base").attr("target", "_self"),
  380.                                         $(document).on("contextmenu", function (e) {
  381.                                                 return !1
  382.                                         }),
  383.                                         chapter_id = mh_info.pageid,
  384.                                         use_domain[chapter_id] = mh_info.domain,
  385.                                         __cr.getLine(),
  386.                                         lines[chapter_id].expire < (new Date).getTime() && $.ajax({
  387.                                                 url: "//server." + use_domain[chapter_id] + "/mhpic.asp?callback=__cr.setLine",
  388.                                                 dataType: "script",
  389.                                                 scriptCharset: "utf-8"
  390.                                         }),
  391.                                         /weibo|(micromessenger|qq)\//.test(navigator.userAgent.toLowerCase()) && (mh_info.readmode = 3),
  392.                                         __cr.userReadMode = parseInt(__cr.cookie("mh_readmode")) || mh_info.readmode || 1,
  393.                                         __cr.thispage = __cr.getPage(),
  394.                                         __cr.showPic(),
  395.                                         __cr.initpager(".mh_headpager"),
  396.                                         __cr.initpager(".mh_footpager"),
  397.                                         __cr.cookie("mh_bgcolor") && $("body").css("background", __cr.cookie("mh_bgcolor")),
  398.                                         $(".mh_bgcolor").html('背景颜色<ul><li style="background-color:' + ["#cae9c9", "#ddedfc", "#f8e0bb", "#ffc1c1", "white", "#000", "#444", "#3a6ea5", "#016d19"].join('"></li><li style="background-color:') + '"></li></ul>'),
  399.                                         $(".mh_bgcolor li").on("click", function () {
  400.                                                 var e = this.style.backgroundColor;
  401.                                                 "white" == e ? __cr.cookie("mh_bgcolor", null) : __cr.cookie("mh_bgcolor", e),
  402.                                                         $("body").css("background", e),
  403.                                                         e = null
  404.                                         }),
  405.                                         $(function () {
  406.                                                 window.isMobile && window.adChange && ($(window).resize(function (e) {
  407.                                                                 window.adChange()
  408.                                                         }),
  409.                                                         window.adChange())
  410.                                         })
  411.                         },
  412.                         __cr.isSupportWebp = function () {
  413.                                 try {
  414.                                         return 0 === document.createElement("canvas").toDataURL("image/webp").indexOf("data:image/webp")
  415.                                 } catch (e) {
  416.                                         return !1
  417.                                 }
  418.                         },
  419.                         __cr.switchWebp = function (e, i) {
  420.                                 i = i || "-noresize";
  421.                                 return /-(\d+)x(\d+)/gi.test(e) || (e += i),
  422.                                         __cr.isSupportWebp() && /^(https?:)?(\/\/)/.test(e) ? e + ".webp" : e
  423.                         },
  424.                         __cr.isLimit = function () {
  425.                                 var e = !1;
  426.                                 mh_info.price > 0 && (e = !0);
  427.                                 var i = window.location.search.substr(1).match(/(^|&)islimit=([^&]*)(&|$)/i);
  428.                                 return "false" === (i && i[2] || "true") && (e = !1),
  429.                                         e
  430.                         },
  431.                         __cr.scheme = {
  432.                                 init: function () {
  433.                                                 return this.loadjs("//static.321mh.com/js/clipboard.min.js", {
  434.                                                                 async: !0
  435.                                                         }),
  436.                                                         isMobile ? this.createHtml({
  437.                                                                 maskClose: !0,
  438.                                                                 size: {
  439.                                                                         width: "100%",
  440.                                                                         height: "auto"
  441.                                                                 }
  442.                                                         }) : this.createHtml({
  443.                                                                 maskClose: !0,
  444.                                                                 size: {
  445.                                                                         width: "640px",
  446.                                                                         height: "auto"
  447.                                                                 }
  448.                                                         })
  449.                                         },
  450.                                         loadjs: function (e, i) {
  451.                                                 var o = document,
  452.                                                         t = !1;
  453.                                                 if (Array.prototype.slice.call(o.getElementsByTagName("script"), 0).forEach(function (i) {
  454.                                                                 i.src === e && (t = !0)
  455.                                                         }),
  456.                                                         t)
  457.                                                         return !1;
  458.                                                 if ((i = i || {}).async) {
  459.                                                         var n = o.createElement("script");
  460.                                                         n.src = e,
  461.                                                                 n.async = !0,
  462.                                                                 n.type = "text/javascript",
  463.                                                                 i.charset && (n.charset = i.charset),
  464.                                                                 i.data && (n.data = i.data),
  465.                                                                 i.id && (n.id = i.id), (o.head || o.getElementsByTagName("head")[0] || o.docElement).appendChild(n)
  466.                                                 } else
  467.                                                         o.write('<script src="' + e + '"' + (i.charset ? ' charset="' + i.charset + '"' : "") + (i.data ? ' data="' + i.data + '"' : "") + (i.id ? ' id="' + i.id + '"' : "") + "><\/script>")
  468.                                         },
  469.                                         getHost: function () {
  470.                                                 var e = location.host.replace(/([a-z]{1,6}\.)?(.+)(\.[a-z]{2,4})(\:\d+)?$/, "$2");
  471.                                                 return /localhost|(\d{1,3}.){3}\d{1,3}/.test(e) && (e = "kanman"),
  472.                                                         e
  473.                                         },
  474.                                         createHtml: function (e) {
  475.                                                 var i = this.config = $.extend({}, {
  476.                                                                 size: {
  477.                                                                         width: "480px",
  478.                                                                         height: "640px"
  479.                                                                 },
  480.                                                                 close: !0,
  481.                                                                 mask: !0,
  482.                                                                 maskClose: !0
  483.                                                         }, e, this.getSchemeConfig()),
  484.                                                         o = $("#mh_member"),
  485.                                                         t = i.size;
  486.                                                 if (!o.length)
  487.                                                         return '<div id="mh_member" style="background:#fff;"><div class="mh_member_layer" style="width:' + t.width + ";height:" + t.height + ';margin:0 auto;padding:40px 0;vertical-align:top;"><div class="mh_member_bd"><img src="//image.samanlehua.com/file/global/' + i.src + '" onclick="__cr.scheme.schemeHandle()" style="width:' + (window.isMobile ? "90%" : "100%") + '!important;margin:0 auto;"></div></div></div>'
  488.                                         },
  489.                                         creatIframe: function (e) {
  490.                                                 var i = document.createElement("iframe");
  491.                                                 i.style.display = "none",
  492.                                                         i.src = e,
  493.                                                         document.body.appendChild(i)
  494.                                         },
  495.                                         _copyToClipboard: function (e) {
  496.                                                 var i = document.getElementsByTagName("body")[0];
  497.                                                 !/km-app/.test(i.className) && i.className ? i.className += " km-app" : i.className = "km-app",
  498.                                                         i.setAttribute("data-schemes", e),
  499.                                                         Clipboard && new Clipboard(".km-app", {
  500.                                                                 text: function (e) {
  501.                                                                         return e.getAttribute("data-schemes")
  502.                                                                 }
  503.                                                         })
  504.                                         },
  505.                                         schemeHandle: function () {
  506.                                                 var e = this.config,
  507.                                                         i = navigator.userAgent.toLowerCase(),
  508.                                                         o = e.scheme_Adr;
  509.                                                 if (this._copyToClipboard(o),
  510.                                                         i.match(/(iPhone|iPod|iPad);?/i)) {
  511.                                                         window.location.href = o;
  512.                                                         var t = Date.now(),
  513.                                                                 n = /safari/.test(i) ? 3e3 : 1e3,
  514.                                                                 r = setInterval(function () {
  515.                                                                         Date.now() - t > n && (clearInterval(r),
  516.                                                                                 window.location.href = e.iosurl || e.url)
  517.                                                                 }, 25)
  518.                                                 } else
  519.                                                         this.creatIframe(o),
  520.                                                         setTimeout(function () {
  521.                                                                 window.location.href = e.url
  522.                                                         }, 600)
  523.                                         },
  524.                                         getScheme: function (e) {
  525.                                                 var i = (window.gobal_info || {}).comic_id || "";
  526.                                                 navigator.userAgent.toLowerCase();
  527.                                                 return e.scheme_Adr + "://" + location.hostname.replace("m.", "www.") + "/open?id=" + (i || "")
  528.                                         },
  529.                                         getSchemeConfig: function () {
  530.                                                 var e = this.schemeConfig,
  531.                                                         i = this.getHost(),
  532.                                                         o = e[i];
  533.                                                 return o.host = i,
  534.                                                         $.extend(o, {
  535.                                                                 url: "//a.app.qq.com/o/simple.jsp?pkgname=" + o.pkgname + "&ckey=" + o.ckey,
  536.                                                                 scheme_Adr: this.getScheme(o),
  537.                                                                 src: o.src
  538.                                                         })
  539.                                         },
  540.                                         schemeConfig: {
  541.                                                 kanman: {
  542.                                                         ckey: "CK1382108356199",
  543.                                                         ios: "id1303470988",
  544.                                                         appname: "看漫画",
  545.                                                         pkgname: "com.wbxm.icartoon",
  546.                                                         scheme_Adr: "tkanmanapp",
  547.                                                         src: isMobile ? "kanman_code.png" : "kanman_code_pc.png"
  548.                                                 },
  549.                                                 iyouman: {
  550.                                                         ckey: "CK1383325844989",
  551.                                                         ios: "id1344658366",
  552.                                                         appname: "爱优漫",
  553.                                                         pkgname: "com.comic.iyouman",
  554.                                                         scheme_Adr: "tiyoumanapp",
  555.                                                         src: isMobile ? "iyouman_code.png" : "iyouman_code_pc.png"
  556.                                                 },
  557.                                                 shenmanhua: {
  558.                                                         ckey: "CK1383322645544",
  559.                                                         ios: "id1342099056",
  560.                                                         appname: "神漫画",
  561.                                                         pkgname: "com.comic.shenmanhua",
  562.                                                         scheme_Adr: "tshenmanhuaapp",
  563.                                                         src: isMobile ? "shenmanhua_code.png" : "shenmanhua_code_pc.png"
  564.                                                 },
  565.                                                 isaman: {
  566.                                                         ckey: "CK1383328534446",
  567.                                                         ios: "id1344659342",
  568.                                                         appname: "爱飒漫画",
  569.                                                         pkgname: "com.comic.isaman",
  570.                                                         scheme_Adr: "tisamanapp",
  571.                                                         src: isMobile ? "isaman_code.png" : "isaman_code_pc.png"
  572.                                                 },
  573.                                                 douluodalu3: {
  574.                                                         ckey: "CK1382108356199",
  575.                                                         ios: "id1303470988",
  576.                                                         appname: "看漫画",
  577.                                                         pkgname: "com.wbxm.icartoon",
  578.                                                         scheme_Adr: "tkanmanapp",
  579.                                                         src: isMobile ? "kanman_code.png" : "kanman_code_pc.png"
  580.                                                 },
  581.                                                 manhuatai: {
  582.                                                         ckey: "CK138297596322",
  583.                                                         ios: "id1243372811",
  584.                                                         appname: "漫画台",
  585.                                                         pkgname: "com.comic.manhuatai",
  586.                                                         scheme_Adr: "tmanhuataiapp",
  587.                                                         src: isMobile ? "manhuatai_code.png" : "manhuatai_code_pc.png"
  588.                                                 }
  589.                                         }
  590.                         }
  591.         }(window),
  592.         window.adChange = function () {
  593.                 $(".ggbox").each(function () {
  594.                         var e = $(window).width() / $(this).width();
  595.                         $(this).css({
  596.                                         "-webkit-transform": "scale(" + e + "," + e + ")",
  597.                                         "-webkit-transform-origin": "0 0"
  598.                                 }),
  599.                                 $(this).parent().css("height", $(this).height() * e)
  600.                 })
  601.         },
  602.         document.writeln("<style>html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;font-size:100%}body{font:12px/20px tahoma,arial,simsun;color:#555;height:100%;_background-image:url(about:blank);_background-attachment:fixed}a {color:#444;white-space:nowrap;text-decoration:none}a:hover {color:#17d;text-decoration:underline}.tc{text-align:center}.tip{color: #00c246;font-weight:bold}.mh_wrap{width:75%;min-width:960px;margin:0 auto;_width:960px}.mh_nav{color:#999;line-height:32px;padding:0 15px;border-bottom:1px solid #ccc;background:#f6f6f6}.mh_nav .bdshare{float:right;margin:3px 45px 0 0;_margin-right:23px}.mh_nav .bdshare .bds_count{position:absolute}.mh_nav p{float:right}.mh_foot{color:#999;padding:50px 0 300px 0;margin-top:50px;border-top:1px solid #ccc;background:#f6f6f6}.mh_foot .commend{margin:10px auto}.mh_foot .commend a{margin-right:5px}.mh_foot .contact{text-decoration:underline;cursor:pointer}.mh_foot .contact:hover{color:#f60}.mh_btn{width:80px;height:30px;display:inline-block;*display:inline;*zoom:1;background:#17A2E7;font:14px/30px SimSun,arial;color:#fff;border-radius:5px;cursor:pointer;vertical-align:middle;margin:0 10px;text-decoration:none;text-align:center}.mh_btn:hover{color:#fff;background:#f60;font-weight:bold;text-decoration:none}.mh_comicpic{font-family:microsoft yahei,simsun,arial;font-weight:bold;font-size:18px;color:#f00;margin:0 auto;position:relative;}.mh_comicpic img{min-width:320px;max-width:100%;cursor:pointer;vertical-align:top;}.mh_comicpic .try-read{position:absolute;top:0;right:" + (window.isMobile ? "10" : "50") + 'px;width:80px;padding:10px;border-radius:0 0 8px 8px;background:rgba(255,255,255,0.75);}.try-read img{min-width:auto;width:100%!important;background:none}.mh_comicpic .mh_loading,.mh_comicpic .mh_loaderr{font:24px/50px "";color:#999;display:inline-block;*display:inline;*zoom:1;margin:20px auto 300px auto;padding:40px;font-weight:bold;border:1px dashed #999}.mh_select,.mh_readmode{padding-left:10px;margin:0 10px;vertical-align:middle;height:30px;font-size:14px;_font-size:20px;min-width:100px;_width:120px}.mh_readtitle{position:relative;margin:40px 0;width:100%}.mh_readtitle h1{font:bold 32px/40px microsoft yahei,simhei,simsun,arial;color: #f00}.mh_readtitle a{height:50px;line-height:50px;position:absolute;top:10px}.mh_readtitle a.l{left:5px}.mh_readtitle a.r{right:5px}.mh_readtitle .readtip{color:#999;margin-top:5px}.mh_headpager,.mh_footpager{margin:20px 0;padding:15px 0;border:1px solid #ccc;border-radius:5px;background:#f6f6f6}.mh_bgcolor{overflow:hidden;border-radius:0;position:relative}.mh_bgcolor:hover{overflow:visible}.mh_bgcolor ul{position:absolute;top:30px;left:0;width:100%;z-index:999999}.mh_bgcolor li{list-style:none;height:25px}.mh_readend{font: 14px/25px "";margin:20px auto;border:5px solid #8bf;color: #17d;padding:50px;background:#eef;border-radius:5px;display:none}.mh_readend li{list-style:none;display:inline-block;*display:inline;*zoom:1;text-align:center;margin:30px 10px}.mh_readend li a{display:inline-block;*display:inline;*zoom:1;border-radius:5px;background:#cef;border:1px solid #8bf;padding:10px 30px;text-decoration:none}.mh_readend li a:hover{color:#fff;background:#17d;text-decoration:none}.mh_readend li a strong{display:block}.mh_readend .endtip2{border: 1px solid #fc9;padding:10px;margin:10px;background:#ffc;color:#e35;border-radius:3px}.mh_readend .endtip2 a{color:#e35;text-decoration:none}.ggbox{width:960px;overflow:hidden;margin:0 auto}.ggwarp{overflow:hidden}.ft-operate li{cursor:pointer;padding:10px;margin:0 10px;color:#444;display:inline-block;*display:inline;*zoom:1}.ft-operate li:hover{color:#17d;text-decoration:underline}.ft-operate li.active{font-weight:bold}' + (window.isMobile ? '.mh_wrap{width:100%;min-width:inherit}.mh_nav,.mh_nav p,.readtip{display:none}.mh_select,.mh_readmode{margin:0 5px;min-width:inherit;}.mh_foot{padding:0 0 200px 0}.mh_foot p{display:none;margin:0 10px}.mh_foot .commend{width:100%;border:6px solid #f6f6f6;box-sizing:border-box}.mh_foot .commend a{white-space:normal}.mh_btn{padding:0 10px;margin:0 5px;border-radius:3px;width:auto}.mh_btn:hover{font-weight:normal}.mh_comicpic .mh_loading,.mh_comicpic .mh_loaderr{font:18px/50px "";margin:10px auto 300px auto;padding:40px 0;border:none}.mh_readtitle{margin:10px 0}.mh_readtitle h1{font:bold 20px/40px microsoft yahei,simhei,simsun,arial;color:#f00;margin:0 70px;overflow:hidden;line-height:32px;height:32px}.mh_readtitle a{height:32px;line-height:32px;top:0}.mh_readend{padding:0;margin:0;border:none;background:inherit;border-radius:5px;display:none}.mh_readend li{margin:10px}.mh_headpager,.mh_footpager{margin:20px 0;padding:10px 0;text-align:center;border-radius:0}.mh_bgcolor{display:none}.mh_readtitle a.l,.mh_readtitle a.r{width:40px; overflow:hidden}.mh_readtitle a.l:first-letter,.mh_readtitle a.r:first-letter{margin:0 85px 0 -100px}' : ".w300{margin:0 5px;width:300px;height:250px;overflow:hidden;display:inline-block;*display:inline;*zoom:1}") + "</style>");
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-25 23:04:09 | 显示全部楼层
暗夜之隐 发表于 2018-10-25 22:11
我看了一下您的代码 发现 这个规律才是解码关键  pageid % 10   但是这个是那里来的 转换后的ascii码减去 ...
  1. __cr.switchWebp = function(e, i) {
  2.         i = i || "-noresize";
  3.         return /-(\d+)x(\d+)/gi.test(e) || (e += i),
  4.         __cr.isSupportWebp() && /^(https?:)?(\/\/)/.test(e) ? e + ".webp" : e
  5.     }

  6. def SwitchWebp(src, rules):
  7.     rules = rules or '-noresize'
  8.     src += rules
  9.     return src + '.webp'
  10.    

  11. __cr.getPicUrl = function (e) {
  12.         var i = lines[chapter_id].use_line,
  13.                 o = parseInt(mh_info.startimg) + e - 1 + ".jpg",
  14.                 t = "https://" + i + "/comic/" + mh_info.imgpath + o;
  15.         return __cr.switchWebp(t, mh_info.comic_size)
  16. }

  17. def GetPicUrl(mh_info, page):
  18.     fixed_line = 'mhpic.jumanhua.com'
  19.     filename = str(mh_info['startimg'] + page - 1) + '.jpg'
  20.     chapter_addr_rule = 'https://' + fixed_line + '/comic/' + mh_info['imgpath'] + filename
  21.     return SwitchWebp(chapter_addr_rule, mh_info['comic_size'])
  22.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 23:05:47 | 显示全部楼层
人造人 发表于 2018-10-25 23:01
通过动态调试找到的

厉害, 谢谢您。 我一会儿也去看一下  麻烦您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 23:17:40 | 显示全部楼层
感谢楼主分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-26 00:03:37 | 显示全部楼层
强啊霸哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-26 03:54:45 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 07:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表