본문 바로가기
[업무 지식]/Crawling

[Selenuim] 구글 검색하기

by 에디터 윤슬 2025. 1. 2.

selenium 기본 사용 방법

# 제목 추출하기
>>> driver.find_elements_by_css_selector('.store_product_info_box')

# 하나의 DOM 요소는 WebElement 객체에 대응합니다.
>>> div = driver.find_elements_by_css_selector('.store_product_info_box')[0]

# 속성을 추출할 때는 get_attribute() 메서드를 사용합니다.
>>> div.get_attribute('class')

# 요소 내부에서 요소를 추가로 탐색할 수도 있습니다.
>>> div.find_elements_by_css_selector('h3')

# 내부의 글자를 추출할 때는 text 속성을 사용합니다.
>>> h3.text

 

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ChromeDriver 경로 설정 (본인의 환경에 맞게 수정)
CHROME_DRIVER_PATH = "~~~~chromedriver"

# Chrome 옵션 설정
chrome_options = Options()
chrome_options.add_argument("--headless")  # 브라우저 창을 띄우지 않고 실행
chrome_options.add_argument("--disable-gpu")  # GPU 사용 안 함
chrome_options.add_argument("--no-sandbox")  # 리눅스 환경에서 권한 문제 방지
chrome_options.add_argument("--disable-extensions")  # 확장 프로그램 비활성화
chrome_options.add_argument("--disable-images")  # 이미지 로드 비활성화 (속도 향상)
chrome_options.add_argument("--blink-settings=imagesEnabled=false")  # 이미지 로드 비활성화

# 페이지 로드 전략 설정 (eager: DOM이 인터랙티브 상태일 때 진행)
chrome_options.page_load_strategy = "eager"

# WebDriver 초기화
service = Service(CHROME_DRIVER_PATH)
driver = webdriver.Chrome(service=service, options=chrome_options)

try:
    # 웹 페이지 열기
    url = "https://google.co.kr"
    driver.get(url)
    print(f"페이지 제목: {driver.title}")

    # 특정 요소 찾기 (Explicit Wait 사용)
    wait = WebDriverWait(driver, 10)  # 최대 10초 대기
    search_box = wait.until(EC.presence_of_element_located((By.NAME, "q")))
    
    # 검색어 입력 및 실행
    search_box.send_keys("Selenium Python")
    search_box.send_keys(Keys.RETURN)

    # 검색 결과 대기 및 출력 (Explicit Wait 사용)
    results = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "h3")))
    for idx, result in enumerate(results[:5]):  # 상위 5개 결과만 출력
        print(f"{idx + 1}. {result.text}")

finally:
    # WebDriver 종료
    driver.quit()