김플닷넷

파이썬, 챗GPT, 프로그래밍 팁, 인공지능

파이썬

파이썬 셀레니움 웹사이트 자동화 기초

파이썬 셀레니움 웹 브라우저 자동화 기초

파이썬 셀레니움으로 자동화를 할 줄 알게 되면 내가 원하는 웹페이지 조작을 프로그램 실행 한 번으로 할 수 있습니다.
셀레니움을 처음 사용하시는 분들을 위한 맛보기 기초 실습으로 셀레니움을 사용해서 네이버 접속을 하고 지정된 키워드로 검색을 한 다음 스크린샷 찍는 과정을 자동화합니다.
이 과정을 통해, 자동으로 텍스트를 입력하는 방법과 원하는 요소를 찾아서 클릭하는 방법을 배우게 됩니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time

# 검색 키워드를 입력받습니다.
keyword = input("검색 키워드 입력: ")

# Chrome 브라우저 옵션 설정
options = Options()
options.add_argument("--start-maximized")  # 브라우저를 최대화된 상태로 엽니다.
options.add_experimental_option("detach", True)  # 스크립트 실행 후에도 브라우저를 닫지 않습니다.

# Chrome 웹드라이버를 설정된 옵션과 함께 시작합니다.
driver = webdriver.Chrome(options=options)

# 네이버 홈페이지로 이동합니다.
url = "https://naver.com"
driver.get(url)
time.sleep(3)  # 페이지가 로드될 시간을 기다립니다.

# 검색 입력창을 찾아서 검색 키워드를 입력합니다.
query = driver.find_element(By.ID, "query")
query.send_keys(f"{keyword}")
time.sleep(2)  # 키워드 입력 후 잠시 기다립니다.

# 검색 버튼을 찾아서 클릭합니다.
search_btn = driver.find_element(By.CSS_SELECTOR, "#search-btn")
search_btn.click()
time.sleep(2)  # 검색 결과 페이지가 로드될 시간을 기다립니다.

# 현재 브라우저 화면을 스크린샷으로 저장합니다.
driver.save_screenshot(f"naver_{keyword}.png")

# 브라우저를 종료합니다.
driver.quit()

위 코드에서는 편의상 브라우저 최대 시작과 브라우저 닫힘 방지 옵션만 사용했지만 실제 사용할 수 있는 옵션은 다양합니다.
옵션에 대한 내용은 파이썬 셀레니움 웹 드라이버 크롬 주요 옵션 마스터를 참고해 주세요.

네이버 검색창 html 태그

개발자 도구를 사용해 네이버 검색창의 태그를 확인해 보면 HTML 코드는 아래와 같습니다.

<input id="query" name="query" type="search" title="검색어를 입력해 주세요." placeholder="검색어를 입력해 주세요." maxlength="255" autocomplete="off" class="search_input" data-atcmp-element="">

input 태그이며 id, name, class 등 다양한 속성을 갖고 있습니다. 이 속성들 중 id를 사용해 검색창을 찾아 키워드를 입력하는 방법은 아래와 같습니다.

# 검색 입력창을 찾아서 검색 키워드를 입력합니다.
query = driver.find_element(By.ID, "query")
query.send_keys(f"{keyword}")
time.sleep(2)  # 키워드 입력 후 잠시 기다립니다.
네이버 검색 버튼

검색 키워드를 입력하고 돋보기 모양 버튼을 클릭하면 검색이 됩니다. 돋보기 모양 버튼의 태그를 확인해 보면 HTML 코드는 아래와 같습니다.

<svg id="search-btn" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" style="fill: #03c75a">

search-btn라는 id를 갖고 있습니다. 이 id를 사용하여 요소를 찾고 클릭하는 방법은 아래와 같습니다.

# 검색 버튼을 찾아서 클릭합니다.
search_btn = driver.find_element(By.CSS_SELECTOR, "#search-btn")
search_btn.click()

검색 입력창을 찾을 때와 같이 By.ID를 사용할 수도 있습니다. 그때는 (By.CSS_SELECTOR, “#search-btn”)를 (By.ID, “search-btn”) 이렇게 바꿔주면 됩니다.
그런데 우리가 실제로 네이버나 구글 등에서 검색을 할 때 검색어를 입력하고 버튼을 클릭하기도 하지만 검색어 입력 후 엔터를 눌러 검색을 할 수도 있습니다.

driver.find_element(By.ID, "query").send_keys(Keys.ENTER)

위 코드를 대신 사용하면 버튼을 클릭하는 대신 키보드 엔터키를 눌러 검색을 실행하게 됩니다.

# 현재 브라우저 화면을 스크린샷으로 저장합니다.
driver.save_screenshot(f"naver_{keyword}.png")

# 브라우저를 종료합니다.
driver.quit()

마지막으로 스크린샷을 찍고 브라우저를 종료합니다.

지금까지 사용한 방법은 검색창, 검색 버튼 등의 요소를 찾아 변수에 저장하고 그 변수에 click, send_keys 등의 메소드를 사용했습니다. 하지만 변수에 저장하지 않고 직접 메소드를 사용하는 것도 가능합니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time

keyword = input("검색 키워드 입력: ")

options = Options()
options.add_argument("--start-maximized")
options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=options)

url = "https://naver.com"

driver.get(url)
time.sleep(3)

driver.find_element(By.ID, "query").send_keys(f"{keyword}")
time.sleep(2)

driver.find_element(By.CSS_SELECTOR, "#search-btn").click()
# driver.find_element(By.ID, "query").send_keys(Keys.ENTER)
time.sleep(2)

driver.save_screenshot(f"naver_{keyword}.png")

driver.quit()

위 코드는 요소를 변수에 저장하지 않고 직접 send_keys, click 메소드를 사용하도록 변경한 코드입니다.

관련 동영상: 파이썬 웹페이지 자동화를 위한 셀레니움 기초 입문