v0.5.3: Add manual browser path setting for Zendriver in Docker
This commit is contained in:
@@ -35,10 +35,15 @@ DAEMON_PORT: int = 19876
|
||||
browser: Optional[Any] = None
|
||||
browser_lock: Lock = Lock()
|
||||
loop: Optional[asyncio.AbstractEventLoop] = None
|
||||
manual_browser_path: Optional[str] = None
|
||||
|
||||
|
||||
def find_browser_executable() -> Optional[str]:
|
||||
"""시스템에서 브라우저 실행 파일 찾기 (Docker/Ubuntu 환경 대응)"""
|
||||
\"\"\"시스템에서 브라우저 실행 파일 찾기 (Docker/Ubuntu 환경 대응)\"\"\"
|
||||
# 수동 설정된 경로 최우선
|
||||
if manual_browser_path and os.path.exists(manual_browser_path):
|
||||
return manual_browser_path
|
||||
|
||||
common_paths: List[str] = [
|
||||
"/usr/bin/google-chrome",
|
||||
"/usr/bin/google-chrome-stable",
|
||||
@@ -277,7 +282,17 @@ def signal_handler(sig: int, frame: Any) -> None:
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if __name__ == \"__main__\":
|
||||
# 인자 처리
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(\"--browser_path\", type=str, default=None)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.browser_path:
|
||||
manual_browser_path = args.browser_path
|
||||
log_debug(f\"[ZendriverDaemon] Manual browser path set: {manual_browser_path}\")
|
||||
|
||||
# 시그널 핸들러 등록
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
@@ -14,8 +14,12 @@ import os
|
||||
import shutil
|
||||
|
||||
|
||||
def find_browser_executable():
|
||||
"""시스템에서 브라우저 실행 파일 찾기 (Docker/Ubuntu 환경 대응)"""
|
||||
def find_browser_executable(manual_path=None):
|
||||
\"\"\"시스템에서 브라우저 실행 파일 찾기 (Docker/Ubuntu 환경 대응)\"\"\"
|
||||
# 수동 설정 시 우선
|
||||
if manual_path and os.path.exists(manual_path):
|
||||
return manual_path
|
||||
|
||||
common_paths = [
|
||||
"/usr/bin/google-chrome",
|
||||
"/usr/bin/google-chrome-stable",
|
||||
@@ -38,8 +42,8 @@ def find_browser_executable():
|
||||
return None
|
||||
|
||||
|
||||
async def fetch_html(url: str, timeout: int = 60) -> dict:
|
||||
"""Zendriver로 HTML 페칭"""
|
||||
async def fetch_html(url: str, timeout: int = 60, browser_path: str = None) -> dict:
|
||||
\"\"\"Zendriver로 HTML 페칭\"\"\"
|
||||
try:
|
||||
import zendriver as zd
|
||||
except ImportError as e:
|
||||
@@ -51,7 +55,7 @@ async def fetch_html(url: str, timeout: int = 60) -> dict:
|
||||
|
||||
try:
|
||||
# 실행 가능한 브라우저 찾기
|
||||
exec_path = find_browser_executable()
|
||||
exec_path = find_browser_executable(browser_path)
|
||||
|
||||
# 브라우저 시작
|
||||
if exec_path:
|
||||
@@ -98,9 +102,10 @@ if __name__ == "__main__":
|
||||
|
||||
target_url = sys.argv[1]
|
||||
timeout_sec = int(sys.argv[2]) if len(sys.argv) > 2 else 60
|
||||
manual_path = sys.argv[3] if len(sys.argv) > 3 else None
|
||||
|
||||
try:
|
||||
res = asyncio.run(fetch_html(target_url, timeout_sec))
|
||||
res = asyncio.run(fetch_html(target_url, timeout_sec, manual_path))
|
||||
print(json.dumps(res, ensure_ascii=False))
|
||||
except Exception as e:
|
||||
print(json.dumps({"success": False, "error": str(e), "html": "", "elapsed": 0}))
|
||||
|
||||
Reference in New Issue
Block a user