← 홈

🌐

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

설정

설치

pip install selenium Python 설치
npm install selenium-webdriver Node.js 설치
pip install webdriver-manager 드라이버 매니저 설치

드라이버 설정

Chrome (Python)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Auto-install driver
driver = webdriver.Chrome(
    service=Service(ChromeDriverManager().install())
)

# Or with options
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
Firefox (Python)
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(
    service=Service(GeckoDriverManager().install())
)
JavaScript/Node.js
const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

const options = new chrome.Options();
options.addArguments('--headless');

const driver = await new Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

로케이터

요소 찾기

By 로케이터 (Python)
from selenium.webdriver.common.by import By

# Single element
driver.find_element(By.ID, "id")
driver.find_element(By.NAME, "name")
driver.find_element(By.CLASS_NAME, "class")
driver.find_element(By.TAG_NAME, "tag")
driver.find_element(By.LINK_TEXT, "Link Text")
driver.find_element(By.PARTIAL_LINK_TEXT, "Partial")
driver.find_element(By.CSS_SELECTOR, "div.class")
driver.find_element(By.XPATH, "//div[@id='id']")

# Multiple elements
driver.find_elements(By.CLASS_NAME, "items")
CSS 선택자
# By ID
"#id"

# By class
".class"

# By attribute
"[name='value']"
"input[type='text']"

# Combination
"div.class#id"
"form input[type='submit']"

# Pseudo-classes
"li:first-child"
"li:nth-child(2)"
"li:last-child"
XPath
# By ID
"//*[@id='id']"

# By text
"//button[text()='Submit']"
"//button[contains(text(), 'Sub')]"

# By attribute
"//input[@name='email']"
"//input[contains(@class, 'btn')]"

# Parent/sibling
"//div/parent::*"
"//div/following-sibling::p"

# Index
"(//div[@class='item'])[1]"

액션

요소 상호작용

기본 액션
element = driver.find_element(By.ID, "id")

# Click
element.click()

# Type text
element.send_keys("Hello")
element.clear()
element.send_keys("New text")

# Submit form
element.submit()

# Get attribute
value = element.get_attribute("value")
href = element.get_attribute("href")

# Get text
text = element.text

# Check state
element.is_displayed()
element.is_enabled()
element.is_selected()
키보드 액션
from selenium.webdriver.common.keys import Keys

element.send_keys(Keys.ENTER)
element.send_keys(Keys.TAB)
element.send_keys(Keys.ESCAPE)
element.send_keys(Keys.BACKSPACE)
element.send_keys(Keys.CONTROL, "a")  # Select all
element.send_keys(Keys.CONTROL, "c")  # Copy
element.send_keys(Keys.CONTROL, "v")  # Paste
ActionChains
from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)

# Hover
actions.move_to_element(element).perform()

# Double click
actions.double_click(element).perform()

# Right click
actions.context_click(element).perform()

# Drag and drop
actions.drag_and_drop(source, target).perform()

# Click and hold
actions.click_and_hold(element).perform()
actions.release().perform()

# Chain multiple actions
actions.move_to_element(element)\
    .click()\
    .send_keys("text")\
    .perform()

폼 요소

Select 드롭다운
from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.ID, "dropdown"))

# Select by value
select.select_by_value("value1")

# Select by visible text
select.select_by_visible_text("Option 1")

# Select by index
select.select_by_index(1)

# Get selected option
selected = select.first_selected_option
all_options = select.options

# Deselect (multi-select)
select.deselect_all()
체크박스 및 라디오
checkbox = driver.find_element(By.ID, "checkbox")

# Check if selected
if not checkbox.is_selected():
    checkbox.click()

# Uncheck
if checkbox.is_selected():
    checkbox.click()

# Radio button
radio = driver.find_element(By.CSS_SELECTOR, "input[value='option1']")
radio.click()

대기

대기 전략

암시적 대기
# Global wait for all elements
driver.implicitly_wait(10)  # seconds
명시적 대기
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)

# Wait for element visible
element = wait.until(
    EC.visibility_of_element_located((By.ID, "id"))
)

# Wait for element clickable
element = wait.until(
    EC.element_to_be_clickable((By.ID, "id"))
)

# Wait for element present
element = wait.until(
    EC.presence_of_element_located((By.ID, "id"))
)

# Wait for text
wait.until(
    EC.text_to_be_present_in_element((By.ID, "id"), "expected text")
)
예상 조건
from selenium.webdriver.support import expected_conditions as EC

EC.title_is("Page Title")
EC.title_contains("Title")
EC.url_contains("path")
EC.url_to_be("https://example.com")
EC.visibility_of_element_located(locator)
EC.invisibility_of_element_located(locator)
EC.element_to_be_clickable(locator)
EC.element_to_be_selected(locator)
EC.alert_is_present()
EC.frame_to_be_available_and_switch_to_it(locator)
커스텀 대기
def element_has_class(element, class_name):
    return class_name in element.get_attribute("class")

wait.until(lambda d: element_has_class(
    d.find_element(By.ID, "id"), "active"
))

알림 및 팝업

알림 처리

알림 처리
from selenium.webdriver.common.alert import Alert

# Wait for and switch to alert
alert = wait.until(EC.alert_is_present())

# Or directly
alert = driver.switch_to.alert

# Get alert text
text = alert.text

# Accept (OK)
alert.accept()

# Dismiss (Cancel)
alert.dismiss()

# Send keys (prompt)
alert.send_keys("input text")
alert.accept()

JavaScript

JavaScript 실행

스크립트 실행
# Execute JavaScript
driver.execute_script("alert('Hello');")

# Return value
result = driver.execute_script("return document.title;")

# Pass arguments
element = driver.find_element(By.ID, "id")
driver.execute_script("arguments[0].click();", element)

# Scroll into view
driver.execute_script("arguments[0].scrollIntoView();", element)

# Scroll to position
driver.execute_script("window.scrollTo(0, 500);")

# Scroll to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Set value
driver.execute_script("arguments[0].value = 'text';", element)

# Remove attribute
driver.execute_script("arguments[0].removeAttribute('disabled');", element)

스크린샷

캡처

스크린샷
# Save screenshot
driver.save_screenshot("screenshot.png")

# Get as base64
base64_img = driver.get_screenshot_as_base64()

# Get as PNG bytes
png_bytes = driver.get_screenshot_as_png()

# Element screenshot
element = driver.find_element(By.ID, "id")
element.screenshot("element.png")

정리

브라우저 관리

정리
# Close current window
driver.close()

# Quit browser
driver.quit()

# Context manager (Python)
from selenium import webdriver

with webdriver.Chrome() as driver:
    driver.get("https://example.com")
    # automatically quit on exit