fix m-team autosignin

This commit is contained in:
jxxghp
2024-03-28 13:39:21 +08:00
parent af2112b1bf
commit 65b02ef967
2 changed files with 93 additions and 12 deletions

View File

@@ -2,7 +2,7 @@
"AutoSignIn": {
"name": "站点自动签到",
"description": "自动模拟登录站点、签到。",
"version": "1.8",
"version": "1.9",
"icon": "signin.png",
"author": "thsrite",
"level": 2

View File

@@ -37,7 +37,7 @@ class AutoSignIn(_PluginBase):
# 插件图标
plugin_icon = "signin.png"
# 插件版本
plugin_version = "1.8"
plugin_version = "1.9"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -74,6 +74,14 @@ class AutoSignIn(_PluginBase):
_end_time: int = None
_auto_cf: int = 0
def __init__(self):
super().__init__()
# 特殊模拟登录站点
self._special_login_sites = {
"m-team.io": self.__mteam_login,
"m-team.cc": self.__mteam_login,
}
def init_plugin(self, config: dict = None):
self.sites = SitesHelper()
self.siteoper = SiteOper()
@@ -631,7 +639,7 @@ class AutoSignIn(_PluginBase):
@eventmanager.register(EventType.PluginAction)
def sign_in(self, event: Event = None):
"""
自动签到|模拟登
自动签到|模拟登
"""
if event:
event_data = event.event_data
@@ -866,7 +874,7 @@ class AutoSignIn(_PluginBase):
if site_module and hasattr(site_module, "signin"):
try:
_, msg = site_module().signin(site_info)
# 特殊站点直接返回签到信息,防止仿真签到、模拟登有歧义
# 特殊站点直接返回签到信息,防止仿真签到、模拟登有歧义
return site_info.get("name"), msg or ""
except Exception as e:
traceback.print_exc()
@@ -954,23 +962,96 @@ class AutoSignIn(_PluginBase):
def login_site(self, site_info: CommentedMap) -> Tuple[str, str]:
"""
模拟登一个站点
模拟登一个站点
"""
domain = StringUtils.get_url_domain(site_info.get("url"))
if domain in self._special_login_sites:
return site_info.get("name"), self._special_login_sites[domain](site_info)
return site_info.get("name"), self.__login_base(site_info)
def __login_base(self, site_info: CommentedMap) -> str:
@staticmethod
def __mteam_login(site: CommentedMap) -> str:
"""
模拟登陆通用处理
mteam登录
"""
# 更新最后访问时间
res = RequestUtils(cookies=site.get("cookie"),
ua=site.get("ua"),
timeout=60,
proxies=settings.PROXY if site.get("proxy") else None,
referer=f"{site.get('url')}index"
).post_res(url=urljoin(site.get('url'), "api/member/updateLastBrowse"))
if res:
return "模拟登录成功"
elif res is not None:
return f"模拟登录失败,状态码:{res.status_code}"
else:
return "模拟登录失败,无法打开网站"
@staticmethod
def __login_base(site_info: CommentedMap) -> str:
"""
模拟登录通用处理
:param site_info: 站点信息
:return: 签到结果信息
"""
if not site_info:
return ""
state, msg = self.sitechain.test(site_info)
if state:
return f"模拟登陆成功"
else:
return f"模拟登陆失败:{msg}"
site = site_info.get("name")
site_url = site_info.get("url")
site_cookie = site_info.get("cookie")
ua = site_info.get("ua")
render = site_info.get("render")
proxies = settings.PROXY if site_info.get("proxy") else None
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
if not site_url or not site_cookie:
logger.warn(f"未配置 {site} 的站点地址或Cookie无法签到")
return ""
# 模拟登录
try:
# 访问链接
site_url = str(site_url).replace("attendance.php", "")
logger.info(f"开始站点模拟登录:{site},地址:{site_url}...")
if render:
page_source = PlaywrightHelper().get_page_source(url=site_url,
cookies=site_cookie,
ua=ua,
proxies=proxy_server)
if not SiteUtils.is_logged_in(page_source):
if under_challenge(page_source):
return f"无法通过Cloudflare"
return f"仿真登录失败Cookie已失效"
else:
return "模拟登录成功"
else:
res = RequestUtils(cookies=site_cookie,
ua=ua,
proxies=proxies
).get_res(url=site_url)
# 判断登录状态
if res and res.status_code in [200, 500, 403]:
if not SiteUtils.is_logged_in(res.text):
if under_challenge(res.text):
msg = "站点被Cloudflare防护请打开站点浏览器仿真"
elif res.status_code == 200:
msg = "Cookie已失效"
else:
msg = f"状态码:{res.status_code}"
logger.warn(f"{site} 模拟登录失败,{msg}")
return f"模拟登录失败,{msg}"
else:
logger.info(f"{site} 模拟登录成功")
return f"模拟登录成功"
elif res is not None:
logger.warn(f"{site} 模拟登录失败,状态码:{res.status_code}")
return f"模拟登录失败,状态码:{res.status_code}"
else:
logger.warn(f"{site} 模拟登录失败,无法打开网站")
return f"模拟登录失败,无法打开网站!"
except Exception as e:
logger.warn("%s 模拟登录失败:%s" % (site, str(e)))
traceback.print_exc()
return f"模拟登录失败:{str(e)}"
def stop_service(self):
"""