update
This commit is contained in:
+121
-10
@@ -129,6 +129,99 @@ class BrowserLogin:
|
||||
logger.error(f"检查登录状态失败: {e}")
|
||||
return False
|
||||
|
||||
def import_all_cookies(self, cookies: List[Dict]) -> bool:
|
||||
"""
|
||||
一次性导入所有 cookies 到浏览器
|
||||
|
||||
Args:
|
||||
cookies: cookie 列表
|
||||
|
||||
Returns:
|
||||
是否成功
|
||||
"""
|
||||
if not self.browser or not self.tab:
|
||||
self._create_browser()
|
||||
|
||||
success_count = 0
|
||||
fail_count = 0
|
||||
|
||||
logger.info(f"开始导入 {len(cookies)} 个 cookie")
|
||||
for cookie in cookies:
|
||||
try:
|
||||
cookie_dict = {
|
||||
'name': cookie.get('name', ''),
|
||||
'value': cookie.get('value', ''),
|
||||
'domain': cookie.get('domain', ''),
|
||||
'path': cookie.get('path', '/'),
|
||||
}
|
||||
if cookie.get('secure'):
|
||||
cookie_dict['secure'] = True
|
||||
if cookie.get('httpOnly'):
|
||||
cookie_dict['httpOnly'] = True
|
||||
if cookie.get('sameSite'):
|
||||
cookie_dict['sameSite'] = cookie.get('sameSite')
|
||||
|
||||
self.tab.set.cookies(cookie_dict)
|
||||
success_count += 1
|
||||
except Exception as e:
|
||||
fail_count += 1
|
||||
|
||||
logger.info(f"Cookie 导入完成: 成功 {success_count}, 失败 {fail_count}")
|
||||
return fail_count == 0
|
||||
|
||||
def verify_login(self, url: str, check_selector: str = "", success_text: str = "") -> bool:
|
||||
"""
|
||||
验证登录状态(cookies已预先导入)
|
||||
|
||||
Args:
|
||||
url: 网站地址
|
||||
check_selector: 登录检测选择器(可选)
|
||||
success_text: 登录成功时显示的文本(可选)
|
||||
|
||||
Returns:
|
||||
是否已登录
|
||||
"""
|
||||
if not self.browser or not self.tab:
|
||||
self._create_browser()
|
||||
|
||||
try:
|
||||
self.tab.get(url)
|
||||
time.sleep(5)
|
||||
|
||||
# 如果没有指定选择器,只检查页面是否成功加载
|
||||
if not check_selector:
|
||||
logger.info(" 未指定登录检测选择器,跳过登录验证")
|
||||
return True
|
||||
|
||||
# 尝试查找元素
|
||||
try:
|
||||
element = self.tab.ele(check_selector, timeout=10)
|
||||
|
||||
if element:
|
||||
element_text = element.text or ""
|
||||
logger.info(f" 找到元素,文本内容: {element_text[:50]}...")
|
||||
|
||||
if not success_text:
|
||||
logger.info(" 未指定成功文本,找到元素即认为登录成功")
|
||||
return True
|
||||
|
||||
if success_text in element_text:
|
||||
logger.info(f" 检测到成功文本: {success_text}")
|
||||
return True
|
||||
else:
|
||||
logger.warning(f" 未检测到成功文本 '{success_text}',元素文本: {element_text[:100]}")
|
||||
return False
|
||||
else:
|
||||
logger.warning(f" 未找到元素: {check_selector}")
|
||||
return False
|
||||
except Exception as ele_error:
|
||||
logger.warning(f" 查找元素失败: {ele_error}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"验证登录状态失败: {e}")
|
||||
return False
|
||||
|
||||
def login_with_cookies(
|
||||
self,
|
||||
url: str,
|
||||
@@ -152,20 +245,38 @@ class BrowserLogin:
|
||||
self._create_browser()
|
||||
|
||||
try:
|
||||
# 访问网站
|
||||
from urllib.parse import urlparse
|
||||
parsed = urlparse(url)
|
||||
base_url = f"{parsed.scheme}://{parsed.netloc}"
|
||||
|
||||
self.tab.get(base_url)
|
||||
time.sleep(1)
|
||||
|
||||
logger.info(f"开始设置 {len(cookies)} 个 cookie")
|
||||
for cookie in cookies:
|
||||
try:
|
||||
cookie_dict = {
|
||||
'name': cookie.get('name', ''),
|
||||
'value': cookie.get('value', ''),
|
||||
'domain': cookie.get('domain', parsed.netloc),
|
||||
'path': cookie.get('path', '/'),
|
||||
}
|
||||
if cookie.get('secure'):
|
||||
cookie_dict['secure'] = True
|
||||
if cookie.get('httpOnly'):
|
||||
cookie_dict['httpOnly'] = True
|
||||
if cookie.get('sameSite'):
|
||||
cookie_dict['sameSite'] = cookie.get('sameSite')
|
||||
|
||||
self.tab.set.cookies(cookie_dict)
|
||||
logger.info(f"设置 cookie: {cookie_dict['name']}")
|
||||
except Exception as e:
|
||||
logger.error(f"设置 cookie 失败 {cookie.get('name')}: {e}")
|
||||
|
||||
self.tab.get(url)
|
||||
|
||||
# 添加 cookies
|
||||
for cookie in cookies:
|
||||
self.tab.set.cookies(cookie)
|
||||
|
||||
# 刷新页面
|
||||
self.tab.refresh()
|
||||
|
||||
# 等待页面加载
|
||||
time.sleep(3)
|
||||
|
||||
# 检查登录状态
|
||||
element = self.tab.ele(check_selector, timeout=10)
|
||||
|
||||
if element and element.text and success_text in element.text:
|
||||
|
||||
Reference in New Issue
Block a user