카테고리 없음

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

kimjunki-8 2025. 1. 1. 20:10

모두 새해 복 많이 받으시고 코드 짭시다
암튼 오늘은 chromedata에 대해 배워봅시다.

먼저, 필요한 라이브러리를 설치해야 합니다. selenium과 webdriver-manager입니다. 왜냐하면 둘 다 필요하기 때문입니다.

1. Selenium
Selenium은 웹 애플리케이션을 자동으로 테스트할 수 있게 해주는 오픈 소스 도구입니다. 주로 웹 브라우저에서 사용자의 행동을 자동화하여, 테스트를 반복적으로 실행하거나 특정 작업을 수행할 수 있습니다.

웹 드라이버 API를 통해 웹 브라우저와 상호작용합니다. 웹 페이지의 요소를 찾고 클릭하거나 텍스트를 입력하는 등 다양한 자동화 작업을 수행할 수 있습니다.
예시:

1. 웹 애플리케이션 테스트(Selenium을 사용하여 웹 애플리케이션의 UI를 테스트)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()  # Chrome 브라우저 실행
driver.get("https://example.com/login")  # 로그인 페이지 열기

username = driver.find_element(By.ID, "username")  # 사용자명 필드 찾기
password = driver.find_element(By.ID, "password")  # 비밀번호 필드 찾기

username.send_keys("test_user")  # 사용자명 입력
password.send_keys("test_password")  # 비밀번호 입력
password.send_keys(Keys.RETURN)  # Enter 키 입력

print(driver.title)  # 현재 페이지 제목 출력
driver.quit()  # 브라우저 종료
1. driver.find_element
Selenium WebDriver 객체인 driver의 메서드 중 하나로, 웹 페이지에서 특정 HTML 요소를 찾는 기능을 제공합니다.
find_element는 첫 번째로 발견되는 HTML 요소 하나를 반환합니다.

이 메서드는 페이지 로드 후에 DOM(Document Object Model)에서 지정된 조건에 부합하는 요소를 검색합니다.
반환된 객체는 WebElement 타입으로, Selenium에서 제공하는 요소와의 상호작용(클릭, 텍스트 입력 등)이 가능합니다.

1.1 By.ID
Selenium의 By 클래스에서 제공하는 속성 중 하나로, HTML 요소를 ID 속성을 기준으로 검색하겠다는 의미입니다.
Selenium은 By 클래스를 통해 검색 기준을 지정하며, 이 외에도 아래와 같은 속성을 지원합니다:
By.CLASS_NAME: 클래스 이름을 기준으로 검색
By.NAME: name 속성을 기준으로 검색
By.XPATH: XPath 표현식을 사용해 검색
By.CSS_SELECTOR: CSS 선택자를 사용해 검색
추가:
By.ID를 통해 ID 속성이 "username"인 요소를 찾습니다.
HTML 코드에서 <input id="username">와 같은 요소가 있을 때, 이 ID 값 "username"을 사용해 요소를 찾습니다.
username 변수에 find_element 메서드의 결과를 저장합니다.

1.2 send_keys
WebElement 객체의 메서드로, 선택된 HTML 요소에 키보드 입력을 시뮬레이션합니다.
"test_user"라는 텍스트를 username 필드에 입력합니다.
이는 사용자가 키보드로 입력하는 동작을 흉내 내는 방식으로 구현됩니다.
사용 가능 입력:
일반 텍스트: "abc", "123"
키 명령: Keys.RETURN(Enter), Keys.TAB(탭 이동) 등

 

2. 반복 작업 자동화(Selenium은 반복적인 웹 작업(예: 데이터 입력, 클릭 작업)을 수행할 수 있습니다)

driver = webdriver.Chrome()
driver.get("https://example.com/form")

for i in range(10):
    field = driver.find_element(By.NAME, "input_field")
    field.send_keys(f"Data {i}")
    submit_button = driver.find_element(By.ID, "submit")
    submit_button.click()
driver.quit()
1. driver = webdriver.Chrome(ChromeDriverManager().install())
webdriver.Chrome: Chrome 브라우저를 실행하는 Selenium 드라이버 객체를 생성합니다.

2. driver.get("https://example.com/form")
driver.get: 지정된 URL("https://example.com/form")로 이동하여 브라우저에 해당 페이지를 로드합니다.
for i in range(10):
    field = driver.find_element(By.NAME, "input_field")
    field.clear()
    field.send_keys(f"Data {i}")
    submit_button = driver.find_element(By.ID, "submit")
    submit_button.click()

 

field = driver.find_element(By.NAME, "input_field")
HTML 요소 중 name 속성이 "input_field"인 입력 필드를 찾습니다.(By.NAME)
의미: 입력 필드에 접근해 텍스트를 입력하기 위해 WebElement 객체로 반환합니다.

field.clear()
입력 필드의 기존 텍스트를 모두 삭제합니다.
의미: 기존 입력값이 있을 경우 이를 지우고 새 데이터를 입력할 수 있도록 준비합니다.

field.send_keys(f"Data {i}")
"Data 0", "Data 1", ..., "Data 9"와 같은 텍스트를 입력 필드에 순차적으로 입력합니다.
의미: 키보드 입력 동작을 흉내 내어 반복적으로 데이터를 입력합니다.

submit_button = driver.find_element(By.ID, "submit")
ID가 "submit"인 버튼 요소를 찾습니다.
의미: 제출 버튼을 클릭하기 위해 WebElement 객체를 반환합니다.

submit_button.click()
제출 버튼을 클릭합니다.
의미: 데이터 입력 후 폼을 제출하는 동작을 수행합니다.

 

3. 웹 데이터 스크레이핑(Selenium은 JavaScript로 렌더링되는 동적 웹 페이지의 데이터를 가져올 때 사용합니다)

driver = webdriver.Chrome()
driver.get("https://example.com/products")
products = driver.find_elements(By.CLASS_NAME, "product-name")

for product in products:
    print(product.text)  # 제품 이름 출력
driver.quit()
for product in products:
    print(product.text)

검색된 요소 리스트에서 각 요소의 텍스트를 출력합니다.
product.text
WebElement 객체의 텍스트 내용을 반환합니다.(.text)
예를 들어, <div class="product-name">Product 1</div>이면 "Product 1"을 반환합니다.


2. WebDriver Manager
WebDriver Manager는 Selenium WebDriver와 브라우저 드라이버(ChromeDriver, GeckoDriver 등) 간의 호환성을 관리하고, 필요한 드라이버를 자동으로 다운로드하고 설정해주는 라이브러리입니다. 이를 사용하면, 별도로 웹 드라이버의 버전을 관리할 필요 없이, 필요한 드라이버를 쉽게 다운로드하고 사용할 수 있습니다.

일단 오늘은 여기까지(사정상)