mirror of
https://github.com/j93es/browser-use-oauth.git
synced 2026-06-04 06:11:53 +09:00
Merge pull request #6 from j93es/imnyang
LLM 레이트리밋 줄이기, .env.example에 있는 BACKEND_URL가 누락되었습니다.
This commit is contained in:
commit
f4796d8bbe
5 changed files with 10067 additions and 10039 deletions
|
|
@ -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
|
||||
|
|
@ -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
21321
domains.txt
File diff suppressed because it is too large
Load diff
19
main.py
19
main.py
|
|
@ -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
29
run.sh
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue