from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager
Options: Chrome 브라우저의 설정을 정의하는 객체로, 브라우저 동작을 커스터마이징할 수 있습니다.
Service: ChromeDriver 실행 서비스를 관리하는 객체로, 브라우저 드라이버의 경로와 설정을 정의합니다.
ChromeDriverManager: WebDriver Manager의 Chrome 드라이버 관리 기능으로, 올바른 드라이버를 다운로드하고 설정합니다.webdriver_options = Options() webdriver_options.add_argument("--headless")
webdriver_options = Options()
Chrome 옵션 객체를 생성합니다.
Options 클래스란?
Selenium에서 Chrome 브라우저를 제어할 때 다양한 설정을 적용할 수 있는 클래스입니다.
기본적으로 브라우저 실행에 필요한 옵션을 지정하거나 커스터마이징할 수 있습니다.
주요 사용 예시:
브라우저 창 크기 변경: 창 크기를 미리 설정합니다.
프록시 설정: 특정 네트워크 경로를 통해 트래픽을 우회합니다.
사용자 에이전트 변경: 웹 브라우저를 다른 디바이스(예: 모바일)처럼 보이도록 합니다.
add_argument("--headless")
add_argument의 역할:
브라우저 실행 시 추가적인 명령줄 인자를 전달합니다.
예를 들어, 브라우저 창을 숨기거나 개발 도구를 비활성화할 수 있습니다.
--headless란?
Chrome 브라우저를 헤드리스 모드로 실행합니다.
즉, 브라우저 UI 없이 백그라운드에서 실행하는 옵션입니다.
주로 서버 환경에서 사용되며, 성능과 효율성이 향상됩니다.
서버 환경(예: CI/CD)에서 브라우저 UI가 필요 없는 작업을 처리할 때 사용합니다.
UI 렌더링을 생략하므로 메모리 사용량이 줄고 실행 속도가 빨라질 수 있습니다.
다른 주요 옵션들:
--disable-gpu:
GPU 가속을 비활성화합니다. 헤드리스 모드에서 종종 함께 사용됩니다.
--start-maximized:
브라우저를 최대화된 창으로 실행합니다.
--incognito:
브라우저를 시크릿 모드로 실행합니다.
--no-sandbox:
샌드박스 보안 모드를 비활성화합니다(일부 제한된 환경에서 필요).
--disable-extensions:
브라우저 확장 프로그램을 비활성화합니다.driver_service = Service(ChromeDriverManager().install())
ChromeDriverManager().install()
ChromeDriverManager란?
WebDriver Manager 라이브러리의 클래스입니다.
브라우저 버전에 맞는 ChromeDriver를 자동으로 다운로드합니다.
Service()
Selenium이 ChromeDriver를 실행할 수 있도록 서비스 객체를 생성합니다.
print("주어진 번호나(예: 1, 2, 3...), 정확한 카테고리의 이름을 선택해 주세요!") selected_input = input("선택: ").strip() options = [line.split('. ', 1)[-1].strip() for line in filtered_name.split('\n') if '.' in line] if selected_input.isdigit(): tags_num = int(selected_input) - 1 if 0 <= tags_num < len(options): food_name = options[tags_num] print(food_name) else: print("정확한 번호를 선택해 주세요!") continue elif selected_input in options: food_name = selected_input print(food_name) else: print("정확한 이름을 선택해 주세요!") continue
필요한 정보들만.
.strip():
입력값 앞뒤의 불필요한 공백을 제거합니다.
예: " Pizza " → "Pizza"options = [line.split('. ', 1)[-1].strip() for line in filtered_name.split('\n') if '.' in line]
filtered_name에 저장된 여러 줄의 문자열 데이터를 파싱하여, 특정 형식(예: "1. Pizza")에서 숫자와 구분자(. )를 제거하고, 옵션 이름만 추출한 리스트를 생성하는 것입니다.
예시:1. Pizza 2. Pasta 3. Salad
Step 1: filtered_name.split('\n')
split('\n')은 문자열을 줄 단위로 나눕니다.입력: filtered_name = "1. Pizza\n2. Pasta\n3. Salad" 출력: ["1. Pizza", "2. Pasta", "3. Salad"]
Step 2: for line in filtered_name.split('\n')
리스트 ["1. Pizza", "2. Pasta", "3. Salad"]에서 각 줄(요소)을 순회합니다.첫 번째 순회: line = "1. Pizza" 두 번째 순회: line = "2. Pasta"
Step 3: if '.' in line
현재 줄에 .이 포함되어 있는지 확인합니다.
조건이 참인 경우에만 이후 처리를 진행합니다.
의도:
숫자와 구분자가 포함되지 않은 줄(예: 공백 줄)을 제외합니다."1. Pizza" -> True # 포함됨 "Pizza Only" -> False # 제외됨
Step 4: line.split('. ', 1)
split('. ', 1)은 문자열을 . 를 기준으로 최대 1번 분리합니다.
결과:
. 앞부분: 숫자(예: "1").
. 뒷부분: 옵션 이름(예: "Pizza").line = "1. Pizza" line.split('. ', 1) # 결과: ['1', 'Pizza']
Step 5: [-1]
[-1]은 split 결과 리스트의 마지막 요소를 선택합니다.
이는 . 뒷부분의 옵션 이름만 가져옵니다.
예시:line = "1. Pizza" line.split('. ', 1)[-1] # 결과: "Pizza"
Step 6: .strip()
strip()은 문자열의 양쪽 공백을 제거합니다.
불필요한 공백이 남아 있을 경우 깔끔하게 정리합니다.
예시:" Pizza ".strip() # 결과: "Pizza"
Step 7: 리스트 컴프리헨션
모든 줄에서 위 과정을 반복하며, 조건(if '.' in line)을 만족하는 줄만 처리합니다.
처리된 결과를 하나의 리스트로 저장합니다.
예제 과정:filtered_name = "1. Pizza\n2. Pasta\n3. Salad" options = [line.split('. ', 1)[-1].strip() for line in filtered_name.split('\n') if '.' in line]
추가로 여기서 1번 분리한다는 뜻은 maxsplit을 설정한다는 뜻입니다.
예시를 통한 설명
1. maxsplit을 지정하지 않은 경우 (기본값)text = "1. Pizza. Tasty. Cheesy" result = text.split('. ') print(result) # 출력: ['1', 'Pizza', 'Tasty', 'Cheesy']
기본적으로 가능한 모든 . 에서 문자열이 나눠집니다.
2. maxsplit=1을 지정한 경우text = "1. Pizza. Tasty. Cheesy" result = text.split('. ', 1) print(result) # 출력: ['1', 'Pizza. Tasty. Cheesy']
문자열은 첫 번째 . 에서만 분리됩니다.
나머지 부분은 그대로 유지됩니다.