浏览器初始化内容

This commit is contained in:
Jerry Yan 2022-06-05 22:38:31 +08:00
parent 9850a24551
commit d48f7c772f
4 changed files with 93 additions and 7 deletions

View File

@ -1,2 +1,12 @@
class IDriver(): class IDriver():
... 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:
...

View File

@ -1,12 +1,17 @@
import threading
from urllib.parse import urlparse
from config.helper import config from config.helper import config
from browser.edge import EdgeDriver from browser.edge import EdgeDriver
from browser.chrome import ChromeDriver from browser.chrome import ChromeDriver
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Type from typing import Type, Optional
from browser.IDriver import IDriver from browser.IDriver import IDriver
_manager: "Optional[BrowserManager]" = None
class BrowserManager(): class BrowserManager():
_mapping: "dict[str, Type[IDriver]]" = { _mapping: "dict[str, Type[IDriver]]" = {
@ -18,8 +23,75 @@ class BrowserManager():
_config = config()["webdriver"]["use"] _config = config()["webdriver"]["use"]
if _config not in self._mapping: if _config not in self._mapping:
raise Exception("不支持的浏览器") 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 @property
def driver(self): def driver(self):
return self._driver 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

View File

@ -23,6 +23,12 @@ output:
unknown: "./debug" unknown: "./debug"
known: False known: False
live:
rooms:
- "585723119943"
users:
- MS4wLjABAAAAzBItqEvCjPryxn_Y6w6LtRBFDOVNfjvYSJg8VVZFwlw
http: http:
host: 127.0.0.1 host: 127.0.0.1
port: 5000 port: 5000

View File

@ -3,7 +3,7 @@ import subprocess
from config.helper import config from config.helper import config
from handler.http_server import app 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 from output.manager import OutputManager
if __name__ == '__main__': 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 = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],))
api_thread.start() api_thread.start()
browser_manager = BrowserManager() browser_manager = init_browser_manager()
output_manager = OutputManager() output_manager = OutputManager()
output_manager.start_loop() output_manager.start_loop()
api_thread.join() api_thread.join()