This commit is contained in:
KurtBestor 2022-02-18 00:03:37 +09:00
parent eb76f6814a
commit 01e41d0f17
8 changed files with 661 additions and 54 deletions

View File

@ -16,13 +16,13 @@ class File(object):
thumb = None
def __init__(self, type, url, title, referer, p=0, multi_post=False):
id_ = re.find('videos/([0-9a-zA-Z_-]+)', referer, err='no video id')
self.type = type
self.url = LazyUrl(referer, lambda _: url, self)
ext = os.path.splitext(url.split('?')[0])[1]
if ext.lower() == '.php':
ext = '.mp4'
if type == 'video':
id_ = re.find('videos/([0-9a-zA-Z_-]+)', referer, err='no video id')
self.filename = format_filename(title, id_, ext) #4287
elif type == 'image':
name = '{}_p{}'.format(clean_title(title), p) if multi_post else p

View File

@ -103,7 +103,12 @@ def get_info(url, soup=None, cw=None):
if button:
print('decompose button')
button.decompose()
catch = desc.find('span', id='catchphrase-body').text.strip()
catch = desc.find('span', id='catchphrase-body')
if catch is None: #4445
print_('no catch')
catch = ''
else:
catch = catch.text.strip()
intro = desc.find('p', id='introduction')
if intro is None: #4262
print_('no intro')

View File

@ -1,6 +1,5 @@
#coding:utf8
import downloader
import requests
from utils import Soup, Downloader, LazyUrl, urljoin, try_n, get_outdir, clean_title
import ree as re
import os
@ -47,27 +46,27 @@ class Downloader_luscious(Downloader):
return url
def read(self):
url = fix_url(self.url)
for try_ in range(8):
try:
html = requests.get(url).text
html = downloader.read_html(self.url)
break
except Exception as e:
print(e)
e_ = e
self.print_error(e)
self.print_('retry...')
else:
raise
raise e_
soup = Soup(html)
title = clean_title(get_title(soup))
self.title = tr_(u'읽는 중... {}').format(title)
if '/videos/' in url:
video = get_video(url, soup)
if '/videos/' in self.url:
video = get_video(self.url, soup)
imgs = [video]
self.setIcon(video.thumb)
else:
imgs = get_imgs(url, soup, self.cw)
imgs = get_imgs(self.url, soup, self.cw)
dir = os.path.join(get_outdir(self.type), title)
names = {}
@ -89,18 +88,13 @@ class Downloader_luscious(Downloader):
def update(cw, title, imgs):
s = u'{} {} ({})'.format(tr_(u'읽는 중...'), title, len(imgs))
s = u'{} {} - {}'.format(tr_(u'읽는 중...'), title, len(imgs))
if cw is not None:
cw.setTitle(s)
else:
print(s)
def fix_url(url):
url = re.sub(r'[^./]+\.luscious', 'legacy.luscious', url)
return url
def get_imgs(url, soup=None, cw=None):
url = fix_url(url)
if soup is None:
html = downloader.read_html(url)
soup = Soup(html)
@ -143,4 +137,4 @@ def get_video(url, soup):
def get_title(soup):
return soup.find('h2').text.strip()
return soup.find('h1').text.strip()

View File

@ -93,11 +93,10 @@ def get_artist(soup):
if artist:
return artist.text.strip()
else:
artist = re.find(r'"author" *: *(".+?")', soup.html)
artist = re.find(r'"author" *: *(".*?")', soup.html) # 4389
if artist:
return json.loads(artist)
else:
return 'N/A'
artist = json.loads(artist)
return artist or None
def get_pages(soup, url):

View File

@ -14,7 +14,6 @@ from ratelimit import limits, sleep_and_retry
class Downloader_wayback_machine(Downloader):
type = 'waybackmachine'
URLS = ['archive.org', 'web.archive.org']
icon = 'https://archive.org/offshoot_assets/favicon.ico'
display_name = 'Wayback Machine'
def read(self):

View File

@ -5,6 +5,9 @@ from constants import try_n
import ree as re
from m3u8_tools import playlist2stream
from translator import tr_
import json
from timee import sleep
from ratelimit import limits, sleep_and_retry
CHANNEL_PATTERN = r'/(profiles|[^/]*channels)/([0-9a-zA-Z_]+)'
@ -19,26 +22,39 @@ class Video(object):
_url = None
def __init__(self, url_page):
url_page = Downloader_xvideo.fix_url(url_page)
self.url = LazyUrl(url_page, self.get, self)
@try_n(4)
def get(self, url_page):
if not self._url:
id = get_id(url_page)
html = downloader.read_html(url_page)
soup = Soup(html)
self.title = html_unescape(soup.find('title').text).replace('- XVIDEOS.COM', '').strip()
url = re.find(r'''.setVideoHLS\(['"](.+?)['"]\)''', html)
ext = get_ext(url)
if ext.lower() == '.m3u8':
url = playlist2stream(url, n_thread=5)
url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content']
self.thumb = BytesIO()
downloader.download(url_thumb, buffer=self.thumb)
self.filename = format_filename(self.title, id, '.mp4')
self._url= url
self._get(url_page)
return self._url
@try_n(4)
@sleep_and_retry
@limits(1, 2)
def _get(self, url_page):
id = get_id(url_page)
html = downloader.read_html(url_page)
soup = Soup(html)
self.title = html_unescape(soup.find('title').text).replace('- XVIDEOS.COM', '').strip()
url = re.find(r'''.setVideoHLS\(['"](.+?)['"]\)''', html) or re.find(r'''.setVideoUrlLow\(['"](.+?)['"]\)''', html) #https://www.xvideos.com/video65390539/party_night
if not url:
raise Exception('no video url')
ext = get_ext(url)
if ext.lower() == '.m3u8':
url = playlist2stream(url, n_thread=5)
self.url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content']
self.filename = format_filename(self.title, id, '.mp4')
self._url= url
@property
def thumb(self):
self.url()
f = BytesIO()
downloader.download(self.url_thumb, buffer=f)
return f
@Downloader.register
@ -57,6 +73,7 @@ class Downloader_xvideo(Downloader):
@classmethod
def fix_url(cls, url):
url = re.sub(r'[^/]*xvideos[0-9]*\.[^/]+', 'www.xvideos.com', url).replace('http://', 'https://')
url = url.replace('/THUMBNUM/', '/')
return url
@classmethod
@ -77,9 +94,9 @@ class Downloader_xvideo(Downloader):
video = Video(self.url)
video.url()
self.title = video.title
self.urls.append(video.url)
self.setIcon(video.thumb)
self.urls.append(video.url)
def read_channel(url_page, cw=None):
@ -95,38 +112,41 @@ def read_channel(url_page, cw=None):
info['username'] = username
session = Session()
urls = []
urls_set = set()
ids = set()
for p in range(100):
url_api = urljoin(url_page, '/{}/{}/videos/best/{}'.format(header, username, p))
print(url_api)
r = session.post(url_api, data='main_cats=false')
soup = Soup(r.text)
thumbs = soup.findAll('div', class_='thumb-block')
if not thumbs:
print_(url_api)
r = session.post(url_api)
data = json.loads(r.text)
videos = data['videos']
if not videos:
print_('empty')
break
for thumb in thumbs:
info['name'] = thumb.find('span', class_='name').text.strip()
href = thumb.find('a')['href']
href = urljoin(url_page, href)
if href in urls_set:
print_('duplicate: {}'.format(href))
for video in videos:
id_ = video['id']
if id_ in ids:
print_('duplicate: {}'.format(id_))
continue
urls_set.add(href)
urls.append(href)
ids.add(id_)
info['name'] = video['pn']
urls.append(urljoin(url_page, video['u']))
if len(urls) >= max_pid:
break
n = data['nb_videos']
s = '{} {} - {}'.format(tr_('읽는 중...'), info['name'], len(urls))
if cw:
if not cw.alive:
return
cw.setTitle(s)
else:
print(s)
if len(ids) >= n:
break
sleep(1, cw)
if not urls:
raise Exception('no videos')
info['urls'] = urls[:max_pid]
return info

295
translation/help_en.html Normal file
View File

@ -0,0 +1,295 @@
<html>
<head>
{head}
</head>
<body>
<p align="right"><br></p>
<h1 align="center">How to use</h1>
<p align="right">{date}</p>
<br>
<h3>Supported sites</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader#supported-sites">https://github.com/KurtBestor/Hitomi-Downloader#supported-sites</a></li>
</ul>
<h3>Address bar</h3>
<ul>
<li>Type some URLs into the address bar and click the Download button to download</li>
<li>Examples:<br>
https://hitomi.la/galleries/123.html<br>
https://hitomi.la/reader/123.html<br>
https://e-hentai.org/g/123/356dfa74ce/<br>
https://e-hentai.org/s/600e752112/123-4<br>
https://hiyobi.me/reader/123<br>
123<br>
<br>
https://www.pixiv.net/users/11<br>
https://www.pixiv.net/member_illust.php?id=11<br>
https://pixiv.me/pixiv<br>
pixiv_11<br>
<br>
https://twitter.com/TensorFlow<br>
@TensorFlow<br>
<br>
https://www.instagram.com/user_name<br>
insta_user_name<br>
<br>
https://username.deviantart.com<br>
deviant_username
</li>
<li>Examples for multiple URLs:<br>
123, 125, 126<br>
123 125 126
</li>
<li>Numbers not in Hitomi.la are automatically converted to E(x)Hentai URL.</li>
</ul>
<h3>Save</h3>
<ul>
<li>Save the preferences and tasks currently added.</li>
<li>File - Save</li>
<li>[Ctrl + S] key</li>
</ul>
<h3>Searcher</h3>
<ul>
<li>Search galleries</li>
<li>Menu - Searcher...</li>
<li>[Ctrl + F] key</li>
</ul>
<h3>Downloader tasks</h3>
<ul>
<li>Open the first file:<br>
Mouse right-click → [Open the first file]<br>
Click thumbnail<br>
Double-click<br>
[Enter] key
</li>
<li>Remove multiple tasks:<br>
Select multiple tasks → [Del] key
</li>
<li>Delete multiple files:<br>
Select multiple tasks → Mouse right-click → [Delete files]<br>
Select multiple tasks → [Shift] + [Del] key
</li>
<li>Remove all complete tasks:<br>
Mouse right-click → [Remove all complete tasks]<br>
Remove all complete tasks which are not locked.
</li>
</ul>
<h3>Task colors</h3>
<ul>
<li>Light gray: Wating or Reading</li>
<li>Dark gray: Downloading</li>
<li>Green: Downloaded completely</li>
<li>Orange: Downloaded incompletely</li>
<li> &nbsp; &nbsp;Red: Fail or Invalid</li>
</ul>
<h3>Change the order of tasks</h3>
<ul>
<li>Drag and drop with the mouse wheel button to change the order.</li>
<li>Following commands are also working: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End].</li>
</ul>
<h3>Filtering the List of tasks</h3>
<ul>
<li>Click the filter icon at the bottom left of the downloader window and type.</li>
<li>Only tasks with a title that contains that word are visible.</li>
<li>You can also filter by type, such as "type:youtube".</li>
<li>If you type "dup:", you will see only duplicate tasks.</li>
<li>Type "rem:" to see only the tasks that have been deleted from the physical storage.</li>
<li>You can filter by tags such as "tag:glasses".</li>
<li>You can filter by comments, such as "comment:xxxx".</li>
<li>Type "bad:" to show only incomplete tasks.</li>
</ul>
<h3>Searcher 검색 목록 필터링</h3>
<ul>
<li>Searcher 좌측 하단의 필터 모양 아이콘을 클릭하고 내용 입력</li>
<li>해당 문자가 포함된 제목, 작가, 그룹, 태그, 언어를 가진 갤러리만 보입니다.</li>
<li>&quot;title:A&quot; 를 입력하면 A라는 문자가 포함된 제목을 가진 갤러리만 보입니다.</li>
<li>&quot;artist:A&quot;, &quot;group:A&quot;, &quot;tag:A&quot;, &quot;lang:A&quot; 과 같이 필터링 할 수도 있습니다.</li>
<li>&quot;p&lt;100&quot; 을 입력하면 100 페이지 미만인 갤러리만 보입니다.</li>
<li>&quot;p&gt;100&quot; 을 입력하면 100 페이지 초과인 갤러리만 보입니다.</li>
<li>&quot;done:o&quot; 를 입력하면 이미 다운로드한 갤러리만 보입니다.</li>
<li>&quot;done:x&quot; 를 입력하면 아직 다운로드하지 않은 갤러리만 보입니다.</li>
</ul>
<h3>페이지 지정 다운로드</h3>
<ul>
<p><img src=":/icons/down_menu" /></p>
<li>지정한 페이지만 다운로드합니다.</li>
<li>Examples:<br>
~ 100 &nbsp; &nbsp;&nbsp;앞 100 페이지<br>
-100 ~ &nbsp; &nbsp;&nbsp;뒤 100 페이지<br>
1, 10 ~ 20, -1 &nbsp; &nbsp;&nbsp;첫 페이지, 10 ~ 20 페이지, 마지막 페이지</li>
</ul>
<h3>선택 화 다운로드</h3>
<ul>
<p><img src=":/icons/down_menu_chapter" /></p>
<li>선택한 화만 다운로드합니다.</li>
</ul>
<h3>환경 설정</h3>
<ul>
<li>옵션 → 설정 (Preferences...)</li>
</ul>
<h3>스레드</h3>
<ul>
<li>한 작업 당 동시 다운로드 수.</li>
<li>컴퓨터 사양이나 인터넷 상태가 좋지 않다면 갯수를 좀 더 내립니다.</li>
<li>어떻게 설정해야 할지 잘 모르겠으면 그대로 두면 됩니다.</li>
</ul>
<h3>간단 검색 - 검색어</h3>
<ul>
<li>구글 검색하듯이 검색하면 됩니다.</li>
<li>예시 :<br>
maid<br>
maid glasses korean<br>
maid -schoolgirl<br>
maid n/a<br>
maid (korean + n/a)</li>
</ul>
<h3>고급 검색 - 제목 (Title)</h3>
<ul>
<li>예시 :<br>
maid<br>
maid -schoolgirl<br>
maid glasses</li>
</ul>
<h3>고급 검색 - 작가 (Artists)</h3>
<ul>
<li>예시 :<br>
sekiya asami<br>
sekiya asami + amezawa koma</li>
</ul>
<h3>고급 검색 - 캐릭터 (Characters)</h3>
<ul>
<li>예시 :<br>
chino kafuu<br>
chino kafuu + kokoa hoto<br>
hino kafuu, kokoa hoto</li>
</ul>
<h3>고급 검색 - 태그 (Tags)</h3>
<ul>
<li>예시 :<br>
female:maid<br>
female:maid, -female:schoolgirl uniform</li>
</ul>
<h3>Searcher 목록</h3>
<ul>
<li>여러 갤러리 다운로드 :<br>
여러 개 선택 → 마우스 우클릭 → [다운로드]<br>
여러 개 선택 → [Enter] key</li>
<li>갤러리 정보 보기 :<br>
마우스 우 클릭 → 갤러리 정보...<br>
Click thumbnail</li>
</ul>
<h3>검색 중 중단</h3>
<ul>
<li>검색 버튼 한번 더 클릭</li>
</ul>
<h3>파일이 제대로 다운로드 되지 않는 경우 (체크섬 오프로드 문제)</h3>
<ul>
<li>권장 (속도 떨어짐) :<br>
스레드 갯수를 낮게 조절합니다.</li>
<li>비권장 (속도 떨어지지 않음, 보안 문제 발생 가능) :<br>
제어판 → 시스템 → 하드웨어 → 장치관리자 → 네트워크 어댑터 → 무슨무슨 컨트롤러 → 우클릭 후 속성 → 고급 탭 → 무슨무슨 오프로드를 모두 '사용 안 함'으로 설정 → 확인<br>
조금 기다리면 인터넷이 다시 연결됩니다.</li>
</ul>
<h3>Searcher 검색 데이터 업데이트</h3>
<ul>
<li>Searcher - 메뉴 - 데이터 다운로드...</li>
<li>데이터를 다시 다운로드할 때마다 서버에서 최신 데이터를 가져옵니다.</li>
</ul>
<h3>스크립트</h3>
<ul>
<li>메뉴 - 스크립트 가져오기...</li>
<li>파이썬 스크립트를 실행합니다.</li>
<li>다운로드 스크립트를 직접 만들어 추가하는 등 다양한 작업을 할 수 있습니다.</li>
<li>스크립트 파일 (*.hds) 은 텍스트에디터(메모장 등)로 수정할 수 있습니다.</li>
<li>스크립트 파일들을 프로그램에 드래그 &amp; 드랍해서 실행시킬 수도 있습니다.</li>
<li>실행파일 경로에 scripts 폴더 만들고 스크립트 파일 (*.hds) 넣으면 시작할 때 자동으로 실행합니다.</li>
<li>스크립트 다운로드 :<br>
<a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts">https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts</a></li>
<li>스크립트 작성 방법 :<br>
<a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script">https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script</a></li>
</ul>
<h3>DPI 우회</h3>
<ul>
<li>옵션 - 설정 - 고급 설정 - DPI 우회</li>
<li><a href="https://github.com/ValdikSS/GoodbyeDPI">GoodbyeDPI</a>를 이용해서 DPI 차단 / 우회를 합니다.</li>
</ul>
<h3>Load cookies</h3>
<ul>
<li>Options - Preferences - Advanced Setting - Cookies - Load...</li>
<li>Cookies exported from browser extensions can be loaded. (Netscape HTTP Cookie File)</li>
<li>Using these cookies, Hitomi Downloader can access login-required pages.</li>
<li>Chrome extension: <a href="https://chrome.google.com/webstore/detail/cookiestxt/njabckikapfpffapmjgojcnbfjonfjfg">cookies.txt</a>, <a href="https://chrome.google.com/webstore/detail/get-cookiestxt/bgaddhkoddajcdgocldbbfleckgcbcid">Get cookies.txt</a></li>
<li>Firefox extension: <a href="https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/">cookies.txt</a>
<li>Expired cookies are shown in gray.</li>
</ul>
<h3>크롬 확장 프로그램</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/Chrome-Extension">Hitomi Downloader</a></li>
<li>기능:<br>
확장프로그램이 필요한 사이트의 다운로드<br>
쿠key 업데이트
</ul>
<h3>Save</h3>
<ul>
<li>Save & Quit :<br>
Quit with saving settings and currently added lists</li>
<li>Quit :<br>
Quit without saving</li>
<li>When launching the app, it starts with the most recent saved state.</li>
</ul>
<h3>Shortcuts</h3>
<ul>
<li>Alt + D : 주소바 ↔ 작업 목록 전환</li>
<li>Ctrl + 1 ~ 7 : 작업에 태그 표시</li>
<li>Ctrl + Tab : 도구창 숨기기</li>
<li>Ctrl + - / + : 썸네일 크기 조절</li>
<li>Ctrl + 스크롤 : 썸네일 크기 조절</li>
<li>Space : 그룹 열고 닫기</li>
</ul>
<h3>Feedback</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader/issues">https://github.com/KurtBestor/Hitomi-Downloader/issues</a></li>
</ul>
<h3>Etc.</h3>
<ul>
<li>Please use the downloaded files for personal use only.</li>
<li>Please look for further updates at Help - About - Bottom button.</li>
</ul>
</body>
</html>

295
translation/help_ko.html Normal file
View File

@ -0,0 +1,295 @@
<html>
<head>
{head}
</head>
<body>
<p align="right"><br></p>
<h1 align="center">사용법</h1>
<p align="right">{date}</p>
<br>
<h3>지원 사이트</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader#supported-sites">https://github.com/KurtBestor/Hitomi-Downloader#supported-sites</a></li>
</ul>
<h3>주소 바</h3>
<ul>
<li>주소를 입력하고 다운로드 버튼을 눌러 다운로드 합니다.</li>
<li>예시:<br>
https://hitomi.la/galleries/123.html<br>
https://hitomi.la/reader/123.html<br>
https://e-hentai.org/g/123/356dfa74ce/<br>
https://e-hentai.org/s/600e752112/123-4<br>
https://hiyobi.me/reader/123<br>
123<br>
<br>
https://www.pixiv.net/users/11<br>
https://www.pixiv.net/member_illust.php?id=11<br>
https://pixiv.me/pixiv<br>
pixiv_11<br>
<br>
https://twitter.com/TensorFlow<br>
@TensorFlow<br>
<br>
https://www.instagram.com/user_name<br>
insta_user_name<br>
<br>
https://username.deviantart.com<br>
deviant_username
</li>
<li>여러 주소 추가 예시:<br>
123, 125, 126<br>
123 125 126
</li>
<li>히토미에 없는 번호는 자동으로 E(x)Hentai 주소로 변환됩니다.</li>
</ul>
<h3>저장</h3>
<ul>
<li>설정과 현재 추가된 목록을 저장</li>
<li>파일 - 저장</li>
<li>[Ctrl + S] 키</li>
</ul>
<h3>검색기</h3>
<ul>
<li>갤러리를 검색</li>
<li>메뉴 - 검색기...</li>
<li>[Ctrl + F] 키</li>
</ul>
<h3>다운로더 작업</h3>
<ul>
<li>첫 번째 이미지 열기:<br>
마우스 우 클릭 → [첫 번째 파일 열기]<br>
섬네일 클릭<br>
더블클릭<br>
[Enter] 키
</li>
<li>여러 작업 제거:<br>
여러 작업 선택 → [Del] 키
</li>
<li>여러 파일 삭제:<br>
여러 작업 선택 → 마우스 우 클릭 → [파일 삭제]<br>
여러 작업 선택 → [Shift] + [Del] 키
</li>
<li>완료된 작업 모두 제거:<br>
마우스 우 클릭 → [완료된 작업 모두 제거]<br>
잠기지 않은 모든 완료된 작업을 목록에서 제거합니다.
</li>
</ul>
<h3>다운로더 작업 색</h3>
<ul>
<li>밝은 회색: 대기 중 or 읽는 중</li>
<li>어두운 회색: 다운로드 중</li>
<li>초록색: 다운로드를 성공적으로 마침</li>
<li>주황색: 다운로드는 완료했지만 완전하지 않음</li>
<li> &nbsp; &nbsp;빨간색: 실패 or 잘못된 입력</li>
</ul>
<h3>다운로더 작업 목록 순서 변경</h3>
<ul>
<li>마우스 휠버튼으로 드래그&amp;드롭 하면 순서를 바꿀 수 있습니다.</li>
<li>[Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End] 키로 옮길 수도 있습니다.</li>
</ul>
<h3>다운로더 작업 목록 필터링</h3>
<ul>
<li>다운로더 창 좌측 하단의 필터 아이콘을 클릭하고 입력</li>
<li>해당 문자가 포함된 제목을 가진 작업만 보입니다.</li>
<li>&quot;type:youtube&quot; 와 같이 타입으로 필터링 할 수도 있습니다.</li>
<li>&quot;dup:&quot; 를 입력하면 중복된 작업만 보이고,</li>
<li>&quot;rem:&quot; 를 입력하면 실제 파일이 삭제된 작업만 보입니다.</li>
<li>&quot;tag:glasses&quot; 와 같이 태그로 필터링 할 수 있습니다.</li>
<li>&quot;comment:xxx&quot; 와 같이 코멘트로 필터링 할 수 있습니다.</li>
<li>&quot;bad:&quot; 를 입력하면 불완전한 작업만 보입니다.</li>
</ul>
<h3>검색기 검색 목록 필터링</h3>
<ul>
<li>검색기 좌측 하단의 필터 모양 아이콘을 클릭하고 내용 입력</li>
<li>해당 문자가 포함된 제목, 작가, 그룹, 태그, 언어를 가진 갤러리만 보입니다.</li>
<li>&quot;title:A&quot; 를 입력하면 A라는 문자가 포함된 제목을 가진 갤러리만 보입니다.</li>
<li>&quot;artist:A&quot;, &quot;group:A&quot;, &quot;tag:A&quot;, &quot;lang:A&quot; 과 같이 필터링 할 수도 있습니다.</li>
<li>&quot;p&lt;100&quot; 을 입력하면 100 페이지 미만인 갤러리만 보입니다.</li>
<li>&quot;p&gt;100&quot; 을 입력하면 100 페이지 초과인 갤러리만 보입니다.</li>
<li>&quot;done:o&quot; 를 입력하면 이미 다운로드한 갤러리만 보입니다.</li>
<li>&quot;done:x&quot; 를 입력하면 아직 다운로드하지 않은 갤러리만 보입니다.</li>
</ul>
<h3>페이지 지정 다운로드</h3>
<ul>
<p><img src=":/icons/down_menu" /></p>
<li>지정한 페이지만 다운로드합니다.</li>
<li>예시:<br>
~ 100 &nbsp; &nbsp;&nbsp;앞 100 페이지<br>
-100 ~ &nbsp; &nbsp;&nbsp;뒤 100 페이지<br>
1, 10 ~ 20, -1 &nbsp; &nbsp;&nbsp;첫 페이지, 10 ~ 20 페이지, 마지막 페이지</li>
</ul>
<h3>선택 화 다운로드</h3>
<ul>
<p><img src=":/icons/down_menu_chapter" /></p>
<li>선택한 화만 다운로드합니다.</li>
</ul>
<h3>환경 설정</h3>
<ul>
<li>옵션 → 설정 (Preferences...)</li>
</ul>
<h3>스레드</h3>
<ul>
<li>한 작업 당 동시 다운로드 수.</li>
<li>컴퓨터 사양이나 인터넷 상태가 좋지 않다면 갯수를 좀 더 내립니다.</li>
<li>어떻게 설정해야 할지 잘 모르겠으면 그대로 두면 됩니다.</li>
</ul>
<h3>간단 검색 - 검색어</h3>
<ul>
<li>구글 검색하듯이 검색하면 됩니다.</li>
<li>예시 :<br>
maid<br>
maid glasses korean<br>
maid -schoolgirl<br>
maid n/a<br>
maid (korean + n/a)</li>
</ul>
<h3>고급 검색 - 제목 (Title)</h3>
<ul>
<li>예시 :<br>
maid<br>
maid -schoolgirl<br>
maid glasses</li>
</ul>
<h3>고급 검색 - 작가 (Artists)</h3>
<ul>
<li>예시 :<br>
sekiya asami<br>
sekiya asami + amezawa koma</li>
</ul>
<h3>고급 검색 - 캐릭터 (Characters)</h3>
<ul>
<li>예시 :<br>
chino kafuu<br>
chino kafuu + kokoa hoto<br>
hino kafuu, kokoa hoto</li>
</ul>
<h3>고급 검색 - 태그 (Tags)</h3>
<ul>
<li>예시 :<br>
female:maid<br>
female:maid, -female:schoolgirl uniform</li>
</ul>
<h3>검색기 목록</h3>
<ul>
<li>여러 갤러리 다운로드 :<br>
여러 개 선택 → 마우스 우클릭 → [다운로드]<br>
여러 개 선택 → [Enter] 키</li>
<li>갤러리 정보 보기 :<br>
마우스 우 클릭 → 갤러리 정보...<br>
섬네일 클릭</li>
</ul>
<h3>검색 중 중단</h3>
<ul>
<li>검색 버튼 한번 더 클릭</li>
</ul>
<h3>파일이 제대로 다운로드 되지 않는 경우 (체크섬 오프로드 문제)</h3>
<ul>
<li>권장 (속도 떨어짐) :<br>
스레드 갯수를 낮게 조절합니다.</li>
<li>비권장 (속도 떨어지지 않음, 보안 문제 발생 가능) :<br>
제어판 → 시스템 → 하드웨어 → 장치관리자 → 네트워크 어댑터 → 무슨무슨 컨트롤러 → 우클릭 후 속성 → 고급 탭 → 무슨무슨 오프로드를 모두 '사용 안 함'으로 설정 → 확인<br>
조금 기다리면 인터넷이 다시 연결됩니다.</li>
</ul>
<h3>검색기 검색 데이터 업데이트</h3>
<ul>
<li>검색기 - 메뉴 - 데이터 다운로드...</li>
<li>데이터를 다시 다운로드할 때마다 서버에서 최신 데이터를 가져옵니다.</li>
</ul>
<h3>스크립트</h3>
<ul>
<li>메뉴 - 스크립트 가져오기...</li>
<li>파이썬 스크립트를 실행합니다.</li>
<li>다운로드 스크립트를 직접 만들어 추가하는 등 다양한 작업을 할 수 있습니다.</li>
<li>스크립트 파일 (*.hds) 은 텍스트에디터(메모장 등)로 수정할 수 있습니다.</li>
<li>스크립트 파일들을 프로그램에 드래그 &amp; 드랍해서 실행시킬 수도 있습니다.</li>
<li>실행파일 경로에 scripts 폴더 만들고 스크립트 파일 (*.hds) 넣으면 시작할 때 자동으로 실행합니다.</li>
<li>스크립트 다운로드 :<br>
<a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts">https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts</a></li>
<li>스크립트 작성 방법 :<br>
<a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script">https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script</a></li>
</ul>
<h3>DPI 우회</h3>
<ul>
<li>옵션 - 설정 - 고급 설정 - DPI 우회</li>
<li><a href="https://github.com/ValdikSS/GoodbyeDPI">GoodbyeDPI</a>를 이용해서 DPI 차단 / 우회를 합니다.</li>
</ul>
<h3>쿠키 불러오기</h3>
<ul>
<li>옵션 - 설정 - 고급 설정 - 쿠키 - 불러오기...</li>
<li>브라우저 확장프로그램에서 추출한 쿠키를 불러올 수 있습니다. (Netscape HTTP Cookie File)</li>
<li>이 쿠키를 이용해서 로그인이 필요한 페이지에 접근할 수 있습니다.</li>
<li>크롬 확장프로그램: <a href="https://chrome.google.com/webstore/detail/cookiestxt/njabckikapfpffapmjgojcnbfjonfjfg">cookies.txt</a>, <a href="https://chrome.google.com/webstore/detail/get-cookiestxt/bgaddhkoddajcdgocldbbfleckgcbcid">Get cookies.txt</a></li>
<li>파이어폭스 확장프로그램: <a href="https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/">cookies.txt</a>
<li>만료된 쿠키는 회색으로 표시됩니다.</li>
</ul>
<h3>크롬 확장 프로그램</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader/wiki/Chrome-Extension">Hitomi Downloader</a></li>
<li>기능:<br>
확장프로그램이 필요한 사이트의 다운로드<br>
쿠키 업데이트
</ul>
<h3>종료</h3>
<ul>
<li>저장 &amp; 종료 :<br>
설정과 현재 추가된 목록을 저장하고 종료</li>
<li>종료 :<br>
저장하지 않고 종료</li>
<li>다시 켤 때, 가장 최근에 저장한 상태로 시작합니다.</li>
</ul>
<h3>기타 단축키</h3>
<ul>
<li>Alt + D : 주소바 ↔ 작업 목록 전환</li>
<li>Ctrl + 1 ~ 7 : 작업에 태그 표시</li>
<li>Ctrl + Tab : 도구창 숨기기</li>
<li>Ctrl + - / + : 썸네일 크기 조절</li>
<li>Ctrl + 스크롤 : 썸네일 크기 조절</li>
<li>Space : 그룹 열고 닫기</li>
</ul>
<h3>피드백</h3>
<ul>
<li><a href="https://github.com/KurtBestor/Hitomi-Downloader/issues">https://github.com/KurtBestor/Hitomi-Downloader/issues</a></li>
</ul>
<h3>기타</h3>
<ul>
<li>다운로드한 파일들은 개인 소장 용도로만 사용해 주세요.</li>
<li>자세한 업데이트 사항은 도움말 - 정보 - 우측하단 버튼을 눌러 확인해 주세요.</li>
</ul>
</body>
</html>