| 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 |
| |
| |
| 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) |
|
|
|
|
|
|