diff --git a/README.md b/README.md index 7f325c4..d8060bb 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ > 그렇지 않으면 실행되지 않습니다. > > 윈도우 환경에서는 `sudo certutil -addstore root mitmproxy-ca-cert.cer`로 인증합니다. -> +> > Sudo가 활성화되어있지 않은 환경에서는 관리자로 상향된 쉘에서 실행합니다. > > MacOS 환경에서는 `sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem`으로 인증합니다. @@ -48,7 +48,7 @@ venv와 패키지가 설치가 됩니다. 스텔스 기능 때문에 Google Chrome이 필요합니다. -만약 설치가 되어 있지 않다면 +만약 설치가 되어 있지 않다면 ``` playwright install chrome ``` @@ -76,7 +76,7 @@ uv run playwright open https://google.com/ --save-storage=./data/storage_state.j `.sensitive.example.json`을 `.sensitive.json`으로 복사해서 안에 있는 예시 내용을 참고해서 작성해주시면 됩니다. -더 자세한 내용은 +더 자세한 내용은 [Sensitive Data - Browser Use](https://docs.browser-use.com/customize/sensitive-data)를 참고하시면 좋을 것 같습니다. [Sensitive Data - Browser Use](https://docs.browser-use.com/customize/sensitive-data)에서도 권장하지 않는 방법인만큼 애매하긴 하지만 쿠키와 로컬 스토리지를 저장하기 어려운 경우나 일부 flow에서 접근이 어려운 경우 사용해주세요. @@ -114,6 +114,9 @@ fallback.py를 복사하여 ## 2. __init__.py 수정 +![](./docs/guide.png) + +Prompt에서 추가한 파일을 __init__.py에서 import합니다. ## 3. 파일 수정 diff --git a/docs/guide.png b/docs/guide.png new file mode 100644 index 0000000..0ddc9e7 Binary files /dev/null and b/docs/guide.png differ diff --git a/lib/llm/prompt/Google.py b/lib/llm/prompt/Google.py deleted file mode 100644 index d6954b3..0000000 --- a/lib/llm/prompt/Google.py +++ /dev/null @@ -1,108 +0,0 @@ -# Extended planner prompt -extend_planner_system_message = f""" -🎯 목적: 웹 자동화를 위한 **SSO 로그인 리디렉션 URL 수집** - -📌 주의사항 (전제 조건) -- ❌ **검색 엔진(Google, Bing 등) 사용 금지** -- ✅ **초기 제공된 URL 내에서만 탐색** -- ❌ 직접 이동하거나 추측한 링크 클릭 금지 -- ⛔ 추측한 URL은 대답하거나 클릭하지 마세요 -- OAuth가 아닌 일반 로그인은 무시 -- OAuth가 없다면 **즉시 중단**하고 빈 배열 반환 - ---- - -## 🧩 Step 0: 페이지 차단(Block) 여부 확인 - -초기 URL의 로그인 페이지에 접근하여 다음 사항을 점검합니다: - -- 🚫 페이지 차단됨 (Firewall, Access Denied 등) → 즉시 중단 -- 🔒 CAPTCHA는 통과 가능 (해결하고 계속 진행) -- ❗ 로그인 UI가 정상적으로 로드되지 않으면 중단 - -📤 차단 시 즉시 종료 - ---- - -## 🔍 Step 1: 로그인 페이지 탐색 - -* 초기 URL에 접속하여 **클라이언트용 로그인 페이지**로 진입합니다. -* 쿠키 동의, 개인정보 안내 등 팝업은 무시하거나 닫고 계속 진행하세요. -* 페이지가 정상 로드되었다고 가정합니다. - ---- - -## 👀 Step 2: SSO 로그인 버튼 식별 - -아래 **OAuth SSO 버튼들만** 유효합니다: - -* ✅ Google, GitHub, Facebook, LinkedIn, Microsoft, Naver - -**유효한 버튼 기준**: - -* OAuth 인증 흐름을 실제로 트리거 -* `window.location` 또는 `` 또는 JS로 redirect가 발생 - -**제외 버튼들 (클릭 금지)**: - -* ❌ 일반 로그인, 패스키, 이메일/전화번호, 인증서 기반, 비밀번호 입력 - ---- - -## ✅ Step 3: 모든 SSO 버튼 클릭 및 로그인 시도 - -> 각 SSO 로그인 버튼을 클릭한 뒤 반드시 아래 절차를 **완전히 수행**해야 합니다. - -각 SSO 버튼에 대해 다음을 수행: - -1. 버튼 클릭 -2. ✅ 로그인 진행: - - 로그인 페이지에서 OAuth 인증을 완료합니다. - - sign in with your username(email) x_username and password is x_password - - 버튼같은게 안눌리면 새로고침을 해봐 - - **로그인 완료 후 authorize 등 버튼이 있으면 클릭** - - GitHub같은 경우 Authorize 버튼이 뜨는데 오래걸릴 수 있음, 기다려야 할 수도 있음 - - 만약 버튼을 눌러도 반응이 없을 경우 새로고침을 한번 해주세요. - - **OAuth Flow가 완료되면 (callback URL 도달 또는 인증 완료) 즉시 작업 종료** -4. 로그인이 성공하면 모두 쿠키를 삭제하고 다음 SSO 버튼을 클릭합니다. -5. 다음 SSO 버튼으로 반복 진행 - -쿠키 삭제 방법: -chrome://settings/clearBrowserData에 들어가서 삭제해주세요. - -🛑 절대 아래와 같이 해석하지 말 것: -- ❌ 버튼 클릭 후 페이지 로딩만 기다리고 돌아가기 -- ❌ URL 저장 없이 go_back() 호출 - ---- - -### ✨ 추가 안전 장치: "뒤로가기(go_back) 호출 조건" 제한 - -```text -🛑 뒤로가기(go_back)은 다음 조건이 모두 충족될 때만 사용 => 다만 로그인 실패 시, 뒤로가기 수행: -- ✅ 로그인 흐름이 완료됨 (예: redirect back to app, or callback URL) -- ✅ 현재 리디렉션 URL이 수집됨 -- ✅ 결과에 저장 후 다음 버튼 탐색을 위해 복귀 필요할 때 -``` - ---- - -## 🚫 Step 4: 버튼 없음 또는 예외 발생 시 - -* 유효한 SSO 버튼이 **전혀 없을 경우** -* 예외, 오류 등 발생 시 - --> 즉시 중단 - ---- - -## 📎 중요 규칙 요약 - -* ✅ **모든 SSO 로그인은 반드시 실행** (가능한 버튼은 모두 클릭) -* 🔁 단계는 반드시 순서대로 진행 -* 🔐 로그인은 쿠키/세션으로 유지된 상태에서 수행 -* 👀 직접 OAuth Providor ID/PW를 입력하여도 됨 가지고 있다면 -* ⛔ 추측한 URL은 접속하지 않음 - ---- -""" diff --git a/lib/llm/prompt/Meta.py b/lib/llm/prompt/Meta.py deleted file mode 100644 index d6954b3..0000000 --- a/lib/llm/prompt/Meta.py +++ /dev/null @@ -1,108 +0,0 @@ -# Extended planner prompt -extend_planner_system_message = f""" -🎯 목적: 웹 자동화를 위한 **SSO 로그인 리디렉션 URL 수집** - -📌 주의사항 (전제 조건) -- ❌ **검색 엔진(Google, Bing 등) 사용 금지** -- ✅ **초기 제공된 URL 내에서만 탐색** -- ❌ 직접 이동하거나 추측한 링크 클릭 금지 -- ⛔ 추측한 URL은 대답하거나 클릭하지 마세요 -- OAuth가 아닌 일반 로그인은 무시 -- OAuth가 없다면 **즉시 중단**하고 빈 배열 반환 - ---- - -## 🧩 Step 0: 페이지 차단(Block) 여부 확인 - -초기 URL의 로그인 페이지에 접근하여 다음 사항을 점검합니다: - -- 🚫 페이지 차단됨 (Firewall, Access Denied 등) → 즉시 중단 -- 🔒 CAPTCHA는 통과 가능 (해결하고 계속 진행) -- ❗ 로그인 UI가 정상적으로 로드되지 않으면 중단 - -📤 차단 시 즉시 종료 - ---- - -## 🔍 Step 1: 로그인 페이지 탐색 - -* 초기 URL에 접속하여 **클라이언트용 로그인 페이지**로 진입합니다. -* 쿠키 동의, 개인정보 안내 등 팝업은 무시하거나 닫고 계속 진행하세요. -* 페이지가 정상 로드되었다고 가정합니다. - ---- - -## 👀 Step 2: SSO 로그인 버튼 식별 - -아래 **OAuth SSO 버튼들만** 유효합니다: - -* ✅ Google, GitHub, Facebook, LinkedIn, Microsoft, Naver - -**유효한 버튼 기준**: - -* OAuth 인증 흐름을 실제로 트리거 -* `window.location` 또는 `` 또는 JS로 redirect가 발생 - -**제외 버튼들 (클릭 금지)**: - -* ❌ 일반 로그인, 패스키, 이메일/전화번호, 인증서 기반, 비밀번호 입력 - ---- - -## ✅ Step 3: 모든 SSO 버튼 클릭 및 로그인 시도 - -> 각 SSO 로그인 버튼을 클릭한 뒤 반드시 아래 절차를 **완전히 수행**해야 합니다. - -각 SSO 버튼에 대해 다음을 수행: - -1. 버튼 클릭 -2. ✅ 로그인 진행: - - 로그인 페이지에서 OAuth 인증을 완료합니다. - - sign in with your username(email) x_username and password is x_password - - 버튼같은게 안눌리면 새로고침을 해봐 - - **로그인 완료 후 authorize 등 버튼이 있으면 클릭** - - GitHub같은 경우 Authorize 버튼이 뜨는데 오래걸릴 수 있음, 기다려야 할 수도 있음 - - 만약 버튼을 눌러도 반응이 없을 경우 새로고침을 한번 해주세요. - - **OAuth Flow가 완료되면 (callback URL 도달 또는 인증 완료) 즉시 작업 종료** -4. 로그인이 성공하면 모두 쿠키를 삭제하고 다음 SSO 버튼을 클릭합니다. -5. 다음 SSO 버튼으로 반복 진행 - -쿠키 삭제 방법: -chrome://settings/clearBrowserData에 들어가서 삭제해주세요. - -🛑 절대 아래와 같이 해석하지 말 것: -- ❌ 버튼 클릭 후 페이지 로딩만 기다리고 돌아가기 -- ❌ URL 저장 없이 go_back() 호출 - ---- - -### ✨ 추가 안전 장치: "뒤로가기(go_back) 호출 조건" 제한 - -```text -🛑 뒤로가기(go_back)은 다음 조건이 모두 충족될 때만 사용 => 다만 로그인 실패 시, 뒤로가기 수행: -- ✅ 로그인 흐름이 완료됨 (예: redirect back to app, or callback URL) -- ✅ 현재 리디렉션 URL이 수집됨 -- ✅ 결과에 저장 후 다음 버튼 탐색을 위해 복귀 필요할 때 -``` - ---- - -## 🚫 Step 4: 버튼 없음 또는 예외 발생 시 - -* 유효한 SSO 버튼이 **전혀 없을 경우** -* 예외, 오류 등 발생 시 - --> 즉시 중단 - ---- - -## 📎 중요 규칙 요약 - -* ✅ **모든 SSO 로그인은 반드시 실행** (가능한 버튼은 모두 클릭) -* 🔁 단계는 반드시 순서대로 진행 -* 🔐 로그인은 쿠키/세션으로 유지된 상태에서 수행 -* 👀 직접 OAuth Providor ID/PW를 입력하여도 됨 가지고 있다면 -* ⛔ 추측한 URL은 접속하지 않음 - ---- -""" diff --git a/lib/llm/prompt/__init__.py b/lib/llm/prompt/__init__.py index 4aa1c47..9d5b8e8 100644 --- a/lib/llm/prompt/__init__.py +++ b/lib/llm/prompt/__init__.py @@ -12,16 +12,14 @@ def get_prompt(type:str) -> str: if type.lower() == "auth": from lib.llm.prompt.auth_list import extract_oauth_list_prompt return extract_oauth_list_prompt - + elif type.lower() == "google": from lib.llm.prompt.Google import extend_planner_system_message return extend_planner_system_message elif type.lower() == "meta" and type.lower() == "facebook": from lib.llm.prompt.Meta import extend_planner_system_message return extend_planner_system_message - + else: from lib.llm.prompt.fallback import extend_planner_system_message return extend_planner_system_message - - \ No newline at end of file