diff --git a/DrissionPage/chromium_base.py b/DrissionPage/chromium_base.py index 5969344..4ca59dc 100644 --- a/DrissionPage/chromium_base.py +++ b/DrissionPage/chromium_base.py @@ -283,7 +283,8 @@ class ChromiumBase(BasePage): @property def html(self): """返回当前页面html文本""" - return self.run_cdp_loaded('DOM.getOuterHTML', objectId=self._root_id)['outerHTML'] + self.wait.load_complete() + return self.run_cdp('DOM.getOuterHTML', objectId=self._root_id)['outerHTML'] @property def json(self): diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index 5be06be..cb547e5 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -194,22 +194,25 @@ class ChromiumPage(ChromiumBase): tab_id = tab_id or self.tab_id return ChromiumTab(self, tab_id) - def find_tabs(self, text=None, by_title=True, by_url=None, special=False): + def find_tabs(self, title=None, url=None, tab_type=None, single=True): """查找符合条件的tab,返回它们的id组成的列表 - :param text: 查询条件 - :param by_title: 是否匹配title - :param by_url: 是否匹配url - :param special: 是否匹配特殊tab,如打印页 - :return: tab id组成的列表 + :param title: 要匹配title的文本 + :param url: 要匹配url的文本 + :param tab_type: tab类型,可用列表输入多个 + :param single: 是否返回首个结果的id,为False返回所有信息 + :return: tab id或tab dict """ tabs = self._control_session.get(f'http://{self.address}/json').json() # 不要改用cdp - if text is None or not (by_title or by_url): - return [i['id'] for i in tabs if (not special and i['type'] == 'page') - or (special and i['type'] not in ('page', 'iframe'))] + if isinstance(tab_type, str): + tab_type = {tab_type} + elif isinstance(tab_type, (list, tuple, set)): + tab_type = set(tab_type) + elif tab_type is not None: + raise TypeError('tab_type只能是set、list、tuple、str、None。') - return [i['id'] for i in tabs if ((not special and i['type'] == 'page') - or (special and i['type'] not in ('page', 'iframe'))) - and ((by_url and text in i['url']) or (by_title and text in i['title']))] + r = [i for i in tabs if ((title is None or title in i['title']) and (url is None or url in i['url']) + and (tab_type is None or i['type'] in tab_type))] + return r[0]['id'] if r and single else r def new_tab(self, url=None, switch_to=True): """新建一个标签页,该标签页在最后面 diff --git a/DrissionPage/chromium_page.pyi b/DrissionPage/chromium_page.pyi index 7d0d3f1..c106dc8 100644 --- a/DrissionPage/chromium_page.pyi +++ b/DrissionPage/chromium_page.pyi @@ -82,8 +82,8 @@ class ChromiumPage(ChromiumBase): def get_tab(self, tab_id: str = None) -> ChromiumTab: ... - def find_tabs(self, text: str = None, by_title: bool = True, by_url: bool = None, - special: bool = False) -> List[str]: ... + def find_tabs(self, title: str = None, url: str = None, + tab_type: Union[str, list, tuple, set] = None, single: bool = True) -> Union[str, List[str]]: ... def new_tab(self, url: str = None, switch_to: bool = True) -> str: ...