浏览器初始化内容
This commit is contained in:
parent
9850a24551
commit
d48f7c772f
@ -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:
|
||||||
...
|
...
|
@ -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
|
||||||
|
@ -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
|
||||||
|
6
main.py
6
main.py
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user