Commit 7d43cb3b by baiquan

refactor(service): 优化登录页面加载和错误处理

- 增加重启浏览器的逻辑,提高登录成功率
- 调整页面加载模式为 eager,确保页面完全加载
- 增加错误处理,自动重试登录
- 优化滑块验证流程,增加重试次数
- 调整监听登录数据的超时时间
parent dcc40d80
......@@ -3,6 +3,7 @@ import time
from datetime import datetime, timedelta
from DrissionPage import Chromium
from DrissionPage._configs.chromium_options import ChromiumOptions
from DrissionPage._functions.by import By
from DrissionPage.errors import *
from loguru import logger
......@@ -27,7 +28,7 @@ def click_button(tab, loc):
if retry > 3:
raise Exception(f"点击按钮失败-->{loc}")
async def page_login(browser_id):
async def page_login(browser_id, restart=False):
open_count = 3
while True:
open_count -= 1
......@@ -37,8 +38,13 @@ async def page_login(browser_id):
if not data:
raise AppError("启动浏览器失败")
port = data.get('debuggingPort', '')
chromium = Chromium(f"127.0.0.1:{port}")
co = ChromiumOptions()
co.set_local_port(port)
co.no_imgs(True)
co.no_js(True)
chromium = Chromium(co)
tab = chromium.latest_tab
tab.set.load_mode.eager()
tab.get('https://fxg.jinritemai.com/login/common')
if chromium.states.is_existed and "https://fxg.jinritemai.com" in tab.url:
break
......@@ -101,6 +107,10 @@ async def page_login(browser_id):
logger.error(f"{browser_id}-->{e}")
except Exception as e:
logger.error(f"{browser_id}-->{e}")
if not restart:
await closeBrowser(browser_id)
time.sleep(3)
await page_login(browser_id, restart=True)
for _ in range(3):
if tab.title == "首页":
if not PHPSESSID:
......@@ -110,6 +120,8 @@ async def page_login(browser_id):
tab.close()
return PHPSESSID
tab.wait(3)
if not restart:
await page_login(browser_id, restart=True)
raise AppError("登录失败-->未获取到token")
def set_token(tab):
......@@ -144,7 +156,7 @@ def wait_login_callback(tab):
raise AppError("登录失败 --> 未获取到回调的cookie")
def listen_login(tab):
for packet in tab.listen.steps(timeout=10):
for packet in tab.listen.steps(timeout=15):
if 'account_login/v2/' in packet.url:
login_res = packet.response.body
logger.info(f'获取登录数据:{login_res}')
......@@ -187,7 +199,7 @@ def verify_captcha(tab):
if verify_count > 5:
raise AppError("滑块验证失败")
iframe = None
for _ in range(3):
for _ in range(10):
iframe = tab.get_frame('t:iframe')
if iframe:
break
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment