83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
from sys import exit
|
|
from time import sleep
|
|
|
|
from manga_py.fs import get_util_home_path, path_join, is_file, unlink
|
|
from .e_hentai_org import EHentaiOrg
|
|
|
|
|
|
from lxml.html import HtmlElement
|
|
|
|
|
|
class ExHentaiOrg(EHentaiOrg):
|
|
__uri = 'https://forums.e-hentai.org/index.php?act=Login&CODE={}'
|
|
cookie_file = None
|
|
|
|
def prepare_cookies(self):
|
|
super().prepare_cookies()
|
|
|
|
self.cookie_file = path_join(get_util_home_path(), 'cookies_exhentai.dat')
|
|
if is_file(self.cookie_file):
|
|
with open(self.cookie_file, 'r') as r:
|
|
self._storage['cookies'] = self.json.loads(r.read())
|
|
self.http().cookies = self._storage['cookies'].copy()
|
|
else:
|
|
action, method, form_data = self.prepare_form()
|
|
content = self.http().requests(action, data=form_data, method=method.lower())
|
|
if not ~content.text.find('You are now logged in as:'):
|
|
self.log('Wrong password?')
|
|
sleep(.1)
|
|
exit()
|
|
else:
|
|
with open(self.cookie_file, 'w') as w:
|
|
w.write(self.json.dumps(self._storage['cookies']))
|
|
|
|
sleep(5)
|
|
|
|
if not self.check_panda():
|
|
self.log('Panda detected. Please, try again')
|
|
exit(1)
|
|
|
|
def prepare_form(self):
|
|
# Login on e-hentai!
|
|
name = self.quest([], 'Request login on e-hentai.org')
|
|
password = self.quest_password('Request password on e-hentai.org\n')
|
|
|
|
selectors = [
|
|
'input[type="hidden"]',
|
|
'input[checked]',
|
|
'input[type="submit"]',
|
|
]
|
|
|
|
form_data = {
|
|
'UserName': name,
|
|
'PassWord': password,
|
|
}
|
|
prepare = self.http_get(self.__uri.format('00'))
|
|
parser = self.document_fromstring(prepare, 'form[name="LOGIN"]')[0] # type: HtmlElement
|
|
action = parser.get('action', self.__uri.format('01'))
|
|
method = parser.get('method', 'get')
|
|
for i in parser.cssselect(','.join(selectors)): # type: HtmlElement
|
|
form_data[i.get('name')] = i.get('value')
|
|
|
|
return action, method, form_data
|
|
|
|
def check_panda(self):
|
|
success = True
|
|
req = self.http().requests('https://exhentai.org/', method='head')
|
|
if ~req.headers['Content-Type'].find('image/'):
|
|
"""
|
|
if authorization was not successful
|
|
"""
|
|
self.log('Sad panda detected')
|
|
# self.log('Cookies:\n')
|
|
# self.log(self.http().cookies, '\n')
|
|
self.http().cookies = {}
|
|
unlink(self.cookie_file)
|
|
success = False
|
|
req.close()
|
|
|
|
return success
|
|
|
|
|
|
main = ExHentaiOrg
|