import asyncio from browser_use import Agent, BrowserSession from patchright.async_api import async_playwright as async_patchright from lib.agents.find_login_page import find_login_page from lib.browser_use_utils.clean_resources import clean_session_resources from lib.browser_use_utils.get_profile import get_profile from lib.utils.save_oauth_providers import save_oauth_providers async def find_sso_list(target_url): session = BrowserSession( playwright=(await async_patchright().start()), browser_profile=await get_profile(), ) FIND_LOGIN_PAGE = 1 FIND_SSO_LIST = 2 SAVE_DATA = 3 WHEN_ERROR = -1 FINISH = 0 final_result = None login_url = target_url state = FIND_LOGIN_PAGE while True: if state == FIND_LOGIN_PAGE: is_success, resp = await find_login_page( target_url=target_url, session=session, ) if not is_success: print(f"⚠️ 로그인 페이지 탐지 실패: {target_url} | {resp}") state = WHEN_ERROR login_url = resp if resp else target_url state = FIND_SSO_LIST if state == FIND_SSO_LIST: print(f"🔎 SSO 목록 찾는 중: {target_url}") is_success, resp = await find_sso_list( target_url=login_url, session=session, ) if not is_success: print(f"⚠️ SSO 목록 탐지 실패: {target_url} | {resp}") state = WHEN_ERROR final_result = "" state = SAVE_DATA if state == SAVE_DATA: print(f"💾 데이터 저장 중: {target_url}") if not final_result: print(f"⚠️ SSO 목록이 전달되지 않았습니다: {target_url}") state = WHEN_ERROR save_oauth_providers(target_url, final_result) state = FINISH if state == WHEN_ERROR: print(f"⚠️ 에러 발생: {target_url} | 스캔을 중단합니다.") return if state == FINISH: print(f"✅ 스캔 완료: {target_url}") break await clean_session_resources(session)