Skip to content

Commit 58c9912

Browse files
committed
fix: nhentai route
1 parent 12a519f commit 58c9912

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

lib/routes/nhentai/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const route: Route = {
1717
antiCrawler: true,
1818
supportBT: true,
1919
nsfw: true,
20+
requirePuppeteer: true,
2021
},
2122
radar: [
2223
{

lib/routes/nhentai/search.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const route: Route = {
1212
features: {
1313
antiCrawler: true,
1414
supportBT: true,
15+
requirePuppeteer: true,
1516
},
1617
radar: [
1718
{

lib/routes/nhentai/util.ts

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { load } from 'cheerio';
22
import got from '@/utils/got';
33
import ofetch from '@/utils/ofetch';
4+
import puppeteer from '@/utils/puppeteer';
45
import { config } from '@/config';
56
import { parseDate } from '@/utils/parse-date';
67
import { art } from '@/utils/render';
@@ -65,16 +66,23 @@ const getCookie = async (username, password, cache) => {
6566
return userTokenCookie;
6667
};
6768

68-
const oFetch = (url, ...options) =>
69-
ofetch(url, {
70-
...options,
71-
headers: {
72-
host: 'nhentai.net',
73-
},
69+
const puppeteerGet = async (url) => {
70+
const browser = await puppeteer();
71+
const page = await browser.newPage();
72+
await page.setRequestInterception(true);
73+
page.on('request', (request) => {
74+
request.resourceType() === 'document' ? request.continue() : request.abort();
7475
});
76+
await page.goto(url, {
77+
waitUntil: 'domcontentloaded',
78+
});
79+
const html = await page.evaluate(() => document.documentElement.innerHTML);
80+
await browser.close();
81+
return html;
82+
};
7583

7684
const getSimple = async (url) => {
77-
const data = await oFetch(url);
85+
const data = await puppeteerGet(url);
7886
const $ = load(data);
7987

8088
return $('.gallery a.cover')
@@ -103,6 +111,7 @@ const parseSimpleDetail = ($ele) => {
103111
const highResoThumbSrc = thumbSrc
104112
.replace('thumb', '1')
105113
.replace(/t(\d+)\.nhentai\.net/, 'i$1.nhentai.net')
114+
.replace(/\.(jpg|png|gif)\.webp$/, '.$1')
106115
.replace('.webp.webp', '.webp');
107116
return {
108117
title: $ele.children('.caption').text(),
@@ -113,17 +122,25 @@ const parseSimpleDetail = ($ele) => {
113122

114123
const getTorrent = async (simple, cookie) => {
115124
const { link } = simple;
116-
const response = await oFetch(link + 'download', { followRedirect: false, responseType: 'buffer', headers: { Cookie: cookie } });
125+
const browser = await puppeteer();
126+
const page = await browser.newPage();
127+
await page.setCookie(...cookie.split(';').map(c => {
128+
const [name, value] = c.trim().split('=');
129+
return { name, value, domain: 'nhentai.net' };
130+
}));
131+
const response = await page.goto(link + 'download', { waitUntil: 'networkidle2' });
132+
const buffer = await response.buffer();
133+
await browser.close();
117134
return {
118135
...simple,
119-
enclosure_url: response,
136+
enclosure_url: buffer,
120137
enclosure_type: 'application/x-bittorrent',
121138
};
122139
};
123140

124141
const getDetail = async (simple) => {
125142
const { link } = simple;
126-
const data = await oFetch(link);
143+
const data = await puppeteerGet(link);
127144
const $ = load(data);
128145

129146
const galleryImgs = $('.gallerythumb img')

0 commit comments

Comments
 (0)