11import { load } from 'cheerio' ;
22import got from '@/utils/got' ;
3- import ofetch from '@/utils/ofetch ' ;
3+ import puppeteer from '@/utils/puppeteer ' ;
44import { config } from '@/config' ;
55import { parseDate } from '@/utils/parse-date' ;
66import { art } from '@/utils/render' ;
@@ -65,16 +65,23 @@ const getCookie = async (username, password, cache) => {
6565 return userTokenCookie ;
6666} ;
6767
68- const oFetch = ( url , ... options ) =>
69- ofetch ( url , {
70- ... options ,
71- headers : {
72- host : 'nhentai.net' ,
73- } ,
68+ const puppeteerGet = async ( url ) => {
69+ const browser = await puppeteer ( ) ;
70+ const page = await browser . newPage ( ) ;
71+ await page . setRequestInterception ( true ) ;
72+ page . on ( 'request' , ( request ) => {
73+ request . resourceType ( ) === 'document' ? request . continue ( ) : request . abort ( ) ;
7474 } ) ;
75+ await page . goto ( url , {
76+ waitUntil : 'domcontentloaded' ,
77+ } ) ;
78+ const html = await page . evaluate ( ( ) => document . documentElement . innerHTML ) ;
79+ await browser . close ( ) ;
80+ return html ;
81+ } ;
7582
7683const getSimple = async ( url ) => {
77- const data = await oFetch ( url ) ;
84+ const data = await puppeteerGet ( url ) ;
7885 const $ = load ( data ) ;
7986
8087 return $ ( '.gallery a.cover' )
@@ -103,6 +110,7 @@ const parseSimpleDetail = ($ele) => {
103110 const highResoThumbSrc = thumbSrc
104111 . replace ( 'thumb' , '1' )
105112 . replace ( / t ( \d + ) \. n h e n t a i \. n e t / , 'i$1.nhentai.net' )
113+ . replace ( / \. ( j p g | p n g | g i f ) \. w e b p $ / , '.$1' )
106114 . replace ( '.webp.webp' , '.webp' ) ;
107115 return {
108116 title : $ele . children ( '.caption' ) . text ( ) ,
@@ -113,17 +121,25 @@ const parseSimpleDetail = ($ele) => {
113121
114122const getTorrent = async ( simple , cookie ) => {
115123 const { link } = simple ;
116- const response = await oFetch ( link + 'download' , { followRedirect : false , responseType : 'buffer' , headers : { Cookie : cookie } } ) ;
124+ const browser = await puppeteer ( ) ;
125+ const page = await browser . newPage ( ) ;
126+ await page . setCookie ( ...cookie . split ( ';' ) . map ( c => {
127+ const [ name , value ] = c . trim ( ) . split ( '=' ) ;
128+ return { name, value, domain : 'nhentai.net' } ;
129+ } ) ) ;
130+ const response = await page . goto ( link + 'download' , { waitUntil : 'networkidle2' } ) ;
131+ const buffer = await response . buffer ( ) ;
132+ await browser . close ( ) ;
117133 return {
118134 ...simple ,
119- enclosure_url : response ,
135+ enclosure_url : buffer ,
120136 enclosure_type : 'application/x-bittorrent' ,
121137 } ;
122138} ;
123139
124140const getDetail = async ( simple ) => {
125141 const { link } = simple ;
126- const data = await oFetch ( link ) ;
142+ const data = await puppeteerGet ( link ) ;
127143 const $ = load ( data ) ;
128144
129145 const galleryImgs = $ ( '.gallerythumb img' )
0 commit comments