From c886916dc09356e6e16ab509af9d203a0c20cb4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=88=E9=98=B3=E6=9C=88?= <2497732985@qq.com> Date: Mon, 25 Dec 2023 02:54:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feature:=20=E6=89=93=E5=BC=80=E7=BD=91?= =?UTF-8?q?=E9=A1=B5=E7=9A=84get=E7=8E=B0=E5=9C=A8=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E5=AD=97=E7=AC=A6=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?get()=E5=8D=B3=E5=8F=AF=E9=BB=98=E8=AE=A4=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E7=A9=BA=E9=A1=B5=E9=9D=A2=20\=20typo:=20=5Fbefore=5Fconnect?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=8E=B0=E5=91=BD=E5=90=8D=E4=B8=BA=5Fproces?= =?UTF-8?q?s=5Fconnection=EF=BC=8C=E5=A4=84=E7=90=86=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=EF=BC=8C=5Fbefore=5Fconnect=E6=96=B9=E6=B3=95=E5=90=8E?= =?UTF-8?q?=E7=BB=AD=E5=8F=AF=E8=83=BD=E6=9B=B4=E6=96=B0=E4=B8=BA=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E9=A1=B5=E9=9D=A2=E8=AE=BF=E9=97=AE=E5=89=8D=E7=9A=84?= =?UTF-8?q?=E5=86=85=E9=83=A8=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/_pages/chromium_base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DrissionPage/_pages/chromium_base.py b/DrissionPage/_pages/chromium_base.py index 12eb386..d9b8b61 100644 --- a/DrissionPage/_pages/chromium_base.py +++ b/DrissionPage/_pages/chromium_base.py @@ -496,7 +496,7 @@ class ChromiumBase(BasePage): Thread(target=run_js, args=(self, script, as_expr, self.timeouts.script if timeout is None else timeout, args)).start() - def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None): + def get(self, url='', show_errmsg=False, retry=None, interval=None, timeout=None): """访问url :param url: 目标url :param show_errmsg: 是否显示和抛出异常 @@ -505,7 +505,7 @@ class ChromiumBase(BasePage): :param timeout: 连接超时时间 :return: 目标url是否可用 """ - retry, interval = self._before_connect(url, retry, interval) + retry, interval = self._process_connection(url, retry, interval) self._url_available = self._d_connect(self._url, times=retry, interval=interval, show_errmsg=show_errmsg, timeout=timeout) return self._url_available @@ -924,7 +924,7 @@ class ChromiumBase(BasePage): pass return False - def _before_connect(self, url, retry, interval): + def _process_connection(self, url, retry, interval): """连接前的准备 :param url: 要访问的url :param retry: 重试次数 From 7512eb015768bfb53e8d53fd7edf6eb0e74502c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=88=E9=98=B3=E6=9C=88?= <2497732985@qq.com> Date: Mon, 25 Dec 2023 03:07:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?bugfix:=20run=5Fjs=E7=9A=84cdp=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E4=B8=BA=E6=AF=AB=E7=A7=92=EF=BC=8C=E4=BD=86=E6=98=AF?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E9=BB=98=E8=AE=A4=E7=94=A8=E7=A7=92=E4=B8=BA?= =?UTF-8?q?=E8=AE=A1=E6=97=B6=E5=8D=95=E4=BD=8D=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BA=86=E5=8D=95=E4=BD=8D=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BB=A3=E7=A0=81=E5=86=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/_elements/chromium_element.py | 7 +++-- DrissionPage/_pages/chromium_base.py | 30 +++++++++++----------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/DrissionPage/_elements/chromium_element.py b/DrissionPage/_elements/chromium_element.py index 63f0ff0..171d030 100644 --- a/DrissionPage/_elements/chromium_element.py +++ b/DrissionPage/_elements/chromium_element.py @@ -80,7 +80,7 @@ class ChromiumElement(DrissionElement): def __call__(self, loc_or_str, timeout=None): """在内部查找元素 :param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) :return: ChromiumElement对象或属性、文本 """ return self.ele(loc_or_str, timeout) @@ -1336,10 +1336,13 @@ def run_js(page_or_ele, script, as_expr=False, timeout=None, args=None): :param page_or_ele: 页面对象或元素对象 :param script: js文本 :param as_expr: 是否作为表达式运行,为True时args无效 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) :param args: 参数,按顺序在js文本中对应arguments[0]、arguments[1]... :return: js执行结果 """ + # 将timeout转换为毫秒 + if timeout is not None: + timeout *= 1000 if isinstance(page_or_ele, (ChromiumElement, ShadowRoot)): is_page = False page = page_or_ele.page diff --git a/DrissionPage/_pages/chromium_base.py b/DrissionPage/_pages/chromium_base.py index d9b8b61..b928874 100644 --- a/DrissionPage/_pages/chromium_base.py +++ b/DrissionPage/_pages/chromium_base.py @@ -38,7 +38,7 @@ class ChromiumBase(BasePage): """ :param address: 浏览器 ip:port :param tab_id: 要控制的标签页id,不指定默认为激活的 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) """ super().__init__() self._is_loading = None @@ -147,7 +147,7 @@ class ChromiumBase(BasePage): def _get_document(self, timeout=10): """获取页面文档 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) :return: 是否获取成功 """ if self._debug: @@ -282,7 +282,7 @@ class ChromiumBase(BasePage): """在内部查找元素 例:ele = page('@id=ele_id') :param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) :return: ChromiumElement对象 """ return self.ele(loc_or_str, timeout) @@ -468,7 +468,7 @@ class ChromiumBase(BasePage): :param script: js文本 :param args: 参数,按顺序在js文本中对应arguments[0]、arguments[1]... :param as_expr: 是否作为表达式运行,为True时args无效 - :param timeout: js超时时间,为None则使用页面timeouts.script设置 + :param timeout: js超时时间,为None则使用页面timeouts.script设置(秒) :return: 运行的结果 """ return run_js(self, script, as_expr, self.timeouts.script if timeout is None else timeout, args) @@ -478,7 +478,7 @@ class ChromiumBase(BasePage): :param script: js文本 :param args: 参数,按顺序在js文本中对应arguments[0]、arguments[1]... :param as_expr: 是否作为表达式运行,为True时args无效 - :param timeout: js超时时间,为None则使用页面timeouts.script设置 + :param timeout: js超时时间,为None则使用页面timeouts.script设置(秒) :return: 运行的结果 """ self.wait.load_complete() @@ -489,7 +489,7 @@ class ChromiumBase(BasePage): :param script: js文本 :param args: 参数,按顺序在js文本中对应arguments[0]、arguments[1]... :param as_expr: 是否作为表达式运行,为True时args无效 - :param timeout: js超时时间,为None则使用页面timeouts.script设置 + :param timeout: js超时时间,为None则使用页面timeouts.script设置(秒) :return: None """ from threading import Thread @@ -502,7 +502,7 @@ class ChromiumBase(BasePage): :param show_errmsg: 是否显示和抛出异常 :param retry: 重试次数 :param interval: 重试间隔(秒) - :param timeout: 连接超时时间 + :param timeout: 连接超时时间(秒) :return: 目标url是否可用 """ retry, interval = self._process_connection(url, retry, interval) @@ -531,7 +531,7 @@ class ChromiumBase(BasePage): def ele(self, loc_or_ele, timeout=None): """获取第一个符合条件的元素对象 :param loc_or_ele: 定位符或元素对象 - :param timeout: 查找超时时间 + :param timeout: 查找超时时间(秒) :return: ChromiumElement对象 """ return self._ele(loc_or_ele, timeout=timeout, method='ele()') @@ -539,7 +539,7 @@ class ChromiumBase(BasePage): def eles(self, loc_or_str, timeout=None): """获取所有符合条件的元素对象 :param loc_or_str: 定位符或元素对象 - :param timeout: 查找超时时间 + :param timeout: 查找超时时间(秒) :return: ChromiumElement对象组成的列表 """ return self._ele(loc_or_str, timeout=timeout, single=False) @@ -568,7 +568,7 @@ class ChromiumBase(BasePage): def _find_elements(self, loc_or_ele, timeout=None, single=True, relative=False, raise_err=None): """执行元素查找 :param loc_or_ele: 定位符或元素对象 - :param timeout: 查找超时时间 + :param timeout: 查找超时时间(秒) :param single: 是否只返回第一个 :param relative: WebPage用的表示是否相对定位的参数 :param raise_err: 找不到元素是是否抛出异常,为None时根据全局设置 @@ -712,7 +712,7 @@ class ChromiumBase(BasePage): def get_frame(self, loc_ind_ele, timeout=None): """获取页面中一个frame对象,可传入定位符、iframe序号、ChromiumFrame对象,序号从1开始 :param loc_ind_ele: 定位符、iframe序号、ChromiumFrame对象 - :param timeout: 查找元素超时时间 + :param timeout: 查找元素超时时间(秒) :return: ChromiumFrame对象 """ if isinstance(loc_ind_ele, str): @@ -752,7 +752,7 @@ class ChromiumBase(BasePage): def get_frames(self, loc=None, timeout=None): """获取所有符合条件的frame对象 :param loc: 定位符,为None时返回所有 - :param timeout: 查找超时时间 + :param timeout: 查找超时时间(秒) :return: ChromiumFrame对象组成的列表 """ loc = loc or 'xpath://*[name()="iframe" or name()="frame"]' @@ -849,7 +849,7 @@ class ChromiumBase(BasePage): """处理提示框,可以自动等待提示框出现 :param accept: True表示确认,False表示取消,其它值不会按按钮但依然返回文本值 :param send: 处理prompt提示框时可输入文本 - :param timeout: 等待提示框出现的超时时间,为None则使用self.timeout属性的值 + :param timeout: 等待提示框出现的超时时间,为None则使用self.timeout属性的值(秒) :param next_one: 是否处理下一个出现的提示框,为True时timeout参数无效 :return: 提示框内容文本,未等到提示框则返回False """ @@ -901,7 +901,7 @@ class ChromiumBase(BasePage): def _wait_loaded(self, timeout=None): """等待页面加载完成,超时触发停止加载 - :param timeout: 超时时间 + :param timeout: 超时时间(秒) :return: 是否成功,超时返回False """ if self._load_mode == 'none': @@ -948,7 +948,7 @@ class ChromiumBase(BasePage): :param times: 重试次数 :param interval: 重试间隔(秒) :param show_errmsg: 是否抛出异常 - :param timeout: 连接超时时间 + :param timeout: 连接超时时间(秒) :return: 是否成功,返回None表示不确定 """ err = None