카테고리 없음

스파르타 AI-8기 TIL(1/2)-TeamProject

kimjunki-8 2025. 1. 2. 23:31
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']

문자열은 첫 번째 . 에서만 분리됩니다.
나머지 부분은 그대로 유지됩니다.