%pip install selenium
%pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# http://www.example.com 으로 요청을 보낸다.
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.example.com")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.example.com")
driver.page_source
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver :
driver.get("https://www.example.com")
print(driver.page_source)
selenium은 받아온 응답으로부터 특정 요소를 추출할 수도 있다.
이미 브라우저를 활용하기 때문!
응답을 가지고 있는 driver/요소에 대해서 다음과 같은 메서드를 적용할 수 있다.
요소 하나 찾기
.find_element(by, target)
by
: 대상을 찾는 기준 : ID
, TAG_NAME
, CLASS_NAME
, ...target
: 대상의 속성 요소 여러개 찾기
.find_elements(by, target)
by
: 대상을 찾는 기준 : ID
, TAG_NAME
, CLASS_NAME
, ...target
: 대상의 속성# p 태그에 해당하는 요소 하나를 찾아보자
from selenium.webdriver.common.by import By
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver :
driver.get("https://www.example.com")
print(driver.find_element(By.TAG_NAME, "p").text)
Selenium은 동적 웹 사이트에 대한 지원을 진행하기 위해 명시적 기다림(Explicit Wait) 과 암묵적 기다림(Implicit Wait) 을 지원한다.
# 스크래핑에 필요한 라이브러리를 불러와봅시다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
class name이 "btn-md"인 요소가 나올 때 까지 최대 100000초 기다리다가, 나오면 바로 객체를 go_pay변수에 담고 Click 버튼을 누르게 시킨다.
go_pay = WebDriverWait(driver,100000).until(EC.presence_of_element_located((By.CLASS_NAME,"btn-md")))
ActionChains(driver).click(go_pay).perform()
time.sleep(1)
class 이름이 조금 특이하다? (ex-15fjalsghue)
이는 스크래핑을 방지할 목적으로 랜덤하게 class 이름을 생성하기 때문.
이러한 경우에서 쓸 수 있는 방법이 여러가지가 있는데,
그 중 한가지 방법인, 위치를 활용한 방법이 있다.
XPath
는 XML, HTML 문서 등의 요소의 위치를 경로로 표현하는 것을 의미한다.
마치 데스크탑/폴더1/폴더2/음악.mp3
와 같이.
이를 적용해서 데이터를 온전히 가져와보자
day = WebDriverWait(driver,100000).until(EC.presence_of_element_located((By.XPATH,'//*[@id="branch-bid"]/section/ul/li[3]/a/div/div[1]')))
최대 100000초 동안 기다리다가 //*[@id="branch-bid"]/section/ul/li[3]/a/div/div[1] 위치가 발견될 떄 day변수에 객체를 반환한다.
from selenium.webdriver import ActionChains
button = driver.find_element(By.ID, "button")
ActionChains(driver).click(button).perform()
card = driver.find_element(By.NAME,"cardNumber")
ActionChains(driver).send_keys_to_element(card,"123456789").perform()