From f4e80fdd9230f1da5275d7cd8678167393f697a2 Mon Sep 17 00:00:00 2001 From: g1879 Date: Fri, 8 Jan 2021 10:55:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=5Ftry=5Fto=5Fconnect()?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/driver_page.py | 21 +++++++++++++-------- DrissionPage/session_page.py | 25 +++++++++++++++++++------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py index bb26380..f5832a6 100644 --- a/DrissionPage/driver_page.py +++ b/DrissionPage/driver_page.py @@ -100,26 +100,31 @@ class DriverPage(object): :param show_errmsg: 是否抛出异常 :return: 是否成功 """ + err = None - def goto() -> bool: + def go() -> bool: + nonlocal err try: self.driver.get(to_url) return True - except: + except Exception as e: + err = e return False - is_ok = self.check_page() if goto() else False + is_ok = False + + for _ in range(times + 1): + is_ok = self.check_page() if go() else False - for _ in range(times): if is_ok is not False: break - sleep(interval) - print(f'重试 {to_url}') - is_ok = self.check_page() if goto() else False + if _ < times: + sleep(interval) + print(f'重试 {to_url}') if is_ok is False and show_errmsg: - raise ConnectionError('Connect error.') + raise err if err is not None else ConnectionError('Connect error.') return is_ok diff --git a/DrissionPage/session_page.py b/DrissionPage/session_page.py index c8b83ea..bee8db4 100644 --- a/DrissionPage/session_page.py +++ b/DrissionPage/session_page.py @@ -197,15 +197,28 @@ class SessionPage(object): :param kwargs: 连接参数 :return: HTMLResponse对象 """ - r = self._make_response(to_url, mode=mode, show_errmsg=show_errmsg, **kwargs)[0] + err = None + r = None - for _ in range(times): - if (r and r.content != b'') or (r is not None and r.status_code in (403, 404)): + def go() -> Union[Response, None]: + nonlocal err + try: + return self._make_response(to_url, mode=mode, show_errmsg=True, **kwargs)[0] + except Exception as e: + err = e + return None + + for _ in range(times + 1): + r = go() + if r and (r.content != b'' or r.status_code in (403, 404)): break - print(f'重试 {to_url}') - sleep(interval) - r = self._make_response(to_url, mode=mode, show_errmsg=show_errmsg, **kwargs)[0] + if _ < times: + sleep(interval) + print(f'重试 {to_url}') + + if not r and show_errmsg: + raise err if err is not None else ConnectionError('Connect error.') return r