mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
优化ChromiumPage启动策略,修复传入driver启动时的问题
This commit is contained in:
parent
66a840bfdd
commit
753834e971
@ -74,11 +74,9 @@ class ChromiumPage(ChromiumBase):
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self._chromium_init()
|
self._chromium_init()
|
||||||
if self._tab_obj: # 传入driver的情况
|
|
||||||
self.process = None
|
|
||||||
|
|
||||||
else:
|
if not self._tab_obj: # 不是传入driver的情况
|
||||||
self.process = connect_browser(self._driver_options)[1]
|
connect_browser(self._driver_options)
|
||||||
if not tab_id:
|
if not tab_id:
|
||||||
json = self._control_session.get(f'http://{self.address}/json').json()
|
json = self._control_session.get(f'http://{self.address}/json').json()
|
||||||
tab_id = [i['id'] for i in json if i['type'] == 'page']
|
tab_id = [i['id'] for i in json if i['type'] == 'page']
|
||||||
@ -88,32 +86,33 @@ class ChromiumPage(ChromiumBase):
|
|||||||
|
|
||||||
self._driver_init(tab_id)
|
self._driver_init(tab_id)
|
||||||
|
|
||||||
|
self._page_init()
|
||||||
self._get_document()
|
self._get_document()
|
||||||
self._first_run = False
|
self._first_run = False
|
||||||
|
|
||||||
def _chromium_init(self):
|
def _page_init(self):
|
||||||
"""添加ChromiumPage独有的运行配置"""
|
"""页面相关设置"""
|
||||||
super()._chromium_init()
|
|
||||||
self._alert = Alert()
|
|
||||||
self._rect = None
|
|
||||||
|
|
||||||
def _driver_init(self, tab_id):
|
|
||||||
"""新建页面、页面刷新、切换标签页后要进行的cdp参数初始化
|
|
||||||
:param tab_id: 要跳转到的标签页id
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
super()._driver_init(tab_id)
|
|
||||||
ws = self._control_session.get(f'http://{self.address}/json/version').json()['webSocketDebuggerUrl']
|
ws = self._control_session.get(f'http://{self.address}/json/version').json()['webSocketDebuggerUrl']
|
||||||
self._browser_driver = ChromiumDriver(ws.split('/')[-1], 'browser', self.address)
|
self._browser_driver = ChromiumDriver(ws.split('/')[-1], 'browser', self.address)
|
||||||
self._browser_driver.start()
|
self._browser_driver.start()
|
||||||
|
|
||||||
|
self._alert = Alert()
|
||||||
self._tab_obj.Page.javascriptDialogOpening = self._on_alert_open
|
self._tab_obj.Page.javascriptDialogOpening = self._on_alert_open
|
||||||
self._tab_obj.Page.javascriptDialogClosed = self._on_alert_close
|
self._tab_obj.Page.javascriptDialogClosed = self._on_alert_close
|
||||||
|
|
||||||
|
self._rect = None
|
||||||
self._main_tab = self.tab_id
|
self._main_tab = self.tab_id
|
||||||
try:
|
try:
|
||||||
self.download_set.by_browser()
|
self.download_set.by_browser()
|
||||||
except RuntimeError:
|
except CallMethodError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
self._process_id = None
|
||||||
|
for i in self.browser_driver.SystemInfo.getProcessInfo()['processInfo']:
|
||||||
|
if i['type'] == 'browser':
|
||||||
|
self._process_id = i['id']
|
||||||
|
break
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def browser_driver(self):
|
def browser_driver(self):
|
||||||
"""返回用于控制浏览器cdp的driver"""
|
"""返回用于控制浏览器cdp的driver"""
|
||||||
@ -142,14 +141,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
@property
|
@property
|
||||||
def process_id(self):
|
def process_id(self):
|
||||||
"""返回浏览器进程id"""
|
"""返回浏览器进程id"""
|
||||||
if self.process:
|
return self._process_id
|
||||||
return self.process.pid
|
|
||||||
|
|
||||||
r = self.browser_driver.SystemInfo.getProcessInfo()['processInfo']
|
|
||||||
for i in r:
|
|
||||||
if i['type'] == 'browser':
|
|
||||||
return i['id']
|
|
||||||
return None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def set(self):
|
def set(self):
|
||||||
@ -734,7 +726,7 @@ def show_or_hide_browser(page, hide=True):
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
raise ImportError('请先安装:pip install pypiwin32')
|
raise ImportError('请先安装:pip install pypiwin32')
|
||||||
|
|
||||||
pid = page.process_id or get_browser_progress_id(page.process, page.address)
|
pid = page.process_id
|
||||||
if not pid:
|
if not pid:
|
||||||
return None
|
return None
|
||||||
hds = get_chrome_hwnds_from_pid(pid, page.title)
|
hds = get_chrome_hwnds_from_pid(pid, page.title)
|
||||||
|
@ -26,7 +26,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
tab_id: str = None,
|
tab_id: str = None,
|
||||||
timeout: float = None):
|
timeout: float = None):
|
||||||
self._driver_options: [ChromiumDriver, DriverOptions] = ...
|
self._driver_options: [ChromiumDriver, DriverOptions] = ...
|
||||||
self.process: popen = ...
|
self._process_id: str = ...
|
||||||
self._window_setter: WindowSetter = ...
|
self._window_setter: WindowSetter = ...
|
||||||
self._main_tab: str = ...
|
self._main_tab: str = ...
|
||||||
self._alert: Alert = ...
|
self._alert: Alert = ...
|
||||||
@ -41,7 +41,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
|
|
||||||
def _set_start_options(self, addr_driver_opts: Union[str, ChromiumDriver, DriverOptions], none) -> None: ...
|
def _set_start_options(self, addr_driver_opts: Union[str, ChromiumDriver, DriverOptions], none) -> None: ...
|
||||||
|
|
||||||
def _driver_init(self, tab_id: str) -> None: ...
|
def _page_init(self) -> None: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def browser_driver(self) -> ChromiumDriver: ...
|
def browser_driver(self) -> ChromiumDriver: ...
|
||||||
@ -218,7 +218,7 @@ def show_or_hide_browser(page: ChromiumPage, hide: bool = True) -> None: ...
|
|||||||
def get_browser_progress_id(progress: Union[popen, None], address: str) -> Union[str, None]: ...
|
def get_browser_progress_id(progress: Union[popen, None], address: str) -> Union[str, None]: ...
|
||||||
|
|
||||||
|
|
||||||
def get_chrome_hwnds_from_pid(pid: str, title: str) -> list: ...
|
def get_chrome_hwnds_from_pid(pid: Union[str, int], title: str) -> list: ...
|
||||||
|
|
||||||
|
|
||||||
class ChromiumPageSetter(ChromiumBaseSetter):
|
class ChromiumPageSetter(ChromiumBaseSetter):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user