污污漫画
https://www.comicbox.xyz
zpccool (13551) 1天前 下载:522
漫画 comic
comicbox real parser
// @name 污污漫画
// @uuid wuwumanhua
// @version 1.0.1
// @author Ai
// @url https://www.comicbox.xyz
// @type comic
// @enabled true
// @tags comic
// @description comicbox real parser
var BASE = 'https://www.comicbox.xyz';
var HEADERS = { 'User-Agent': 'Mozilla/5.0 Legado' };
var CATEGORIES = ['热门', '全部', 'Fate', '东方', '原神', '汉化', '日漫', '韩漫', '单行本', '长篇', '短篇'];
function abs(href) { if (!href) return ''; return href.indexOf('http') === 0 ? href : BASE + href; }
function clean(s) { return (s || '').replace(/\s+/g, ' ').trim(); }
function parseCards(html, selector) {
var doc = legado.dom.parse('' + html);
var cards = legado.dom.selectAll(doc, selector || '.sp-search-card, .sp-booklist-card');
var out = [], seen = {};
for (var i = 0; i < cards.length; i++) {
var href = legado.dom.attr(cards[i], 'href') || '';
if (href.indexOf('/book/') < 0) continue;
var url = abs(href);
if (seen[url]) continue;
seen[url] = true;
var name = legado.dom.attr(cards[i], 'title') || legado.dom.selectText(cards[i], '.sp-search-card-title') || legado.dom.selectText(cards[i], '.sp-booklist-title') || '';
var intro = legado.dom.selectText(cards[i], '.sp-search-card-desc') || legado.dom.selectText(cards[i], '.sp-booklist-desc') || '';
var img = legado.dom.select(cards[i], 'img, .cropped');
var cover = img ? (legado.dom.attr(img, 'data-src') || legado.dom.attr(img, 'src') || '') : '';
if (name) out.push({ name: clean(name), bookUrl: url, tocUrl: url, coverUrl: cover, intro: clean(intro), author: '', kind: '' });
}
legado.dom.free(doc);
return out;
}
async function search(keyword, page) {
if (page > 1) return [];
return parseCards(await legado.http.get(BASE + '/search?keyword=' + encodeURIComponent(keyword), HEADERS), '.sp-search-card');
}
async function bookInfo(bookUrl) {
var html = await legado.http.get(bookUrl, HEADERS);
var doc = legado.dom.parse('' + html);
var name = legado.dom.selectAttr(doc, 'meta[property="og:title"]', 'content') || legado.dom.selectText(doc, 'h1.sp-book-title') || legado.dom.selectText(doc, 'h1') || '';
var cover = legado.dom.selectAttr(doc, 'meta[property="og:image"]', 'content') || '';
var intro = legado.dom.selectAttr(doc, 'meta[property="og:description"]', 'content') || legado.dom.selectText(doc, '.sp-book-summary') || '';
var tags = [];
var tagEls = legado.dom.selectAll(doc, '.sp-book-tags .sp-book-tag, .sp-book-tag');
for (var i = 0; i < tagEls.length; i++) tags.push(clean(legado.dom.text(tagEls[i])));
var ch = legado.dom.selectAll(doc, '.sp-chapter-grid a.sp-chapter-item');
var last = ch.length ? (legado.dom.attr(ch[ch.length - 1], 'title') || clean(legado.dom.text(ch[ch.length - 1]))) : '';
legado.dom.free(doc);
return { name: clean(name), bookUrl: bookUrl, tocUrl: bookUrl, coverUrl: cover, intro: clean(intro), author: '', kind: tags.join(','), lastChapter: clean(last), latestChapter: clean(last) };
}
async function chapterList(tocUrl) {
var html = await legado.http.get(tocUrl, HEADERS);
var doc = legado.dom.parse('' + html);
var els = legado.dom.selectAll(doc, '.sp-chapter-grid a.sp-chapter-item, a.sp-chapter-item');
var out = [];
for (var i = 0; i < els.length; i++) {
var href = legado.dom.attr(els[i], 'href') || '';
var name = legado.dom.attr(els[i], 'title') || clean(legado.dom.text(els[i]));
if (href && name) out.push({ name: name, url: abs(href) });
}
legado.dom.free(doc);
return out;
}
async function chapterContent(chapterUrl) {
var id = legado.browser.acquire('comicbox');
try {
legado.browser.navigate(id, chapterUrl, { waitUntil: 'networkidle', timeoutSecs: 25 });
var imgs = legado.browser.eval(id, 'var a=[];document.querySelectorAll("img").forEach(function(i){var u=i.src||i.dataset.src||i.dataset.original||"";if(u&&u.indexOf("/static/")<0)a.push(u)});return a;');
return JSON.stringify(imgs || []);
} finally { legado.browser.close(id); }
}
async function explore(page, category) {
if (!category || category === 'GETALL') return CATEGORIES;
var url = category === '热门' ? BASE + '/index' : BASE + '/booklist?tag=' + encodeURIComponent(category) + '&area=-1&end=-1&page=' + (page || 1);
return parseCards(await legado.http.get(url, HEADERS), category === '热门' ? '.sp-bcarousel-item, .sp-booklist-card' : '.sp-booklist-card');
}