Merge pull request #6 from j93es/imnyang

LLM 레이트리밋 줄이기, .env.example에 있는 BACKEND_URL가 누락되었습니다.
This commit is contained in:
김민곤 2025-06-08 14:01:38 +09:00 committed by GitHub
commit f4796d8bbe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 10067 additions and 10039 deletions

View file

@ -8,3 +8,4 @@ GOOGLE_PLANNER_MODEL=gemini-2.5-flash-preview-05-20
# 선택
PROXY_HOST=127.0.0.1
PROXY_PORT=11080
BACKEND_URL=http://localhost:11081

View file

@ -3,9 +3,6 @@
- [ ] 일부 웹사이트는 사용자의 언어에 따라 OAuth 옵션을 바꾸기도 합니다.
- [ ] https://docs.browser-use.com/customize/custom-functions
https://f.imnya.ng/.whs/tp-domains/data/domains/latest.txt
이거 도메인 리스트 HTML만 필터링 해둔거니까 이거 쓰면 좋을 것 같습니다.
# 환경 설정
이 프로젝트는 [uv](https://docs.astral.sh/uv/getting-started/installation/)라는 Python 패키지 관리자를 사용하여 설정해야합니다.
@ -38,6 +35,9 @@ Environment는 .env.example에 따라 설정되어야합니다.
# 실행
```sh
# domains.txt 받기
curl "https://f.imnya.ng/.whs/tp-domains/data/domains/latest.txt" -o domains.txt
# ./run.sh {domains.txt 시작 줄} {domains.txt 끝 줄} {HTML 검사 Skip}
./run.sh 12540 13000 False
```

21321
domains.txt

File diff suppressed because it is too large Load diff

19
main.py
View file

@ -23,7 +23,7 @@ if os.getenv("GOOGLE_MODEL") is None:
if os.getenv("GOOGLE_PLANNER_MODEL") is None:
raise ValueError("GOOGLE_PLANNER_MODEL 환경변수가 설정되지 않았습니다.")
backend_url = os.getenv("BACKEND_URL", "http://localhost:4040")
backend_url = os.getenv("BACKEND_URL", "http://localhost:11081")
# 출력 모델
class OAuth(BaseModel):
@ -100,6 +100,13 @@ extend_planner_system_message = """
```json
[]
```
5. **중요 사항**
- **반드시** 위의 단계들을 순서대로 수행해야 하며, 단계에서 발생하는 예외 상황을 정확히 처리해야 합니다.
- **반복 행동** 감지되면 즉시 배열을 반환하고, **블록된 페이지** 초기 단계에서 처리하여 프로세스를 종료해야 합니다.
- **SSO 버튼이 발견되지 않거나, 오류가 발생한 경우에도 배열을 반환해야 합니다.**
- **반드시** JSON 형식으로 결과를 반환해야 하며, 다른 형식은 허용되지 않습니다.
- 최대한 효율적인 단계로 진행하며, 불필요한 반복이나 검색 엔진 사용을 피해야 합니다.
"""
# ── URL별로 Browser를 새로 띄우는 함수 ──
@ -142,19 +149,25 @@ async def scan_one_url(url: str, skip_html_check: bool = False):
)
# 3) Agent, Controller 생성
initial_actions = [
{'open_tab': {'url': url}}
]
controller = make_controller()
agent = Agent(
browser_context=context,
browser=browser,
task=f"Go to {url}, navigate to the login page, and collect the OAuth provider buttons and their login URLs. Ignore Passkey.",
initial_actions=initial_actions,
task=f"Navigate to the login page, and collect the OAuth provider buttons and their login URLs. Ignore Passkey.",
llm=ChatGoogleGenerativeAI(model=os.getenv("GOOGLE_MODEL")),
planner_llm=ChatGoogleGenerativeAI(model=os.getenv("GOOGLE_PLANNER_MODEL")),
controller=controller,
extend_planner_system_message=extend_planner_system_message,
retry_delay=60,
)
try:
# 4) 실제 스캔 실행
response = await agent.run()
final_result = response.final_result()

29
run.sh
View file

@ -1,49 +1,38 @@
#!/bin/bash
# ── 설정 부분 ──
# 실행할 Python 스크립트 이름 (파일 확장자까지)
PYTHON_SCRIPT="main.py"
# 도메인 목록 파일 경로 (Python 스크립트 실행 시 -f 옵션에 전달)
DOMAIN_FILE="./domains.txt"
# 몇 줄씩(chunk) 나눠서 실행할지
CHUNK_SIZE=10
# ─────────────
# https://f.imnya.ng/.whs/tp-domains/data/domains/latest.txt
# domains.txt 파일을 다운로드하는 명령어
curl "https://f.imnya.ng/.whs/tp-domains/data/domains/latest.txt" -o $DOMAIN_FILE
# 인자 개수 확인
if [ $# -ne 2 ]; then
echo "Usage: $0 <start_line> <end_line>"
echo "예시) $0 10000 11000"
if [ $# -lt 2 ]; then
echo "Usage: $0 <start_line> <end_line> [skh_option]"
echo "예시) $0 10000 11000 True"
exit 1
fi
START_LINE=$1
END_LINE=$2
SKH_OPTION=$3
if [ -z "$SKH_OPTION" ]; then
SKH_OPTION="False"
fi
# START_LINE부터 END_LINE까지 CHUNK_SIZE 만큼씩 반복
current=$START_LINE
while [ "$current" -le "$END_LINE" ]; do
# 각 청크 구간의 마지막 줄 계산
chunk_end=$(( current + CHUNK_SIZE - 1 ))
if [ "$chunk_end" -gt "$END_LINE" ]; then
chunk_end=$END_LINE
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Processing lines ${current} to ${chunk_end}..."
# Python 스크립트 실행
# -f DOMAIN_FILE: 도메인 목록 파일 경로
# -s current : 읽기 시작 줄
# -e chunk_end: 읽기 끝 줄
# -skh True False: 추가 옵션
uv run "$PYTHON_SCRIPT" -f "$DOMAIN_FILE" -s "$current" -e "$chunk_end" -skh $3
uv run "$PYTHON_SCRIPT" -f "$DOMAIN_FILE" -s "$current" -e "$chunk_end" -skh $SKH_OPTION
# 다음 청크의 시작 값 설정
current=$(( chunk_end + 1 ))
done