diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index eaa7edab..cb25cb4d 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -801,6 +801,10 @@ class AutoSignIn(_PluginBase): return f"无法通过Cloudflare!" return f"仿真登录失败,Cookie已失效!" else: + # 判断是否已签到 + if re.search(r'已签|签到已得', page_source, re.IGNORECASE) \ + or SiteUtils.is_checkin(page_source): + return f"签到成功" return "仿真签到成功" else: res = RequestUtils(cookies=site_cookie, diff --git a/app/utils/site.py b/app/utils/site.py index 506e77e9..48666469 100644 --- a/app/utils/site.py +++ b/app/utils/site.py @@ -31,3 +31,32 @@ class SiteUtils: return True return False + + @classmethod + def is_checkin(cls, html_text: str) -> bool: + """ + 判断站点是否已经签到 + :return True已签到 False未签到 + """ + html = etree.HTML(html_text) + if not html: + return False + # 站点签到支持的识别XPATH + xpaths = [ + '//a[@id="signed"]', + '//a[contains(@href, "attendance")]', + '//a[contains(text(), "签到")]', + '//a/b[contains(text(), "签 到")]', + '//span[@id="sign_in"]/a', + '//a[contains(@href, "addbonus")]', + '//input[@class="dt_button"][contains(@value, "打卡")]', + '//a[contains(@href, "sign_in")]', + '//a[contains(@onclick, "do_signin")]', + '//a[@id="do-attendance"]', + '//shark-icon-button[@href="attendance.php"]' + ] + for xpath in xpaths: + if html.xpath(xpath): + return False + + return True