diff --git a/.env.example b/.env.example index 3166b8a..e161075 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,3 @@ -======= # 권장 (다른 모델로 교체 가능) [다른 모델로 교체시 성능 보장 불가] ANONYMIZED_TELEMETRY=false diff --git a/setup.py b/setup.py index f4989fb..654e176 100644 --- a/setup.py +++ b/setup.py @@ -27,9 +27,10 @@ def create_file_from_example(target: str, example: str) -> bool: def install_playwright_chrome(): - print("\n🛠️ Playwright의 Chrome을 설치 중입니다...") + print("\n🛠️ Playwright의 Chromium을 설치 중입니다...") + print("👉 이 작업은 시간이 걸릴 수 있습니다. 잠시 기다려주세요.") try: - subprocess.run(['uv', 'run', 'playwright', 'install', 'chrome'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + subprocess.run(['uv', 'run', 'playwright', 'install', 'chromium'], check=True) print("✅ Playwright Chrome 설치 완료.") except subprocess.CalledProcessError as e: if "already" in e.stdout.decode(): @@ -107,12 +108,13 @@ async def setup_user_data(): initial_actions=initial_actions, browser_profile=BrowserProfile( disable_security=True, - stealth=True, + #stealth=True, headless=False, device_scale_factor=1, window_size={"width": 1600, "height": 900}, viewport={"width": 1600, "height": 900}, user_data_dir="./data/user_data", + ignore_default_args=['--enable-automation'], ) ) @@ -168,8 +170,8 @@ if __name__ == "__main__": print("=====================================================") # 3. Windows 인코딩 문제 해결 - i_dont_like_windows() - print("=====================================================") + #i_dont_like_windows() + #print("=====================================================") # 4. Setup User Data asyncio.run(setup_user_data()) @@ -179,4 +181,3 @@ if __name__ == "__main__": # setup_sensitive() print("=====================================================") print("🎉 초기 설정이 완료되었습니다! 이제 스크립트를 실행할 준비가 되었습니다.") - print("🎉 초기 설정이 완료되었습니다! 이제 스크립트를 실행할 준비가 되었습니다.") diff --git a/src/lib/browser_use/init_profile.py b/src/lib/browser_use/init_profile.py index bfc38df..8f62638 100644 --- a/src/lib/browser_use/init_profile.py +++ b/src/lib/browser_use/init_profile.py @@ -14,7 +14,9 @@ async def GetProfile(headless=False): if USER_DATA_DIR and os.path.isdir(USER_DATA_DIR): try: tmp_user_data_dir = tempfile.mkdtemp() - shutil.copytree(USER_DATA_DIR, tmp_user_data_dir, dirs_exist_ok=True) + if os.path.exists(tmp_user_data_dir): + shutil.rmtree(tmp_user_data_dir) + shutil.copytree(USER_DATA_DIR, tmp_user_data_dir, dirs_exist_ok=False, ignore_dangling_symlinks=True) user_data_dir = tmp_user_data_dir print(f"✅ Copied user data dir to temporary location: {user_data_dir}") except Exception as e: @@ -23,12 +25,11 @@ async def GetProfile(headless=False): profile = BrowserProfile( # Security settings disable_security=True, - stealth=True, + #stealth=True, # Display settings headless=headless, device_scale_factor=1, window_size={"width": 1600, "height": 900}, - viewport={"width": 1600, "height": 900}, # Data persistence user_data_dir=user_data_dir, #storage_state=storage_state, @@ -36,6 +37,7 @@ async def GetProfile(headless=False): proxy={"server": proxy_url} if proxy_url else None, # Additional arguments args=get_browser_args(), + ignore_default_args=['--enable-automation'] ) return profile