mirror of
https://github.com/RicterZ/nhentai.git
synced 2025-04-19 18:31:24 +02:00
bypass the challenge
This commit is contained in:
parent
f74be0c665
commit
9160b38c3f
@ -14,6 +14,7 @@ SEARCH_URL = '%s/search/' % BASE_URL
|
||||
TAG_URL = '%s/tag' % BASE_URL
|
||||
TAG_API_URL = '%s/api/galleries/tagged' % BASE_URL
|
||||
LOGIN_URL = '%s/login/' % BASE_URL
|
||||
CHALLENGE_URL = '%s/challenge' % BASE_URL
|
||||
FAV_URL = '%s/favorites/' % BASE_URL
|
||||
|
||||
u = urlparse(BASE_URL)
|
||||
|
@ -5,6 +5,7 @@ import os
|
||||
import re
|
||||
import threadpool
|
||||
import requests
|
||||
import time
|
||||
from bs4 import BeautifulSoup
|
||||
from tabulate import tabulate
|
||||
|
||||
@ -13,6 +14,10 @@ from nhentai.logger import logger
|
||||
|
||||
|
||||
session = requests.Session()
|
||||
session.headers.update({
|
||||
'Referer': constant.LOGIN_URL,
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
|
||||
})
|
||||
|
||||
|
||||
def request(method, url, **kwargs):
|
||||
@ -23,17 +28,21 @@ def request(method, url, **kwargs):
|
||||
return getattr(session, method)(url, proxies=constant.PROXY, verify=False, **kwargs)
|
||||
|
||||
|
||||
def login(username, password):
|
||||
global session
|
||||
request('get', url=constant.LOGIN_URL)
|
||||
session.headers.update({'Referer': constant.LOGIN_URL})
|
||||
content = request('get', url=constant.LOGIN_URL).content
|
||||
def _get_csrf_token(content):
|
||||
html = BeautifulSoup(content, 'html.parser')
|
||||
csrf_token_elem = html.find('input', attrs={'name': 'csrfmiddlewaretoken'})
|
||||
|
||||
if not csrf_token_elem:
|
||||
raise Exception('Cannot find csrf token to login')
|
||||
csrf_token = csrf_token_elem.attrs['value']
|
||||
return csrf_token_elem.attrs['value']
|
||||
|
||||
|
||||
def login(username, password):
|
||||
csrf_token = _get_csrf_token(request('get', url=constant.LOGIN_URL).content)
|
||||
if os.getenv('DEBUG'):
|
||||
logger.info('Getting CSRF token ...')
|
||||
|
||||
if os.getenv('DEBUG'):
|
||||
logger.info('CSRF token is {}'.format(csrf_token))
|
||||
|
||||
login_dict = {
|
||||
'csrfmiddlewaretoken': csrf_token,
|
||||
@ -41,16 +50,26 @@ def login(username, password):
|
||||
'password': password,
|
||||
}
|
||||
resp = request('post', url=constant.LOGIN_URL, data=login_dict)
|
||||
if 'Invalid username/email or password' in resp.text:
|
||||
|
||||
if 'You\'re loading pages way too quickly.' in resp.content:
|
||||
csrf_token = _get_csrf_token(resp.content)
|
||||
resp = request('post', url=resp.url, data={'csrfmiddlewaretoken': csrf_token, 'next': '/'})
|
||||
|
||||
if 'Invalid username/email or password' in resp.content:
|
||||
logger.error('Login failed, please check your username and password')
|
||||
exit(1)
|
||||
|
||||
if 'You\'re loading pages way too quickly.' in resp.content:
|
||||
logger.error('You meet challenge again, please submit a issue at https://github.com/RicterZ/nhentai/issues')
|
||||
exit(2)
|
||||
|
||||
|
||||
def login_parser():
|
||||
html = BeautifulSoup(request('get', constant.FAV_URL).content, 'html.parser')
|
||||
count = html.find('span', attrs={'class': 'count'})
|
||||
if not count:
|
||||
logger.error("Can't get your number of favorited doujins. Did the login failed?")
|
||||
return
|
||||
|
||||
count = int(count.text.strip('(').strip(')').replace(',', ''))
|
||||
if count == 0:
|
||||
|
Loading…
x
Reference in New Issue
Block a user