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)