From d48f7c772f6f82fdea07cf5739b7e44ce89e27c9 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 22:38:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 12 ++++++- browser/manager.py | 76 +++++++++++++++++++++++++++++++++++++++++++-- config/settings.yml | 6 ++++ main.py | 6 ++-- 4 files changed, 93 insertions(+), 7 deletions(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index e18d6ed..4eff625 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -1,2 +1,12 @@ class IDriver(): - ... \ No newline at end of file + def new_tab(self) -> str: + ... + + def change_tab(self, tab_handler: str): + ... + + def open_url(self, url: str, tab_handler: str = ""): + ... + + def screenshot(self, tab_handler: str = "") -> str: + ... diff --git a/browser/manager.py b/browser/manager.py index 2fd9118..94bb83f 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -1,12 +1,17 @@ +import threading +from urllib.parse import urlparse + from config.helper import config from browser.edge import EdgeDriver from browser.chrome import ChromeDriver from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Type + from typing import Type, Optional from browser.IDriver import IDriver +_manager: "Optional[BrowserManager]" = None + class BrowserManager(): _mapping: "dict[str, Type[IDriver]]" = { @@ -18,8 +23,75 @@ class BrowserManager(): _config = config()["webdriver"]["use"] if _config not in self._mapping: raise Exception("不支持的浏览器") - self._driver = self._mapping[_config]() + self._driver: IDriver = self._mapping[_config]() + self._tabs: list[TabInfo] = [] + + def init_browser(self): + _users = config()['live']['users'] + if type(_users) is not list: + _users = [_users] + _rooms = config()['live']['rooms'] + if type(_rooms) is not list: + _rooms = [_rooms] + for _user in _users: + self.open_user_page(str(_user)) + for _room in _rooms: + self.open_live_page(str(_room)) @property def driver(self): return self._driver + + def open_user_page(self, sec_user_id: str): + tab = TabInfo() + tab.tab_type = TabInfo.TAB_TYPE_USER + tab.user_id = sec_user_id + if urlparse(sec_user_id).scheme: + tab.url = sec_user_id + else: + # 单独的用户id + tab.url = "https://www.douyin.com/user/" + sec_user_id + self.open_tab(tab) + + def open_live_page(self, live_url: str): + tab = TabInfo() + tab.tab_type = TabInfo.TAB_TYPE_LIVE + if not urlparse(live_url).scheme: + # 单独的房间号 + live_url = "https://live.douyin.com/" + live_url + tab.url = live_url + self.open_tab(tab) + + def open_tab(self, tab_info: "TabInfo"): + tab_handler = self._driver.new_tab() + tab_info.tab_handler = tab_handler + if not tab_info.tab_type: + tab_info.tab_type = TabInfo.TAB_TYPE_OTHER + self.driver.open_url(tab_info.url, tab_handler) + if tab_info not in self._tabs: + self._tabs.append(tab_info) + + +class TabInfo(object): + TAB_TYPE_OTHER = "other" + TAB_TYPE_USER = "user" + TAB_TYPE_LIVE = "live" + + def __init__(self): + self.tab_handler: str = "" + self.user_id: str = "" + self.url: str = "" + self.tab_type: str = self.TAB_TYPE_OTHER + + +def init_manager(): + global _manager + _manager = BrowserManager() + threading.Thread(target=_manager.init_browser).start() + return _manager + + +def get_manager(): + if _manager is None: + return init_manager() + return _manager diff --git a/config/settings.yml b/config/settings.yml index 24d46a1..8f53b71 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -23,6 +23,12 @@ output: unknown: "./debug" known: False +live: + rooms: + - "585723119943" + users: + - MS4wLjABAAAAzBItqEvCjPryxn_Y6w6LtRBFDOVNfjvYSJg8VVZFwlw + http: host: 127.0.0.1 port: 5000 diff --git a/main.py b/main.py index 6fe29bf..ca0edea 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ import subprocess from config.helper import config from handler.http_server import app -from browser.manager import BrowserManager +from browser.manager import init_manager as init_browser_manager from output.manager import OutputManager if __name__ == '__main__': @@ -13,9 +13,7 @@ if __name__ == '__main__': ]) api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) api_thread.start() - browser_manager = BrowserManager() + browser_manager = init_browser_manager() output_manager = OutputManager() output_manager.start_loop() api_thread.join() - -