mirror of
https://github.com/j93es/browser-use-oauth.git
synced 2026-06-04 06:31:51 +09:00
Merge branch 'main' of https://github.com/j93es/browser-use-oauth into tk
This commit is contained in:
commit
b26c47d1ad
5 changed files with 101 additions and 329 deletions
|
|
@ -14,7 +14,7 @@ from lib.utils import (
|
|||
logger,
|
||||
config,
|
||||
)
|
||||
from lib.llm import CreateChatGoogleGenerativeAI, get_prompt
|
||||
from lib.llm import CreateChatGoogle, get_prompt
|
||||
|
||||
# Exponential backoff settings
|
||||
INITIAL_BACKOFF = int(os.getenv("INITIAL_BACKOFF", "60")) # seconds
|
||||
|
|
@ -90,9 +90,9 @@ async def extract_oauth_list(url: str):
|
|||
"Just find and list all available OAuth providers with their button texts or provider names. "
|
||||
"Return a list of OAuth providers found on the login page."
|
||||
),
|
||||
"llm": CreateChatGoogleGenerativeAI(config.GOOGLE_MODEL),
|
||||
"llm": CreateChatGoogle(config.GOOGLE_MODEL),
|
||||
"planner_llm": (
|
||||
CreateChatGoogleGenerativeAI(config.GOOGLE_PLANNER_MODEL)
|
||||
CreateChatGoogle(config.GOOGLE_PLANNER_MODEL)
|
||||
if config.GOOGLE_PLANNER_MODEL
|
||||
else None
|
||||
),
|
||||
|
|
@ -116,7 +116,8 @@ async def extract_oauth_list(url: str):
|
|||
|
||||
try:
|
||||
data = json.loads(final_result)
|
||||
oauth_providers = data.get("oauth_providers", [])
|
||||
print(final_result)
|
||||
oauth_providers = data.get("sso_list", [])
|
||||
if not oauth_providers:
|
||||
print("❌ OAuth 제공자가 없습니다.")
|
||||
logger(f"❌ {url} - OAuth 제공자 없음: {final_result}")
|
||||
|
|
@ -149,9 +150,9 @@ async def test_oauth_login(url: str, oauth_provider: str):
|
|||
f"If login fails or encounters errors, report the issue. "
|
||||
f"Focus only on {oauth_provider} - ignore other OAuth providers."
|
||||
),
|
||||
"llm": CreateChatGoogleGenerativeAI(config.GOOGLE_MODEL),
|
||||
"llm": CreateChatGoogle(config.GOOGLE_MODEL),
|
||||
"planner_llm": (
|
||||
CreateChatGoogleGenerativeAI(config.GOOGLE_PLANNER_MODEL)
|
||||
CreateChatGoogle(config.GOOGLE_PLANNER_MODEL)
|
||||
if config.GOOGLE_PLANNER_MODEL and os.getenv("ENABLE_PLANNER_MODEL_OAUTH_LOGIN")
|
||||
else None
|
||||
),
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ async def scan_one_url(url: str, skip_html_check: bool = False):
|
|||
print(f"🔗 스캔 URL: {url}")
|
||||
print(f"🔐 발견된 OAuth 제공자들: {len(oauth_entries)}개")
|
||||
for entry in oauth_entries:
|
||||
print(f" - {entry.provider}")
|
||||
print(f" - {entry}")
|
||||
print("-" * 50)
|
||||
|
||||
# CSV에 OAuth 리스트 저장
|
||||
|
|
@ -41,12 +41,12 @@ async def scan_one_url(url: str, skip_html_check: bool = False):
|
|||
if not file_exists:
|
||||
writer.writerow(["issuer", "provider", "oauth_uri", "login_tested"])
|
||||
for entry in oauth_entries:
|
||||
writer.writerow([url, entry.provider, "", "pending"])
|
||||
writer.writerow([url, entry, "", "pending"])
|
||||
|
||||
# 2단계: 각 OAuth 제공자별로 개별 로그인 시도
|
||||
for i, oauth_entry in enumerate(oauth_entries):
|
||||
print(
|
||||
f"\n🔄 OAuth 로그인 테스트 {i+1}/{len(oauth_entries)}: {oauth_entry.provider}"
|
||||
f"\n🔄 OAuth 로그인 테스트 {i+1}/{len(oauth_entries)}: {oauth_entry}"
|
||||
)
|
||||
|
||||
# OAuth 간 대기 시간
|
||||
|
|
@ -55,11 +55,11 @@ async def scan_one_url(url: str, skip_html_check: bool = False):
|
|||
await asyncio.sleep(30)
|
||||
|
||||
# 개별 OAuth 로그인 시도
|
||||
success = await test_oauth_login(url, oauth_entry.provider)
|
||||
success = await test_oauth_login(url, oauth_entry)
|
||||
|
||||
# 결과를 CSV에 업데이트 (간단하게 로그만 남김)
|
||||
status = "success" if success else "failed"
|
||||
print(f"📝 {oauth_entry.provider} 로그인 결과: {status}")
|
||||
print(f"📝 {oauth_entry} 로그인 결과: {status}")
|
||||
|
||||
|
||||
async def main_loop(
|
||||
|
|
|
|||
|
|
@ -1,25 +1,18 @@
|
|||
from langchain.callbacks.base import BaseCallbackHandler
|
||||
from langchain_google_genai import ChatGoogleGenerativeAI
|
||||
from browser_use.llm import ChatGoogle
|
||||
from dotenv import load_dotenv
|
||||
|
||||
class QuotaExhaustedHandler(BaseCallbackHandler):
|
||||
def on_llm_error(self, error, **kwargs):
|
||||
if "ResourceExhausted" in str(error) or "429" in str(error):
|
||||
print("⚠️ API 쿼터가 소진되었습니다. 재시도 로직에 위임합니다...")
|
||||
# backoff handled in scan_one_url
|
||||
# 환경 변수 로드 (GOOGLE_API_KEY 필요)
|
||||
load_dotenv(override=True)
|
||||
|
||||
def CreateChatGoogleGenerativeAI(model: str):
|
||||
"""재시도 로직이 포함된 LLM 생성"""
|
||||
def CreateChatGoogle(model: str):
|
||||
"""Browser Use용 Google 모델 생성"""
|
||||
if model == "fallback":
|
||||
print("⚠️ Fallback 모델을 사용합니다. Envorinment 변수를 확인하세요.")
|
||||
print("⚠️ Model Gemini-2.0-flash-lite를 사용합니다.")
|
||||
print("⚠️ Fallback 모델을 사용합니다. Environment 변수를 확인하세요.")
|
||||
print("⚠️ Model gemini-2.0-flash-lite를 사용합니다.")
|
||||
model = "gemini-2.0-flash-lite"
|
||||
return ChatGoogleGenerativeAI(
|
||||
|
||||
return ChatGoogle(
|
||||
model=model,
|
||||
max_retries=10, # 최대 재시도 횟수 증가
|
||||
model_kwargs={
|
||||
"request_timeout": 120, # 타임아웃 시간 증가 (2분)
|
||||
},
|
||||
callbacks=[QuotaExhaustedHandler()],
|
||||
# API 호출 간격 조정
|
||||
temperature=0.0,
|
||||
)
|
||||
# Browser Use는 내부적으로 재시도 로직을 처리합니다
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue