diff --git a/89/chromedriver.exe b/89/chromedriver.exe new file mode 100644 index 0000000..d51602d Binary files /dev/null and b/89/chromedriver.exe differ diff --git a/UI_MAIN.py b/UI_MAIN.py index 0a40498..32edaa8 100644 --- a/UI_MAIN.py +++ b/UI_MAIN.py @@ -18,57 +18,77 @@ def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.setEnabled(True) - MainWindow.resize(272, 242) + MainWindow.resize(639, 193) MainWindow.setMinimumSize(QSize(268, 167)) MainWindow.setMaximumSize(QSize(16777215, 16777215)) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") - self.btnFrame = QFrame(self.centralwidget) - self.btnFrame.setObjectName(u"btnFrame") - self.btnFrame.setGeometry(QRect(9, 10, 251, 101)) - self.btnFrame.setFrameShape(QFrame.Box) - self.btnFrame.setFrameShadow(QFrame.Raised) - self.go_dev_page = QPushButton(self.btnFrame) - self.go_dev_page.setObjectName(u"go_dev_page") - self.go_dev_page.setGeometry(QRect(163, 10, 75, 81)) - self.show_ori_btn = QPushButton(self.btnFrame) - self.show_ori_btn.setObjectName(u"show_ori_btn") - self.show_ori_btn.setGeometry(QRect(13, 60, 131, 31)) - font = QFont() - font.setFamily(u"Consolas") - font.setPointSize(11) - font.setBold(False) - font.setWeight(50) - self.show_ori_btn.setFont(font) - self.show_trans_btn = QPushButton(self.btnFrame) - self.show_trans_btn.setObjectName(u"show_trans_btn") - self.show_trans_btn.setGeometry(QRect(13, 10, 131, 31)) - self.show_trans_btn.setFont(font) - self.timeFrame = QFrame(self.centralwidget) + self.wholeFrame = QFrame(self.centralwidget) + self.wholeFrame.setObjectName(u"wholeFrame") + self.wholeFrame.setGeometry(QRect(9, 10, 621, 151)) + self.wholeFrame.setFrameShape(QFrame.Box) + self.wholeFrame.setFrameShadow(QFrame.Raised) + self.reloadBtn = QPushButton(self.wholeFrame) + self.reloadBtn.setObjectName(u"reloadBtn") + self.reloadBtn.setGeometry(QRect(520, 110, 91, 28)) + self.window_list = QComboBox(self.wholeFrame) + self.window_list.setObjectName(u"window_list") + self.window_list.setGeometry(QRect(9, 112, 501, 21)) + self.timeFrame = QFrame(self.wholeFrame) self.timeFrame.setObjectName(u"timeFrame") - self.timeFrame.setGeometry(QRect(9, 120, 251, 31)) + self.timeFrame.setGeometry(QRect(250, 16, 151, 31)) self.timeFrame.setFrameShape(QFrame.Box) self.timeFrame.setFrameShadow(QFrame.Raised) self.sec = QLabel(self.timeFrame) self.sec.setObjectName(u"sec") - self.sec.setGeometry(QRect(83, 1, 81, 31)) + self.sec.setGeometry(QRect(80, 1, 61, 31)) self.trans_time = QLabel(self.timeFrame) self.trans_time.setObjectName(u"trans_time") - self.trans_time.setGeometry(QRect(13, 1, 61, 31)) - self.frame = QFrame(self.centralwidget) + self.trans_time.setGeometry(QRect(13, 1, 81, 31)) + self.frame = QFrame(self.wholeFrame) self.frame.setObjectName(u"frame") - self.frame.setGeometry(QRect(9, 160, 251, 31)) + self.frame.setGeometry(QRect(250, 63, 151, 31)) self.frame.setFrameShape(QFrame.Box) self.frame.setFrameShadow(QFrame.Raised) self.show_status = QLabel(self.frame) self.show_status.setObjectName(u"show_status") - self.show_status.setGeometry(QRect(50, 8, 191, 16)) + self.show_status.setGeometry(QRect(50, 8, 101, 20)) self.status_lbl = QLabel(self.frame) self.status_lbl.setObjectName(u"status_lbl") - self.status_lbl.setGeometry(QRect(13, 8, 31, 16)) - self.dev_info = QLabel(self.centralwidget) + self.status_lbl.setGeometry(QRect(13, 8, 51, 16)) + self.btnFrame = QFrame(self.wholeFrame) + self.btnFrame.setObjectName(u"btnFrame") + self.btnFrame.setGeometry(QRect(10, 10, 231, 91)) + self.btnFrame.setFrameShape(QFrame.Box) + self.btnFrame.setFrameShadow(QFrame.Raised) + self.show_ori_btn = QPushButton(self.btnFrame) + self.show_ori_btn.setObjectName(u"show_ori_btn") + self.show_ori_btn.setGeometry(QRect(10, 55, 131, 31)) + font = QFont() + font.setFamily(u"Consolas") + font.setPointSize(11) + font.setBold(False) + font.setWeight(50) + self.show_ori_btn.setFont(font) + self.show_trans_btn = QPushButton(self.btnFrame) + self.show_trans_btn.setObjectName(u"show_trans_btn") + self.show_trans_btn.setGeometry(QRect(10, 5, 131, 31)) + self.show_trans_btn.setFont(font) + self.stop_trans_btn = QPushButton(self.btnFrame) + self.stop_trans_btn.setObjectName(u"stop_trans_btn") + self.stop_trans_btn.setGeometry(QRect(147, 5, 75, 81)) + self.authorFrame = QFrame(self.wholeFrame) + self.authorFrame.setObjectName(u"authorFrame") + self.authorFrame.setGeometry(QRect(410, 10, 201, 91)) + self.authorFrame.setFrameShape(QFrame.Box) + self.authorFrame.setFrameShadow(QFrame.Raised) + self.dev_info = QLabel(self.authorFrame) self.dev_info.setObjectName(u"dev_info") - self.dev_info.setGeometry(QRect(13, 202, 251, 21)) + self.dev_info.setGeometry(QRect(100, 10, 81, 71)) + self.dev_info.setFrameShape(QFrame.NoFrame) + self.go_dev_page = QPushButton(self.authorFrame) + self.go_dev_page.setObjectName(u"go_dev_page") + self.go_dev_page.setGeometry(QRect(7, 5, 75, 81)) MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName(u"statusbar") @@ -81,14 +101,25 @@ def setupUi(self, MainWindow): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Ehnd \uc6f9 \ubc88\uc5ed", None)) - self.go_dev_page.setText(QCoreApplication.translate("MainWindow", u"\uc81c\uc791\uc790\n" -"\ud648\ud398\uc774\uc9c0", None)) - self.show_ori_btn.setText(QCoreApplication.translate("MainWindow", u"\uc6d0\ubcf8 \ubcf4\uae30", None)) - self.show_trans_btn.setText(QCoreApplication.translate("MainWindow", u"\ubc88\uc5ed\ubcf8 \ubcf4\uae30", None)) + self.reloadBtn.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ub85c\ub4dc", None)) self.sec.setText("") self.trans_time.setText(QCoreApplication.translate("MainWindow", u"\ubc88\uc5ed \uc2dc\uac04:", None)) self.show_status.setText("") self.status_lbl.setText(QCoreApplication.translate("MainWindow", u"\uc0c1\ud0dc: ", None)) - self.dev_info.setText(QCoreApplication.translate("MainWindow", u"\uc81c\uc791\uc790: kdr \ub9c8\uc9c0\ub9c9 \uc5c5\ub370\uc774\ud2b8: 210411", None)) + self.show_ori_btn.setText(QCoreApplication.translate("MainWindow", u"\uc6d0\ubcf8 \ubcf4\uae30", None)) + self.show_trans_btn.setText(QCoreApplication.translate("MainWindow", u"\ubc88\uc5ed\ubcf8 \ubcf4\uae30", None)) + self.stop_trans_btn.setText(QCoreApplication.translate("MainWindow", u"\ubc88\uc5ed \uc911\uc9c0", None)) + self.dev_info.setText(QCoreApplication.translate("MainWindow", u"\uc81c\uc791\uc790: kdr \n" +" V.210416", None)) + self.go_dev_page.setText(QCoreApplication.translate("MainWindow", u"\uc81c\uc791\uc790\n" +"\ud648\ud398\uc774\uc9c0", None)) # retranslateUi +if __name__ == "__main__": + import sys + app = QApplication(sys.argv) + form = QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(form) + form.show() + sys.exit(app.exec_()) diff --git a/UI_MAIN.ui b/UI_MAIN.ui index 50d2f3f..e6aa16d 100644 --- a/UI_MAIN.ui +++ b/UI_MAIN.ui @@ -9,8 +9,8 @@ 0 0 - 272 - 242 + 639 + 193 @@ -29,13 +29,13 @@ Ehnd 웹 번역 - + 9 10 - 251 - 101 + 621 + 151 @@ -44,160 +44,232 @@ QFrame::Raised - + - 163 - 10 - 75 - 81 + 520 + 110 + 91 + 28 - 제작자 -홈페이지 + 리로드 - + - 13 - 60 - 131 - 31 + 9 + 112 + 501 + 21 - - - Consolas - 11 - 50 - false - - - - 원본 보기 - - + - 13 - 10 - 131 + 250 + 16 + 151 31 - - - Consolas - 11 - 50 - false - + + QFrame::Box - - 번역본 보기 + + QFrame::Raised + + + + 86 + 1 + 61 + 31 + + + + + + + + + + 13 + 1 + 81 + 31 + + + + 번역 시간: + + - - - - - 9 - 120 - 251 - 31 - - - - QFrame::Box - - - QFrame::Raised - - + - 83 - 1 - 81 + 250 + 63 + 151 31 - - + + QFrame::Box - - - - - 13 - 1 - 61 - 31 - - - - 번역 시간: + + QFrame::Raised + + + + 50 + 8 + 101 + 20 + + + + + + + + + + 13 + 8 + 51 + 16 + + + + 상태: + + - - - - - 9 - 160 - 251 - 31 - - - - QFrame::Box - - - QFrame::Raised - - + - 50 - 8 - 191 - 16 + 10 + 10 + 231 + 91 - - + + QFrame::Box + + QFrame::Raised + + + + + 10 + 55 + 131 + 31 + + + + + Consolas + 11 + 50 + false + + + + 원본 보기 + + + + + + 10 + 5 + 131 + 31 + + + + + Consolas + 11 + 50 + false + + + + 번역본 보기 + + + + + + 147 + 5 + 75 + 81 + + + + 번역 중지 + + - + - 13 - 8 - 31 - 16 + 410 + 10 + 201 + 91 - - 상태: + + QFrame::Box + + + QFrame::Raised + + + + 100 + 10 + 81 + 71 + + + + QFrame::NoFrame + + + 제작자: kdr + V.210415 + + + + + + 7 + 5 + 75 + 81 + + + + 제작자 +홈페이지 + + - - - - 13 - 202 - 251 - 21 - - - - 제작자: kdr 마지막 업데이트: 210411 - - diff --git a/__pycache__/UI_MAIN.cpython-37.pyc b/__pycache__/UI_MAIN.cpython-37.pyc index 37f1ade..d0c54f3 100644 Binary files a/__pycache__/UI_MAIN.cpython-37.pyc and b/__pycache__/UI_MAIN.cpython-37.pyc differ diff --git a/__pycache__/main.cpython-37.pyc b/__pycache__/main.cpython-37.pyc new file mode 100644 index 0000000..95327cd Binary files /dev/null and b/__pycache__/main.cpython-37.pyc differ diff --git a/_feature_test.py b/_feature_test.py deleted file mode 100644 index 965e499..0000000 --- a/_feature_test.py +++ /dev/null @@ -1,84 +0,0 @@ -import chromedriver_autoinstaller -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.common import exceptions - -from module._requirement_func import * - -# chromedriver_autoinstaller.install('./utils/') - - - - - -def runTrans(i): - print(i) - # try: - # if i.is_displayed(): - - # inner = i.get_attribute('innerHTML') - # outer = i.get_attribute('outerHTML') - - # if bool(len(re.sub(r'\s+', '', inner))): - # p_html = PrettifyHtml(outer).split('\n') - - # modified_html = [] - # for ih in p_html: - - # if re.sub(r'\s+', '', ih).startswith('<'): - # modified_html.append(ih) - # else: - # modified_html.append(t_j2k(ih)) - - - # ih_elements = ''.join(modified_html) - - # nDict = {} - # nDict[i] = ih_elements - - # except: - # pass - - - # return nDict - - - -from multiprocessing import Pool, freeze_support -if __name__ == "__main__": - freeze_support() - - options = webdriver.ChromeOptions() - options.add_argument("disable-gpu") - options.add_argument("disable-infobars") - options.add_argument("--disable-extensions") - options.add_experimental_option('excludeSwitches', ['enable-logging']) - - driver = webdriver.Chrome(executable_path='./89/chromedriver.exe',options=options) - driver.get('https://syosetu.org/novel/254978/') - sleep(1) - - - - a = driver.find_elements_by_xpath('.//*[normalize-space(text())]') - pprint(a) - print(type(a)) - - driver.close() - - p = Pool(len(a)) - pprint(p.map(runTrans, a)) - - - - - # for k, v in ele_dict.items(): - # try: - # driver.execute_script("arguments[0].outerHTML = arguments[1]", k, v) - # except: - # print(v) - - -# b = t_j2k('##########'.join()) - - \ No newline at end of file diff --git a/_mp_test.py b/_mp_test.py deleted file mode 100644 index d095cd7..0000000 --- a/_mp_test.py +++ /dev/null @@ -1,51 +0,0 @@ -import asyncio -from module._requirement_func import * -from module._translate_j2k import * - - -jText = ''' -女は面倒。男同士でつるんでる方が気が楽。そんな女嫌いの男子高校生だった主人公は、ある朝学校に向かう途中、スマホを弄りながらよそ見運転をしていた中年女に撥ねられ、意識を失う。 -次に目覚めた時、彼は見知らぬ異世界で、ホーク・ゴルドなる大金持ちの家の子供、それも、甘やかされて育ったがために、モラルもへったくれもない極度の女好きの肥満児に転生してしまっていた。 -いきなり第2の人生を歩むことを余儀なくされてしまった彼は、金や権力に群がる女たちを遠ざけ、ついでに美女メイドや美幼女妹、美少女婚約者たちからなんとか距離を置こうと足掻き始める。 -しかし00年代後半生まれの彼は知らなかった。この世界が90年代に発売された懐かしのギャルゲー『エレメンツイレブン』の世界であり、ホーク・ゴルドはそのお邪魔キャラであることを。 - -【現在第4部1章まで完結しました】 -いよいよ原作ゲームが開始する年になってしまいましたが果たして - -美少女!美男子!幼女!イケメン!みたいな、恋愛脳の美男美女ばかりの展開に少しばかり胃もたれしてしまったそこのあなた、たまには箸休めにポッチャリ系男主人公と洋画の吹き替えみたいな渋い声してそうなおっさん達が主体で綴られていく、恋愛要素のうっすい物語はいかがですか? -※全体的に自業自得とはいえ美少女たちが若干酷い目に遭う描写(TF・石化・etc)を含みます。そういった要素に抵抗のある方はご注意ください - -''' - - -start = time() -async def WriteThread(num): - jpn = t_j2k(jText) - WriteFile(jpn, f'{num}.txt') - return jpn - -async def main(): - s = [asyncio.ensure_future(WriteThread(i)) for i in range(10)] - await asyncio.gather(*s) - -loop = asyncio.new_event_loop() -asyncio.set_event_loop(loop) -loop.run_until_complete(main()) - - - - -# start2 = time() -# def WriteThread2(num): -# jpn = t_j2k(jText) -# WriteFile(jpn, f'{num}.txt') -# return jpn - -# thr = [Thread(target=WriteThread2, args=(i,)) for i in range(10)] - -# for t in thr: -# t.start() - -# for t in thr: -# t.join() -# print(time()-start2) \ No newline at end of file diff --git a/_tptest.py b/_tptest.py deleted file mode 100644 index 2c86494..0000000 --- a/_tptest.py +++ /dev/null @@ -1,89 +0,0 @@ - -from module._requirement_func import * -from module._translate_j2k import * - - -text = ''' -レオピン少年は、生まれつき器用であった。 -彼はその器用さを活かし、幼い頃から様々なクラフトを行ない、仲間たちに貢献してきた。 - -レオピンは『王立開拓学園』に仲間たちとともに進学。 -しかし入学式での『能力開花の儀式』において、レオピンに与えられたステータスは悲惨なものであった。 - -『職業は無職』 -『ステータスは、器用さ以外は初期値のままで成長しない』 -『スキルは器用貧乏』 - -器用さ以外に全く取り柄のないレオピンを、クラスメイトたちは『追放』。 -レオピンは『特別養成学級』という、落ちこぼれのクラスに入れられてしまう。 - -ひとりぼっちになってしまったレオピン。 -しかし与えられたスキル『器用貧乏』が、意外な性能を持っていることに気付く。 - -それは、 - -『器用さのステータスを、他のステータスに変換できる』 -『好きな職業に転職できる』 - -というものであった。 - -レオピンはまず『木こり』に転職し、森から木材を得る。 -さらに『大工』に転職し、誰よりも立派な家を建築。 - -『鑑定士』に転職してレアアイテムを判別し、『戦斧使い』に転職してチョッカイを掛けてきた他のクラスの生徒を撃退。 -『レンジャー』に転職してダンジョンを探索、『ニンジャ』に転職して罠を楽々くぐり抜ける。 - -レオピンは単独(ソロ)で、なんでもこなせるだけの力を手に入れていた。 -ひたすら無双しているうちに、幼なじみの聖女に慕われ、美女錬金術師から見初められ、レオピンの活躍はさらに知れ渡っていく。 - -一方、レオピンを追放したクラスメイトたちは、レオピンの能力を目の当たりにして追放を後悔。 -家は掘っ立て小屋のままで、探索もままならず、じょじょに学園内での居場所を失っていき、破滅する。 -''' - - -from multiprocessing import Process, freeze_support - - - -if __name__ == "__main__": - freeze_support() - - prc = [Process(target=t_j2k, args=(f"{p}. {text}",)) for p in range(300)] - - for p in prc: - p.start() - - for p in prc: - p.join() - - - - print("완료!") - - - - - -# def runTrans(ele_dict, i): -# if i.is_displayed(): - -# inner = i.get_attribute('innerHTML') -# outer = i.get_attribute('outerHTML') - -# print(len(re.sub(r'\s+', '', inner))) -# if bool(re.sub(r'\s+', '', inner)): -# p_html = PrettifyHtml(outer).split('\n') - -# modified_html = [] -# for ih in p_html: - -# if ih.startswith('<'): -# modified_html.append(ih) -# else: -# modified_html.append(t_j2k(ih)) - - -# ih_elements = ''.join(modified_html) - -# ele_dict[i] = ih_elements - diff --git a/comp.json b/comp.json new file mode 100644 index 0000000..fb5b340 --- /dev/null +++ b/comp.json @@ -0,0 +1 @@ +{"command_data":{"onefile":true,"console":true,"additional_files":{}},"id_injectable":{"file":"C:/Users/power/Desktop/Project/Dev/EhndWebTranslate/main.py","icon":"C:/Users/power/Desktop/Project/Dev/EhndWebTranslate/.ico","output_location":"","VALUE--upx-dir":"","VALUE--log-level":"","VALUE-n":"","VALUE--add-binary":"","VALUE-p":"","COMMASPLIT--hidden-import":"","VALUE--additional-hooks-dir":"","VALUE--runtime-hook":"","COMMASPLIT--exclude-module":"","VALUE--key":"","VALUE--debug":"","VALUE--version-file":"","VALUE-m":"","VALUE-r":"","VALUE--osx-bundle-identifier":"","VALUE--runtime-tmpdir":"","extra_command_data":""},"switches":{"disable_recursion_limit":false,"OPTION-a":false,"OPTION--clean":false,"OPTION-s":false,"OPTION--noupx":false,"OPTION--uac-admin":false,"OPTION--uac-uiaccess":false,"OPTION--win-private-assemblies":false,"OPTION--win-no-prefer-redirects":false,"OPTION--bootloader-ignore-signals":false}} \ No newline at end of file diff --git a/compiler.bat b/compiler.bat new file mode 100644 index 0000000..c37ab7f --- /dev/null +++ b/compiler.bat @@ -0,0 +1 @@ +pyinstaller --noupx --onefile -i "./사요.ico" "./main.py" \ No newline at end of file diff --git a/ehnd_web_translate.py b/ehnd_web_translate.py new file mode 100644 index 0000000..7ea760e --- /dev/null +++ b/ehnd_web_translate.py @@ -0,0 +1,244 @@ +#-*- coding:utf-8 -*- + +from module._translate_j2k import t_j2k +from module._requirement_func import * + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + +import chromedriver_autoinstaller +from selenium import webdriver +from selenium.webdriver.common.keys import Keys +from selenium.common import exceptions + +import asyncio + +from UI_MAIN import Ui_MainWindow + + +findJpn = re.compile('[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]') + + +def async_loop(func, *args): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(func(*args)) + loop.close() + + + + + +class LoadDriverWindow(QThread): + def __init__(self, window): + QThread.__init__(self) + self.window = window + self.winList = [] + + + + def run(self): + self.window.window_list.clear() + self.dw_handles = self.window.driver.window_handles + cwh = self.window.driver.current_window_handle + + for dw in self.dw_handles: + self.window.driver.switch_to.window(dw) + self.window.window_list.addItem(self.window.driver.title) + + self.window.driver.switch_to.window(cwh) + + + + + + +class TransThread(QThread): + def __init__(self, window, isTrans=True): + QThread.__init__(self) + self.working = True + self.window = window + self.isTrans = isTrans + self.setTerminationEnabled = True + + self.ehnd_webtr_log = "" + + + def stop(self): + self.window.btnSetting(setNum=1) + self.window.show_status.setText("번역 중지!") + self.terminate() + + + def run(self): + self.window.btnSetting(setNum=0) + try: + start_time = time() + self.window.sec.setText("") + + if self.isTrans: + self.window.show_status.setText("번역 중") + a = self.window.driver.find_elements_by_xpath('.//*[normalize-space(text())]') + + async_loop(self.rt, a) + + self.window.sec.setText(f"{int(time()-start_time)}초") + self.window.show_status.setText("번역 성공") + + + else: + self.window.driver.refresh() + self.window.sec.setText("") + self.window.show_status.setText("원본 보기") + + + except: + self.window.show_status.setText("번역 실패") + + finally: + self.window.btnSetting(setNum=1) + + + + async def runTrans(self, i): + try: + if i.is_displayed(): + + inner = i.get_attribute('innerHTML') + outer = i.get_attribute('outerHTML') + + if bool(len(re.sub(r'\s+', '', inner))): + p_html = PrettifyHtml(outer).split('\n') + + modified_html = [] + for ih in p_html: + + if re.sub(r'\s+', '', ih).startswith('<'): + modified_html.append(ih) + else: + + isJpn = findJpn.search(ih) + + if isJpn != None: + modified_html.append(t_j2k(japanese=ih)) + print("번역O -> ", ih) + else: + modified_html.append(ih) + print("번역X -> ", ih) + + + ih_elements = ''.join(modified_html) + + self.window.driver.execute_script("arguments[0].outerHTML = arguments[1]", i, ih_elements) + + + except exceptions.StaleElementReferenceException: + print("StaleElementRefernceException") + + + async def rt(self, a): + s = [asyncio.ensure_future(self.runTrans(i)) for i in a] + await asyncio.gather(*s) + + + +class EhndTrans(QMainWindow, Ui_MainWindow): + + def __init__(self): + super().__init__() + self.setThread = None + + options = webdriver.ChromeOptions() + options.add_argument("disable-gpu") + options.add_argument("disable-infobars") + options.add_argument("--disable-extensions") + options.add_experimental_option('excludeSwitches', ['enable-logging']) + # prefs = \ + # { + # 'profile.default_content_setting_values': + # { + # 'cookies' : 2, 'images': 2, 'plugins' : 2, 'popups': 2, 'geolocation': 2, 'notifications' : 2, 'auto_select_certificate': 2, 'fullscreen' : 2, 'mouselock' : 2, 'mixed_script': 2, 'media_stream' : 2, 'media_stream_mic' : 2, 'media_stream_camera': 2, 'protocol_handlers' : 2, 'ppapi_broker' : 2, 'automatic_downloads': 2, 'midi_sysex' : 2, 'push_messaging' : 2, 'ssl_cert_decisions': 2, 'metro_switch_to_desktop' : 2, 'protected_media_identifier': 2, 'app_banner': 2, 'site_engagement' : 2, 'durable_storage' : 2 + # } + # } + # options.add_experimental_option('prefs', prefs) + + # self.driver = webdriver.Chrome(executable_path='./89/chromedriver.exe',options=options) + + chromedriver_autoinstaller.install('./') + self.driver = webdriver.Chrome(options=options) + self.driver.get("https://www.google.com") + + self.setupUi(self) + + QObject.connect(self.show_trans_btn, SIGNAL('clicked()'), self.showTrans) + QObject.connect(self.show_ori_btn, SIGNAL('clicked()'), self.showOri) + QObject.connect(self.go_dev_page, SIGNAL('clicked()'), self.goDevPage) + QObject.connect(self.reloadBtn, SIGNAL('clicked()'), self.reloadWindow) + QObject.connect(self.stop_trans_btn, SIGNAL('clicked()'), self.stopThread) + self.window_list.currentIndexChanged.connect(self.setWindow) + + self.btnSetting(setNum=1) + self.reloadWindow() + + self.show() + + + + def showTrans(self): + st = TransThread(self, isTrans=True) + self.setThread = st + st.start() + + + def showOri(self): + so = TransThread(self, isTrans=False) + self.setThread = so + so.start() + + + def goDevPage(self): + open_new('https://blog.naver.com/powerapollon') + + + def reloadWindow(self): + ldw = LoadDriverWindow(self) + self.setThread = ldw + ldw.start() + + + def setWindow(self): + dw_handles = self.driver.window_handles + self.driver.switch_to.window(dw_handles[self.window_list.currentIndex()]) + + + def stopThread(self): + self.setThread.stop() + + + def btnSetting(self, setNum): + if setNum == 0: + self.show_trans_btn.setDisabled(True) + self.show_ori_btn.setDisabled(True) + self.window_list.setDisabled(True) + self.reloadBtn.setDisabled(True) + self.go_dev_page.setDisabled(True) + self.stop_trans_btn.setDisabled(False) + + if setNum == 1: + self.show_trans_btn.setDisabled(False) + self.show_ori_btn.setDisabled(False) + self.window_list.setDisabled(False) + self.reloadBtn.setDisabled(False) + self.go_dev_page.setDisabled(False) + self.stop_trans_btn.setDisabled(True) + + + +if __name__ == "__main__": + import sys + app = QApplication(sys.argv) + et = EhndTrans() + app.exec_() + et.driver.quit() + sys.exit() \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100644 index fa428ad..0000000 --- a/main.py +++ /dev/null @@ -1,170 +0,0 @@ -#-*- coding:utf-8 -*- - -from module._translate_j2k import t_j2k -from module._requirement_func import * - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - -import chromedriver_autoinstaller -from selenium import webdriver -from selenium.webdriver.common.keys import Keys -from selenium.common import exceptions - -import asyncio - -from UI_MAIN import Ui_MainWindow - - - - -semap = Semaphore(5) - - - - -class TransThread(Thread): - def __init__(self, window, isTrans=True): - super().__init__() - self.setDaemon = True - - self.window = window - self.isTrans = isTrans - - self.ele_dict = {} - - def run(self): - try: - start_time = time() - self.window.sec.setText("") - self.window.show_status.setText("번역 중") - self.window.btnFrame.setDisabled(True) - - if self.isTrans: - - a = self.window.driver.find_elements_by_xpath('.//*[normalize-space(text())]') - - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - loop.run_until_complete(self.rt(a)) - loop.close() - - - for k, v in self.ele_dict.items(): - try: - self.window.driver.execute_script("arguments[0].outerHTML = arguments[1]", k, v) - except: - pass - - - self.window.sec.setText(f"{int(time()-start_time)}초") - self.window.show_status.setText("번역 성공!") - - - else: - self.window.driver.refresh() - self.window.sec.setText("") - - - except: - self.window.show_status.setText("번역 실패!") - - finally: - self.window.btnFrame.setDisabled(False) - - - - - async def runTrans(self, i): - if i.is_displayed(): - - inner = i.get_attribute('innerHTML') - outer = i.get_attribute('outerHTML') - - if bool(len(re.sub(r'\s+', '', inner))): - p_html = PrettifyHtml(outer).split('\n') - - modified_html = [] - for ih in p_html: - - if re.sub(r'\s+', '', ih).startswith('<'): - modified_html.append(ih) - else: - modified_html.append(t_j2k(japanese=ih)) - - - ih_elements = ''.join(modified_html) - - self.ele_dict[i] = ih_elements - - - async def rt(self, a): - s = [asyncio.ensure_future(self.runTrans(i)) for i in a] - await asyncio.gather(*s) - - - - -class EhndTrans(QMainWindow, Ui_MainWindow): - - def __init__(self): - super().__init__() - - options = webdriver.ChromeOptions() - options.add_argument("disable-gpu") - options.add_argument("disable-infobars") - options.add_argument("--disable-extensions") - options.add_experimental_option('excludeSwitches', ['enable-logging']) - # prefs = \ - # { - # 'profile.default_content_setting_values': - # { - # 'cookies' : 2, 'images': 2, 'plugins' : 2, 'popups': 2, 'geolocation': 2, 'notifications' : 2, 'auto_select_certificate': 2, 'fullscreen' : 2, 'mouselock' : 2, 'mixed_script': 2, 'media_stream' : 2, 'media_stream_mic' : 2, 'media_stream_camera': 2, 'protocol_handlers' : 2, 'ppapi_broker' : 2, 'automatic_downloads': 2, 'midi_sysex' : 2, 'push_messaging' : 2, 'ssl_cert_decisions': 2, 'metro_switch_to_desktop' : 2, 'protected_media_identifier': 2, 'app_banner': 2, 'site_engagement' : 2, 'durable_storage' : 2 - # } - # } - # options.add_experimental_option('prefs', prefs) - - # self.driver = webdriver.Chrome(executable_path='./89/chromedriver.exe',options=options) - - chromedriver_autoinstaller.install() - self.driver = webdriver.Chrome(options=options) - self.driver.get("https://www.google.com") - - self.setupUi(self) - - QObject.connect(self.show_trans_btn, SIGNAL('clicked()'), self.showTrans) - QObject.connect(self.show_ori_btn, SIGNAL('clicked()'), self.showOri) - QObject.connect(self.go_dev_page, SIGNAL('clicked()'), self.goDevPage) - - self.show() - - - - def showTrans(self): - tt = TransThread(self, isTrans=True) - tt.start() - - - def showOri(self): - tt = TransThread(self, isTrans=False) - tt.start() - - - def goDevPage(self): - open_new('https://blog.naver.com/powerapollon') - - - - - - -if __name__ == "__main__": - freeze_support() - import sys - app = QApplication(sys.argv) - et = EhndTrans() - app.exec_() - et.driver.close() - sys.exit() - \ No newline at end of file diff --git a/module/__pycache__/_requirement_func.cpython-37.pyc b/module/__pycache__/_requirement_func.cpython-37.pyc index 88c2ca8..a665412 100644 Binary files a/module/__pycache__/_requirement_func.cpython-37.pyc and b/module/__pycache__/_requirement_func.cpython-37.pyc differ diff --git a/module/__pycache__/_translate_j2k.cpython-37.pyc b/module/__pycache__/_translate_j2k.cpython-37.pyc index fc5f605..1adcb12 100644 Binary files a/module/__pycache__/_translate_j2k.cpython-37.pyc and b/module/__pycache__/_translate_j2k.cpython-37.pyc differ diff --git a/module/_requirement_func.py b/module/_requirement_func.py index 182724c..c83c8ee 100644 --- a/module/_requirement_func.py +++ b/module/_requirement_func.py @@ -4,8 +4,6 @@ from module._translate_j2k import * from bs4 import BeautifulSoup from webbrowser import open_new -from threading import Thread, Semaphore -from multiprocessing import Process, freeze_support import re from time import time from pprint import pprint diff --git a/module/_translate_j2k.py b/module/_translate_j2k.py index 67a59fe..eeebfb5 100644 --- a/module/_translate_j2k.py +++ b/module/_translate_j2k.py @@ -162,13 +162,13 @@ def TransJ2K(japanese: str, isHtml=False): else: text = text.replace('”', '"') - text = text.replace('”', '') else: text = sub('p[\w]*&[\w]*[:|.|a-zA-Z]', '', text) + return text diff --git a/uitopy.bat b/uitopy.bat index 16cc747..5d28b38 100644 --- a/uitopy.bat +++ b/uitopy.bat @@ -2,11 +2,11 @@ pyside2-uic.exe .\UI_MAIN.ui -o .\UI_MAIN.py -@REM echo if __name__ == "__main__": >> UI_MAIN.py -@REM echo import sys >> UI_MAIN.py -@REM echo app = QApplication(sys.argv) >> UI_MAIN.py -@REM echo form = QMainWindow() >> UI_MAIN.py -@REM echo ui = Ui_MainWindow() >> UI_MAIN.py -@REM echo ui.setupUi(form) >> UI_MAIN.py -@REM echo form.show() >> UI_MAIN.py -@REM echo sys.exit(app.exec_()) >> UI_MAIN.py +echo if __name__ == "__main__": >> UI_MAIN.py +echo import sys >> UI_MAIN.py +echo app = QApplication(sys.argv) >> UI_MAIN.py +echo form = QMainWindow() >> UI_MAIN.py +echo ui = Ui_MainWindow() >> UI_MAIN.py +echo ui.setupUi(form) >> UI_MAIN.py +echo form.show() >> UI_MAIN.py +echo sys.exit(app.exec_()) >> UI_MAIN.py diff --git a/utils/Ehnd/PostFilter_@Hdor.txt b/utils/Ehnd/PostFilter_@Hdor.txt index a9c657e..1d97cdb 100644 --- a/utils/Ehnd/PostFilter_@Hdor.txt +++ b/utils/Ehnd/PostFilter_@Hdor.txt @@ -1101,6 +1101,7 @@ _TGL _CONN:PC_TSA_ ⓃpC&Tsa: 말야 12310210 0 //었겠지요ⓃpC&JN: 었잖아 12310210 0 //言ってたじゃん。可愛いじゃん。可愛かったじゃん。イカす看護婦じゃん。川じゃん。 _TGL _CONN:PC_JN_ 못할이지요ⓃpC&JN: 못하잖아 12310210 0 //使い切れないじゃん。 +_TGL _CONN:PC_JN_ 던이지요ⓃpC&JN: 었잖아 12310210 1 //楽しそうだったじゃん _TGL _CONN:PC_JN_ 겠?지요ⓃpC&JN: 잖아 12310210 1 //じゃない @@ -1346,6 +1347,7 @@ _TGL _CONN:PC_NKE_ 것 돈ⓃpC&NKe: 것일까요 12310210 0 //さて、どう _TGL _CONN:PC_NKE_ 있어군요ⓃpC&NKe: 있어서요 12310210 0 //お渡ししたいものがあってですね! _TGL _CONN:PC_NKE_ 더 하면 무릎ⓃpC&NKe: 남았네요 12310210 0 //もう少しですね _TGL _CONN:PC_NKE_ 이지의 돈ⓃpC&NKe: 일까요 12310210 0 //芸能人かなんかなのかね +_TGL _CONN:PC_NKE_ 것습니다ⓃpC&NKe: 것이군요 12310210 0 //これ以上増えたら困る、という訳ですね _TGL _CONN:PC_NKE_ ⓃpC&NKe: 12310210 0 //형용사 원형 + よね _TGL _CONN:PC_YHN_ 된다ⓃpC&YHn: 되네요 12310210 0 //ならないんだよね。 @@ -3421,7 +3423,7 @@ _skip_sub #N로(?=[는도서의]|부터|[ Ⓐ-Ⓩ]) 으로 19010110 1 _AUX:#N로 _skip_sub #M와(?=[겠는도였예의인일입]|지요|[ Ⓐ-Ⓩ]) 과 19010110 1 _AUX:#M와 // _skip_sub #N와(?=[겠는도였예의인일입]|지요|[ Ⓐ-Ⓩ]) 과 19010110 1 _AUX:#N와 //綺麗所と。麗奈ちゃんとでしょう? _skip_sub #[MN](?=[나니다란야여지][ Ⓐ-Ⓩ]|지[만요]) 이 19010110 1 //綺麗所だな。綺麗所や。綺麗所よ。綺麗所とは。綺麗所だわ。神よっ! -_skip_sub #[MN] ?(?=겠|구나|니까|라[고는도든면서]|야말로|예요) 이 19010110 1 //綺麗所とか。綺麗所と言った。綺麗所なら。綺麗所なんだから。綺麗所こそ。綺麗所でしょ。綺麗所だね。**さっきから冷汗出まくりなんだって +_skip_sub #[MN] ?(?=겠|구나|니까|라[고는도든면서](?!을)|야말로|예요) 이 19010110 1 //綺麗所とか。綺麗所と言った。綺麗所なら。綺麗所なんだから。綺麗所こそ。綺麗所でしょ。綺麗所だね。**さっきから冷汗出まくりなんだって //조사 수정 : 받침 없음 _skip_sub #[MN]x은 는 19010110 1 _AUX:x은 //袿は _skip_sub #[MN]x을 를 19010110 1 _AUX:x을 //袿を @@ -3724,7 +3726,7 @@ _skip_sub ▂에서도 #M라도 19010099 0 //また : またあまり過ぎてる職業はなんでしょうか? //にしても : にしても出し過ぎだろう? //ちなみにやりすぎたと思ったのか、倒れるスバルをおろおろと見守る -([Ⓐ-Ⓟ ]Ⓡ*)(너무|계속|서로|마구|다시|다) (이제 곧|곧|과연|그렇다 치더라도|덧붙여서|조금|마지막에|만일|최초로|언제나|또) $1$3 $2 21100100 1 +([Ⓐ-Ⓟ ]Ⓡ*)(너무|계속|서로|마구|다시|다) (이제 곧|곧|과연|그렇다 치더라도|덧붙여서|조금|마지막에|만일|최초로|언제나|또) $1$3 $2 1900100 1 //今ぞとばかりに甘やかしまくる //+ 계속 에 에 계속 21100100 0 //所に通い続けていた。 너무 에 에 너무 21100100 0 //レポートの締切に追われすぎて diff --git a/utils/Ehnd/PostFilter_@Hdor_C.txt b/utils/Ehnd/PostFilter_@Hdor_C.txt index c323aaf..0023d00 100644 --- a/utils/Ehnd/PostFilter_@Hdor_C.txt +++ b/utils/Ehnd/PostFilter_@Hdor_C.txt @@ -1067,6 +1067,7 @@ u▂ ㅣ▂ 10000010 0 ㄹㅔㅁ 렘 10999060 0 ㄹㅔㅂ 렙 10999060 0 ㄹㅔㅅ 렛 10999060 0 +ㄹㅔㅆ 렜 10999060 0 ㄹㅔㅇ 렝 10999060 0 ㄹㅕ_ 려 10999060 0 ㄹㅕㄱ 력 10999060 0 diff --git a/utils/Ehnd/PostFilter_@Hdor_User.txt b/utils/Ehnd/PostFilter_@Hdor_User.txt index 4227bf7..81d6fc1 100644 --- a/utils/Ehnd/PostFilter_@Hdor_User.txt +++ b/utils/Ehnd/PostFilter_@Hdor_User.txt @@ -119,6 +119,7 @@ _TGL _CONN:I9_YOU_ 차단하자 차단하라고 1 0 //遮ろうよ 차단하라 도와줘 주 도와주 30000000 0 //ドジな女の手助けをしてやった 시간표표 시간표 30000000 0 //時間割表 빌어ⓆⓆ 빌어Ⓠ 20000000 0 //書面にて、 +암시장장 암시장 20000000 0 //闇市場 //전처리에서 처리하기 곤란한 것 후처리에서 처리 것 소리(?<=[Ⓐ-Ⓢ].{4}) 무슨 소리 20000000 1 _AUX:것 소리 //舞台裏から、もの音が聞こえてきた。 @@ -237,7 +238,16 @@ _TGL _CONN:I9_YOU_ 차단하자 차단하라고 1 0 //遮ろうよ 차단하라 같으고 같이 하고 20000000 0 //田舎者然としている 목론 보고 계획 20000000 0 //俺の目論み通りだった 돕고 하지 돕지 20000000 0 //むしろ私たちこそがあなたをお助けしなければ - +먹어라야 먹어라 20000000 0 //食えよ +좋었을 좋았을 20000000 0 //マシだったかも まだマシだったかもしれない +그랬었어지만 그랬었지만 20000000 0 //今まではそうだったんだけど、 +그랬었어하지만 그랬었지만 + +//スルーする +무시해질 무시될 20000000 0 // スルーされそうな気が +무시해진 무시된 20000000 0 // おまえにスルーされた月島は +무시해져 무시되어 20000000 0 // スルーされてしまっている +through로 무시로 20000000 0 // そこはスルーで頼む //になっていないではない 되어 있지 않았다는 아닌가(?=[Ⓖ-Ⓩ]) 되지 않았지 않은가 20000000 1 _AUX:되어 있지 않았다는 아닌가 //まるで答えになっていないではないか 되어 있지 않았다는 아니다(?=[Ⓖ-Ⓩ]) 되지 않았잖아 20000000 1 _AUX:되어 있지 않았다는 아니다 //まるで答えになっていないではない @@ -440,6 +450,7 @@ _TGL _CONN:I2_ONGI_ 은의 은 30000000 0 //恩義を感じている 이었습니다의 이었어요 20000000 0 //見たことが無いものでしたの 嘘でしたの 치겨 세워 치켜 세워 20000000 0 //おだてられた 같았었어지만 같았었지만 20000000 0 //どうなる訳でもなさそうだったんだけど +하지 않아 것 하지 않는 것 20000000 0 //好かんのだ 보람(?=[Ⓖ-Ⓩ]) 인가 11410101 1 _AUX:보람 //これが、フランツの坊やが言っていた、【迷い宿】、かい. 조금 후도 조금 후에도 20000000 0 @@ -697,33 +708,26 @@ _skip_sub 모퉁이(가)? 날 뿔이 날 20001001 1 //角生えるはず //전처리 필터 연동 면§좋았어 면 좋았겠네 10000000 0 //毛布とか持って来ればよかったね §좋았어 잘됐네 10000000 0 //まぁよかったね、揉めないで。 -∧(이)던가 이었던가 10000000 0 -처음으로,∧ 처음이라, 10000000 0 -연∧ 열린 10000000 0 -∧라고∧ 라고 5000000 0 +ρ(이)던가 이었던가 10000000 0 +처음으로,ρ 처음이라, 10000000 0 +연ρ 열린 10000000 0 +ρ라고ρ 라고 5000000 0 불쾌함 그렇게§ 언짢은 듯 10000000 0 듯에 듯이 10000000 0 //あるため -있을∧ 있으니까 10000000 0 //試験があるため気は抜けない -것이다 싶은∧ 것이기 때문 10000000 0 //その目的が、主に俺にご飯を届けることであるために -때문에∧다 때문이다 10000000 0 //苦手であるためだ +있을ρ 있으니까 10000000 0 //試験があるため気は抜けない +것이다 싶은ρ 것이기 때문 10000000 0 //その目的が、主に俺にご飯を届けることであるために +때문에ρ다 때문이다 10000000 0 //苦手であるためだ -해는∧ 하라며 10000000 0 +해는ρ 하라며 10000000 0 //田舎でしっかりやれよって背中押してくれたな //@@는 은 1 0 //勝ち気さは 強さは 弱さは 懸命さは 気軽さは 高さは -와와∧ 오라며 10000000 0 //おいでと手でうながして、 -와라고∧ 오라고 10000000 0 //わたしからおいでと言ったのに -살아 둬와∧의 살아있다는 10000000 0 //魔将の方が生きておいでとの噂が、あるのです -//∧ 50000000 0 //오류 찾기 위해 비활성화 -본§본(?