File size: 3,127 Bytes
ade4f6a fa3606d ade4f6a fa3606d ade4f6a e8abd42 ade4f6a ffcba68 ade4f6a ffcba68 ade4f6a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
from datetime import datetime
from time import sleep
from typing import List
from playwright.sync_api import Page
from lib.log_parser import WebItem
class TranslatorPage:
def __init__(self, page:Page):
self.page = page
@property
def _switch(self):
return self.page.get_by_role("switch")
@property
def _trans_selector(self):
return self.page.locator(".ant-select-selector")
def start(self, translation_lang):
if translation_lang == "zh2en":
self.start_zh2en()
elif translation_lang == "en2zh":
self.start_en2zh()
else:
raise TypeError(f"invalid translation_lang: {translation_lang}")
def start_zh2en(self):
self._trans_selector.click()
self.page.locator(".ant-select-item").get_by_text("Chinese -> English").click()
self.set_on()
print("page started zh2en translation")
def start_en2zh(self):
self._trans_selector.click()
self.page.locator(".ant-select-item").get_by_text("English -> Chinese").click()
self.set_on()
print("page started en2zh translation")
def _is_on(self):
state = self._switch.get_attribute("aria-checked")
return True if state=="true" else False
def set_on(self):
if not self._is_on():
self._switch.click()
print("click button to set translation on")
def set_off(self):
if self._is_on():
self._switch.click()
print("click button to set translation off")
def get_current_node_text(self, duration=0, interval=0.05)-> List[WebItem]:
"""在一定时间内持续读取页面最新的 node的内容"""
print(f"capture page latest content for duration: {duration}s")
translate_items = []
last_src, last_dst = None, None
for i in range(int(duration // interval) + 1):
current_node = self.page.locator(".trans-list").locator(".current_node")
src_lang = current_node.locator(".trans-src-lang").inner_text()
dst_lang = current_node.locator(".trans-dst-lang").inner_text()
tsp = datetime.now()
sleep(interval)
if src_lang == last_src and dst_lang == last_dst:
continue
# print("src lang:", src_lang)
# print("dst lang:", dst_lang)
translate_items.append(WebItem(tsp, src_lang, dst_lang))
last_src, last_dst = src_lang, dst_lang
print(f"capture page latest content finished")
return translate_items
def get_translated_texts(self, translation_lang):
src_all = self.page.locator(".trans-list").locator(".trans-src-lang").all_inner_texts()
dst_all = self.page.locator(".trans-list").locator(".trans-dst-lang").all_inner_texts()
# 使用空格连接英文的不同段落
if translation_lang == "zh2en":
return "".join(src_all), " ".join(dst_all)
elif translation_lang == "en2zh":
return " ".join(src_all), "".join(dst_all)
return "".join(src_all), "".join(dst_all)
|