为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、E-Hentai(关联外站、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、再漫画、漫画柜(manhuagui)、动漫屋(dm5)、mangabz、komiic、無限動漫、绅士漫画(wnacg)、禁漫天堂、NoyAcg、熱辣漫畫、hanime1、hitomi、hdoujin、SchaleNetwork、nude-moon、HentaiZap、IMHentai、HentaiEra、HentaiEnvy、MangaDex、welovemanga、kemono、nekohouse、Pixiv、明日方舟泰拉记事社、最前線、芸能ヌード、Tachidesk、LANraragi
< Părere la script-ul ComicRead
拷贝是在昨天失效的,目前还没找到办法解决,不过其他网站我这边测试都是正常的,你使用的浏览器和油猴扩展是什么?
拷贝是在昨天失效的,目前还没找到办法解决,不过其他网站我这边测试都是正常的,你使用的浏览器和油猴扩展是什么?
浏览器是360急速浏览器,谷歌内核122的,油猴拓展是篡改猴5.4.6228
相同配置试了下也是正常的。。。你是具体哪个网站不生效了?
相同配置试了下也是正常的。。。你是具体哪个网站不生效了?
https://www.mangacopy.com/
https://www.copy20.com/
https://www.2025copy.com/
拷贝漫画都失效了
拷贝是因为15号拷贝升级了限制导致的,目前我还找不到办法所以无能为力😢
只有拷贝是吗?其他漫画网站没问题吧?
拷贝是因为15号拷贝升级了限制导致的,目前我还找不到办法所以无能为力😢
只有拷贝是吗?其他漫画网站没问题吧?
昨天升级后阅读模式能用了,其他网站没试过,主要用的还是拷贝,拷贝对IP可能做限制了,不翻墙脚本读不出最后浏览的话数,也读不出评论,直接显示无法读取。
api不行的話,可以直接解密閱讀頁的加密變數。
const decrypt = async () => {
// 取得代碼
const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent;
// 取得解碼key,key的變數名不固定。
// 熱辣放在.disPass[contentkey]
let a_index = code.indexOf("'") + 1;
let b_index = code.indexOf("'", a_index);
const decrypt_key = code.slice(a_index, b_index);
console.log(decrypt_key);
// 取得加密數據
// 熱辣放在.disData[contentkey]
a_index = code.indexOf("contentKey");
b_index = code.indexOf("'", a_index) + 1;
let c_index = code.indexOf("'", b_index);
const raw = code.slice(b_index, c_index);
console.log(raw);
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const dioKey = encoder.encode(decrypt_key);
const header = raw.substring(0, 16);
const body = raw.substring(16);
const iv = encoder.encode(header);
const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
const cryptoKey = await crypto.subtle.importKey("raw", dioKey, {
name: "AES-CBC"
}, false, ["decrypt"]);
const decryptedBytes = await crypto.subtle.decrypt({
name: "AES-CBC",
iv
}, cryptoKey, bodyBytes);
const stringData = await decoder.decode(decryptedBytes);
console.log(stringData);
const images = JSON.parse(stringData).map(({
url
}) => url);
console.log(images);
};
decrypt();
跟解密漫畫目錄數據的方法應該是一樣的。
api不行的話,可以直接解密閱讀頁的加密變數。
const decrypt = async () => { // 取得代碼 const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent; // 取得解碼key,key的變數名不固定。 // 熱辣放在.disPass[contentkey] let a_index = code.indexOf("'") + 1; let b_index = code.indexOf("'", a_index); const decrypt_key = code.slice(a_index, b_index); console.log(decrypt_key); // 取得加密數據 // 熱辣放在.disData[contentkey] a_index = code.indexOf("contentKey"); b_index = code.indexOf("'", a_index) + 1; let c_index = code.indexOf("'", b_index); const raw = code.slice(b_index, c_index); console.log(raw); const encoder = new TextEncoder(); const decoder = new TextDecoder(); const dioKey = encoder.encode(decrypt_key); const header = raw.substring(0, 16); const body = raw.substring(16); const iv = encoder.encode(header); const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); const cryptoKey = await crypto.subtle.importKey("raw", dioKey, { name: "AES-CBC" }, false, ["decrypt"]); const decryptedBytes = await crypto.subtle.decrypt({ name: "AES-CBC", iv }, cryptoKey, bodyBytes); const stringData = await decoder.decode(decryptedBytes); console.log(stringData); const images = JSON.parse(stringData).map(({ url }) => url); console.log(images); }; decrypt();跟解密漫畫目錄數據的方法應該是一樣的。
编程苦手,虽然不知道怎么搞,但是还是要感谢大佬
搜索
漫画不存在时才会出现的提示
把往下兩行的13870行
setState('comicMap'
替換成
setState('comicMap', '', {
async getImgList() {
setState('manga', {
onNext: helper.querySelectorClick('.comicContent-next a:not(.prev-null)'),
onPrev: helper.querySelectorClick('.comicContent-prev:not(.index,.list) a:not(.prev-null)')
});
const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent;
let a_index = code.indexOf("'") + 1;
let b_index = code.indexOf("'", a_index);
const decrypt_key = code.slice(a_index, b_index);
a_index = code.indexOf("contentKey");
b_index = code.indexOf("'", a_index) + 1;
let c_index = code.indexOf("'", b_index);
const raw = code.slice(b_index, c_index);
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const dioKey = encoder.encode(decrypt_key);
const header = raw.substring(0, 16);
const body = raw.substring(16);
const iv = encoder.encode(header);
const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
const cryptoKey = await crypto.subtle.importKey("raw", dioKey, {
name: "AES-CBC"
}, false, ["decrypt"]);
const decryptedBytes = await crypto.subtle.decrypt({
name: "AES-CBC",
iv
}, cryptoKey, bodyBytes);
const stringData = await decoder.decode(decryptedBytes);
const images = JSON.parse(stringData).map(({
url
}) => url);
return images;
}
});
搜索
漫画不存在时才会出现的提示
把往下兩行的13870行
setState('comicMap'
替換成setState('comicMap', '', { async getImgList() { setState('manga', { onNext: helper.querySelectorClick('.comicContent-next a:not(.prev-null)'), onPrev: helper.querySelectorClick('.comicContent-prev:not(.index,.list) a:not(.prev-null)') }); const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent; let a_index = code.indexOf("'") + 1; let b_index = code.indexOf("'", a_index); const decrypt_key = code.slice(a_index, b_index); a_index = code.indexOf("contentKey"); b_index = code.indexOf("'", a_index) + 1; let c_index = code.indexOf("'", b_index); const raw = code.slice(b_index, c_index); const encoder = new TextEncoder(); const decoder = new TextDecoder(); const dioKey = encoder.encode(decrypt_key); const header = raw.substring(0, 16); const body = raw.substring(16); const iv = encoder.encode(header); const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); const cryptoKey = await crypto.subtle.importKey("raw", dioKey, { name: "AES-CBC" }, false, ["decrypt"]); const decryptedBytes = await crypto.subtle.decrypt({ name: "AES-CBC", iv }, cryptoKey, bodyBytes); const stringData = await decoder.decode(decryptedBytes); const images = JSON.parse(stringData).map(({ url }) => url); return images; } });
膜拜大佬!
搜索
漫画不存在时才会出现的提示
把往下兩行的13870行
setState('comicMap'
替換成setState('comicMap', '', { async getImgList() { setState('manga', { onNext: helper.querySelectorClick('.comicContent-next a:not(.prev-null)'), onPrev: helper.querySelectorClick('.comicContent-prev:not(.index,.list) a:not(.prev-null)') }); const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent; let a_index = code.indexOf("'") + 1; let b_index = code.indexOf("'", a_index); const decrypt_key = code.slice(a_index, b_index); a_index = code.indexOf("contentKey"); b_index = code.indexOf("'", a_index) + 1; let c_index = code.indexOf("'", b_index); const raw = code.slice(b_index, c_index); const encoder = new TextEncoder(); const decoder = new TextDecoder(); const dioKey = encoder.encode(decrypt_key); const header = raw.substring(0, 16); const body = raw.substring(16); const iv = encoder.encode(header); const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); const cryptoKey = await crypto.subtle.importKey("raw", dioKey, { name: "AES-CBC" }, false, ["decrypt"]); const decryptedBytes = await crypto.subtle.decrypt({ name: "AES-CBC", iv }, cryptoKey, bodyBytes); const stringData = await decoder.decode(decryptedBytes); const images = JSON.parse(stringData).map(({ url }) => url); return images; } });
大佬,读取上次阅读记录是成功了,但是阅读模式没了。。。感觉还是有点复杂啊。。。
大佬,读取上次阅读记录是成功了,但是阅读模式没了。。。感觉还是有点复杂啊。。。
我自己改了後是能用的,不行的話就等作者更新。
或者可以用我的腳本先頂一下
https://sleazyfork.org/scripts/463305
api不行的話,可以直接解密閱讀頁的加密變數。
const decrypt = async () => { // 取得代碼 const code = [...document.scripts].find(script => script.textContent.includes("contentKey")).textContent; // 取得解碼key,key的變數名不固定。 // 熱辣放在.disPass[contentkey] let a_index = code.indexOf("'") + 1; let b_index = code.indexOf("'", a_index); const decrypt_key = code.slice(a_index, b_index); console.log(decrypt_key); // 取得加密數據 // 熱辣放在.disData[contentkey] a_index = code.indexOf("contentKey"); b_index = code.indexOf("'", a_index) + 1; let c_index = code.indexOf("'", b_index); const raw = code.slice(b_index, c_index); console.log(raw); const encoder = new TextEncoder(); const decoder = new TextDecoder(); const dioKey = encoder.encode(decrypt_key); const header = raw.substring(0, 16); const body = raw.substring(16); const iv = encoder.encode(header); const bodyBytes = new Uint8Array(body.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); const cryptoKey = await crypto.subtle.importKey("raw", dioKey, { name: "AES-CBC" }, false, ["decrypt"]); const decryptedBytes = await crypto.subtle.decrypt({ name: "AES-CBC", iv }, cryptoKey, bodyBytes); const stringData = await decoder.decode(decryptedBytes); console.log(stringData); const images = JSON.parse(stringData).map(({ url }) => url); console.log(images); }; decrypt();跟解密漫畫目錄數據的方法應該是一樣的。
非常感谢你的代码!你要是有在 github 上回复就好了,greasyfork 的评论混在一起一个不小心就会漏看,搞得我现在才看到你的代码。。。
最新版本阅读模式怎么不生效了。。。开哪个漫画网站都不生效,拷贝直出,吐槽也看不见了