From 5ff303130d403ac1754cf505a14baf4e712e1eaf Mon Sep 17 00:00:00 2001 From: g1879 Date: Wed, 6 Dec 2023 21:43:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Diframe=E5=86=85=E5=85=83?= =?UTF-8?q?=E7=B4=A0link=E5=8F=82=E6=95=B0=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/_commons/web.py | 10 +++++----- DrissionPage/_commons/web.pyi | 2 +- DrissionPage/_elements/chromium_element.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/DrissionPage/_commons/web.py b/DrissionPage/_commons/web.py index 2a726b3..a94bacf 100644 --- a/DrissionPage/_commons/web.py +++ b/DrissionPage/_commons/web.py @@ -128,10 +128,10 @@ def offset_scroll(ele, offset_x, offset_y): return cx, cy -def make_absolute_link(link, page=None): +def make_absolute_link(link, baseURI=None): """获取绝对url :param link: 超链接 - :param page: 页面对象 + :param baseURI: 页面或iframe的url :return: 绝对链接 """ if not link: @@ -142,11 +142,11 @@ def make_absolute_link(link, page=None): # 是相对路径,与页面url拼接并返回 if not parsed['netloc']: - return urljoin(page.url, link) if page else link + return urljoin(baseURI, link) if baseURI else link # 是绝对路径但缺少协议,从页面url获取协议并修复 - if not parsed['scheme'] and page: - parsed['scheme'] = urlparse(page.url).scheme + if not parsed['scheme'] and baseURI: + parsed['scheme'] = urlparse(baseURI).scheme parsed = tuple(v for v in parsed.values()) return urlunparse(parsed) diff --git a/DrissionPage/_commons/web.pyi b/DrissionPage/_commons/web.pyi index 7bf9a5f..128f48f 100644 --- a/DrissionPage/_commons/web.pyi +++ b/DrissionPage/_commons/web.pyi @@ -26,7 +26,7 @@ def location_in_viewport(page: ChromiumBase, loc_x: float, loc_y: float) -> bool def offset_scroll(ele: ChromiumElement, offset_x: float, offset_y: float) -> tuple: ... -def make_absolute_link(link: str, page: BasePage = None) -> str: ... +def make_absolute_link(link: str, baseURI: str = None) -> str: ... def is_js_func(func: str) -> bool: ... diff --git a/DrissionPage/_elements/chromium_element.py b/DrissionPage/_elements/chromium_element.py index f680009..4f9ff19 100644 --- a/DrissionPage/_elements/chromium_element.py +++ b/DrissionPage/_elements/chromium_element.py @@ -324,10 +324,10 @@ class ChromiumElement(DrissionElement): if not link or link.lower().startswith(('javascript:', 'mailto:')): return link else: - return make_absolute_link(link, self.page) + return make_absolute_link(link, self.prop('baseURI')) elif attr == 'src': - return make_absolute_link(attrs.get('src', None), self.page) + return make_absolute_link(attrs.get('src', None), self.prop('baseURI')) elif attr == 'text': return self.text