|
|
import time |
|
|
from typing import Literal |
|
|
|
|
|
from playwright.sync_api import Playwright, sync_playwright |
|
|
|
|
|
from lib.pages import TranslatorPage |
|
|
from environment import DEBUG_PORT, RunType |
|
|
|
|
|
class PageRunner: |
|
|
def __init__(self, run_type: RunType): |
|
|
self.run_type = run_type |
|
|
|
|
|
def start(self, p: Playwright)-> TranslatorPage: |
|
|
if self.run_type == RunType.electron: |
|
|
return TranslatorPage(self._start_electron(p)) |
|
|
elif self.run_type == RunType.code: |
|
|
return TranslatorPage(self._start_web(p)) |
|
|
elif self.run_type == RunType.dev: |
|
|
return TranslatorPage(self._start_web(p)) |
|
|
else: |
|
|
raise TypeError(f"invalid run_type: {self.run_type}") |
|
|
|
|
|
def _start_web(self, p: Playwright): |
|
|
url = "http://127.0.0.1:9191/app" |
|
|
browser = p.chromium.launch(headless=False) |
|
|
context = browser.new_context(permissions=['microphone']) |
|
|
page = context.new_page() |
|
|
for i in range(20): |
|
|
try: |
|
|
page.goto(url) |
|
|
break |
|
|
except Exception as e: |
|
|
print(f"Exception happened: {e}. retry {i+1}...") |
|
|
time.sleep(3) |
|
|
return page |
|
|
|
|
|
def _start_electron(self, p: Playwright): |
|
|
|
|
|
browser = p.chromium.connect_over_cdp(f"http://localhost:{DEBUG_PORT}") |
|
|
assert browser.is_connected() |
|
|
print("connected to electron debugging port") |
|
|
context = browser.contexts[0] |
|
|
page = context.pages[0] |
|
|
return page |
|
|
|
|
|
if __name__ == '__main__': |
|
|
with sync_playwright() as p: |
|
|
page = PageRunner(RunType.code).start(p) |
|
|
page.start_zh2en() |
|
|
page.set_off() |