db01af24ce
description exception
237 lines
10 KiB
Python
237 lines
10 KiB
Python
from itertools import count
|
|
from colorama import Fore, Back, Style
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.keys import Keys
|
|
from selenium.webdriver.common.action_chains import ActionChains
|
|
from PIL import Image
|
|
import PIL
|
|
import requests
|
|
import time
|
|
import pickle
|
|
import os
|
|
import ctypes
|
|
import json
|
|
|
|
def gen_json(folders, title, author, artist, description, genre_list, status):
|
|
datas = {
|
|
"title": title,
|
|
"author": author,
|
|
"artist": artist,
|
|
"description": description.replace("\n", "\\n"),
|
|
"genre": genre_list,
|
|
"status": status,
|
|
"_status values": ["0 = Unknown", "1 = Ongoing", "2 = Completed", "3 = Licensed", "4 = Publishing finished", "5 = Cancelled", "6 = On hiatus"]
|
|
}
|
|
json.dump(datas, open(folders+"\\details.json", "w", encoding='utf-8'), ensure_ascii=False, indent=4)
|
|
|
|
|
|
def make_folder(folder):
|
|
if not os.path.isdir(os.getcwd()+"\\"+folder):
|
|
os.mkdir(os.getcwd()+"\\"+folder)
|
|
|
|
def make_file(file):
|
|
if not os.path.isfile(os.getcwd()+"\\"+file):
|
|
open(os.getcwd()+"\\"+file, "w")
|
|
|
|
def pprint(text, colors):
|
|
dict_color = {"g": Back.GREEN, "y": Back.YELLOW, "r": Back.RED, "b": Back.BLUE}
|
|
print(dict_color[colors] + str(text) + Style.RESET_ALL)
|
|
|
|
def pprintr(text, colors):
|
|
dict_color = {"g": Back.GREEN, "y": Back.YELLOW, "r": Back.RED, "b": Back.BLUE}
|
|
return dict_color[colors] + str(text) + Style.RESET_ALL
|
|
|
|
def get_name(num, source_name):
|
|
ext_name = source_name.split(".")[-1]
|
|
return ((3-len(str(num))) * "0") + str(num) + "." + ext_name
|
|
|
|
url_root = {
|
|
"hentailib.me":{"img":"https://img.yaoi-chan.me/", "root":"https://hentailib.me"},
|
|
"yaoilib.me":{"img":"https://img.yaoi-chan.me/", "root":"https://yaoilib.me/"},
|
|
"mangalib.me":{"img":"https://img.yaoi-chan.me/", "root":"https://mangalib.me"}
|
|
}
|
|
exe_drive = os.getcwd()+"\\chromedriver\\chromedriver.exe"
|
|
make_folder("dw")
|
|
make_folder("cookies")
|
|
make_folder("chromedriver")
|
|
make_folder("cfg")
|
|
make_file("cfg\\list_load.txt")
|
|
make_file("cfg\\list_url.txt")
|
|
if not os.path.isfile(os.getcwd()+"\\chromedriver\\chromedriver.exe"):
|
|
pprint("[ERROR] chromedriver not found! Please download for you Chrome version from https://chromedriver.storage.googleapis.com/index.html", "r")
|
|
exit()
|
|
driver = webdriver.Chrome(executable_path=exe_drive)
|
|
driver.set_window_position(0, 0)
|
|
user32 = ctypes.windll.user32
|
|
screensize = [user32.GetSystemMetrics(78), user32.GetSystemMetrics(79)]
|
|
driver.set_window_size(screensize[0], screensize[1])
|
|
ddd = input(pprintr("URL or Enter> ", "y"))
|
|
if ddd == "":
|
|
url_gets = open("cfg/list_url.txt", "r").readlines()
|
|
urls_gets = []
|
|
for kk in url_gets:
|
|
urls_gets.append(kk.replace("\n", ""))
|
|
else:
|
|
urls_gets = [ddd]
|
|
for url_get in urls_gets:
|
|
url_load = open("cfg/list_load.txt", "r").readlines()
|
|
urls_load = []
|
|
for kk in url_load:
|
|
urls_load.append(kk.replace("\n", ""))
|
|
if url_get not in url_load:
|
|
dw_folder_root = os.getcwd() + "\dw\(" + url_get.split("//")[1].split("/")[0] + ") " + url_get.split("/")[-1].split("?")[0]
|
|
pprint(dw_folder_root, "g")
|
|
if not os.path.isdir(dw_folder_root):
|
|
os.mkdir(dw_folder_root)
|
|
url_domain = url_get.split("//")[1].split("/")[0]
|
|
driver.get(url_get)
|
|
pprint(url_domain, "g")
|
|
if url_domain not in url_root.keys():
|
|
pprint("Not support....", "r")
|
|
exit()
|
|
if os.path.isfile("cookies\\" + url_domain+".pkl"):
|
|
cookies = pickle.load(open("cookies\\" + url_domain+".pkl", "rb"))
|
|
pprint(cookies, "b")
|
|
for cookie in cookies:
|
|
driver.add_cookie(cookie)
|
|
else:
|
|
url_go = url_root[url_domain]["root"]
|
|
driver.get(url_go)
|
|
ddd = input(pprintr("Wait login....", "y"))
|
|
cookies = driver.get_cookies()
|
|
pickle.dump(cookies, open("cookies\\" + url_domain+".pkl","wb"))
|
|
pprint(cookies, "b")
|
|
driver.get(url_get)
|
|
driver.save_screenshot("dw\(" + url_get.split("//")[1].split("/")[0] + ") " + url_get.split("/")[-1].split("?")[0] + ".png")
|
|
if url_domain == "hentailib.me" or url_domain == "yaoilib.me" or url_domain == "mangalib.me":
|
|
data_res = {}
|
|
elem_info = driver.find_element_by_class_name("media-info-list")
|
|
elems_info = elem_info.find_elements_by_class_name("media-info-list__item")
|
|
for dd in elems_info:
|
|
data_res[dd.find_element_by_class_name("media-info-list__title").text] = dd.find_element_by_class_name("media-info-list__value").text
|
|
data_res["name"] = driver.find_element_by_class_name("media-name__body").text.replace("\n", " | ")
|
|
status_a = {"None":"0", "Продолжается":"1", "Завершен":"2", "Заморожен":"5", "Заброшен":"6 = On hiatus"}
|
|
tag_info = driver.find_elements_by_class_name("media-tag-item")
|
|
tag_list = []
|
|
for gg in tag_info:
|
|
tag_list.append(gg.text)
|
|
for kk in ["name", "Автор", "Художник"]:
|
|
if kk not in data_res.keys():
|
|
data_res[kk] = "None"
|
|
if "Статус перевода" not in data_res.keys():
|
|
data_res["Статус перевода"] = "None"
|
|
try:
|
|
desc_info = driver.find_element_by_class_name("media-description").text
|
|
except:
|
|
desc_info = "None"
|
|
gen_json(
|
|
dw_folder_root,
|
|
data_res["name"],
|
|
data_res["Автор"],
|
|
data_res["Художник"],
|
|
desc_info,
|
|
tag_list,
|
|
status_a[data_res["Статус перевода"]]
|
|
)
|
|
action_chains = ActionChains(driver)
|
|
all_button = driver.find_elements_by_tag_name("li")
|
|
manga_id = url_get.split("/")[-1].split("?")[0]
|
|
pprint(manga_id, "g")
|
|
for oo in all_button:
|
|
try:
|
|
if "chapters" in str(oo.get_attribute("data-key")):
|
|
oo.click()
|
|
except:
|
|
pass
|
|
pages_np = driver.find_elements_by_tag_name("a")
|
|
pages = []
|
|
for ii in pages_np:
|
|
if manga_id in str(ii.get_attribute("href")):
|
|
if "/v" in str(ii.get_attribute("href")):
|
|
pages.append(str(ii.get_attribute("href")).split("?")[0])
|
|
pages = list(dict.fromkeys(pages))
|
|
pprint(pages, "b")
|
|
first_img = 1
|
|
for page_cur in pages:
|
|
driver.get(page_cur)
|
|
name_ch = page_cur.split("/")[-2].replace("v", "") + "-" + page_cur.split("/")[-1].replace("c", "")
|
|
dw_folder = dw_folder_root + "\\" + name_ch
|
|
if not os.path.isdir(dw_folder):
|
|
os.mkdir(dw_folder)
|
|
pprint(dw_folder, "g")
|
|
all_button = driver.find_elements_by_tag_name("button")
|
|
for oo in all_button:
|
|
try:
|
|
if "Мне есть 18 лет" in str(oo.text):
|
|
oo.click()
|
|
except:
|
|
pass
|
|
all_button = driver.find_elements_by_tag_name("i")
|
|
for oo in all_button:
|
|
try:
|
|
if "fa-cog" in str(oo.get_attribute("class")):
|
|
oo.click()
|
|
except:
|
|
pass
|
|
all_button = driver.find_elements_by_tag_name("label")
|
|
for oo in all_button:
|
|
try:
|
|
if "Вертикальный" in str(oo.text):
|
|
oo.click()
|
|
except:
|
|
pass
|
|
all_button = driver.find_elements_by_tag_name("div")
|
|
for oo in all_button:
|
|
try:
|
|
if "modal__close" in str(oo.get_attribute("class")):
|
|
oo.click()
|
|
except:
|
|
pass
|
|
continue_scroll = 1
|
|
all_button = driver.find_elements_by_tag_name("select")
|
|
for oo in all_button:
|
|
try:
|
|
if "reader-pages" in str(oo.get_attribute("id")):
|
|
all_frame_base = oo
|
|
except:
|
|
pass
|
|
all_frame = all_frame_base.find_elements_by_tag_name("option")
|
|
for oo in all_frame:
|
|
oo.click()
|
|
time.sleep(0.1)
|
|
list_img = []
|
|
all_img = driver.find_elements_by_tag_name("img")
|
|
for oo in all_img:
|
|
try:
|
|
if manga_id in str(oo.get_attribute("src")):
|
|
list_img.append(oo.get_attribute("src"))
|
|
action_chains.send_keys_to_element(oo, Keys.CONTROL, "c")
|
|
except:
|
|
pass
|
|
cookie_req = {}
|
|
for dd in cookies:
|
|
cookie_req[dd["name"]] = dd["value"]
|
|
count_img = 1
|
|
for img_url in list_img:
|
|
if first_img == 1:
|
|
file_name_head = "cover." + img_url.split("/")[-1].split(".")[-1]
|
|
pprint("[Downloading] "+file_name_head, "g")
|
|
req = requests.get(img_url, cookies=cookie_req, headers={'referer': url_get})
|
|
file_name = dw_folder_root + "/" + file_name_head
|
|
file = open(file_name, "wb")
|
|
file.write(req.content)
|
|
file.close()
|
|
first_img = 0
|
|
file_name_head = get_name(count_img, img_url.split("/")[-1])
|
|
pprint("[Downloading] "+file_name_head, "g")
|
|
req = requests.get(img_url, cookies=cookie_req, headers={'referer': page_cur})
|
|
file_name = dw_folder + "/" + file_name_head
|
|
file = open(file_name, "wb")
|
|
file.write(req.content)
|
|
file.close()
|
|
count_img += 1
|
|
pprint("[READY]", "g")
|
|
else:
|
|
pprint("URL not support", "r")
|
|
urls_load_w = "\n".join(urls_load) + "\n" + url_get
|
|
open("cfg/list_load.txt", "w").write(urls_load_w) |