fix(rpa_helpers): require positive evidence in _is_already_logged_in to avoid false success

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-11 16:44:46 +08:00
parent 769ccec601
commit dbf5604090
2 changed files with 75 additions and 20 deletions

View File

@@ -68,35 +68,37 @@ def _account_extra(account: dict) -> dict:
def _is_already_logged_in(page, account: dict) -> bool:
"""粗略判断是否已登录(可被 extra_json.logged_in_url_pattern 覆盖)"""
"""是否已登录:仅当 extra_json 提供正向证据URL 正则或可见 selector时为 True"""
try:
cur = page.url or ""
except Exception:
return False
cur_stripped = cur.strip()
if not cur_stripped:
return False
ul = cur_stripped.lower()
if ul == "about:blank" or ul.startswith("about:blank"):
return False
extra = _account_extra(account)
pattern = extra.get("logged_in_url_pattern")
if isinstance(pattern, str) and pattern:
if isinstance(pattern, str) and pattern.strip():
try:
return bool(re.search(pattern, cur))
if re.search(pattern, cur_stripped):
return True
except re.error:
pass
lc = cur.lower()
if any(k in lc for k in ("login", "signin", "sign-in", "auth", "/sso/")):
return False
try:
login_btn = page.locator(
"button:has-text('登录'), button:has-text('Sign in'), "
"a:has-text('登录'), a:has-text('Sign in')"
)
if login_btn.count() > 0:
try:
if login_btn.first.is_visible(timeout=500):
return False
except Exception:
pass
except Exception:
pass
return True
sel = extra.get("logged_in_selector")
if isinstance(sel, str) and sel.strip():
try:
if page.locator(sel.strip()).first.is_visible(timeout=500):
return True
except Exception:
pass
return False
def _current_machine_fingerprint() -> str: