μ μκ°μλ Selenium
μ μ¬μ©νκΈ° μν νκ²½μ ꡬμ±νμκ³ , μ΄λ² μκ°μλ ꡬμ±λ Selenium
μ μ΄μ©ν΄μ μ€μ λ‘ ν
μ€νΈ μ½λλ₯Ό μμ±νλ λ°©λ²μ μμ λ³Ό μμ μ΄λ€. λ§μ½μ νκ²½ ꡬμ±νλ λ°©λ²μ λν΄μ μμ§ μ½μ§ μμ λΆμ μ½μΌλ©΄μ μ°¬μ°¬ν νκ²½μ ꡬμ±ν΄λ³΄κΈΈ λ°λλ€.
κ·ΈλΌ λ°λ‘ ν μ€νΈ μ½λ μμ± λ°©λ²μ λν΄μ μμ보λλ‘ νμ!
ν μ€νΈ νκ²½μ λ€μκ³Ό κ°λ€.
OS : Window 10 Pro
IDE : Pycharm Ultimate Edition
Python SDK : Python 3.8 (λ§ν¬λ₯Ό λλ₯΄λ©΄ μ€μΉνμ΄μ§λ‘ μ΄λν©λλ€.)
Web browser : Google Chrome 90 (Chrome κΆμ₯)
Python Environment : virtualenv (pip)
λ¨Όμ μμ μ΄ Selenium
μ½λ μμ±μ μν΄ μ¬μ©νλ IDEλ₯Ό μ€νμν¨λ€. κ·Έλ¦¬κ³ μ΄μ μ λ§λ€μλ νλ‘μ νΈλ₯Ό μΌ λ€. (νμλ PyCharm
μ μ΄μ©νλ€.)
μ¬κΈ°μ μ κΉ!π
μμ±μ μμμ λ§μ΄ μ¬μ©λλ Selenium
μ½λμ λν΄μ μ§κ³ λμ΄κ° λ³Ό μμ μ΄λ€.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
def main():
# μμ μ΄ μ¬μ©νλ μΉλλΌμ΄λ² κ°μ Έμ€κΈ°
driver = webdriver.Chrome("C:/Users/junsugi/Desktop/chromedriver.exe")
# get λ©μλλ ν΄λΉ URLλ‘ μ΄λνλ€.
driver.get("https://google.com")
# idλ‘ element μ°ΎκΈ°
driver.find_element_by_id("id")
# classλ‘ νλμ element μ°ΎκΈ°
driver.find_element_by_class_name("className")
# classλ‘ μ¬λ¬κ°μ element μ°ΎκΈ°
driver.find_elements_by_class_name("className")
# class μ΄μΈμλ name, tag name λ± λ€μν μμλ‘ elementλ₯Ό μ°Ύμ μ μλ€.
# νμν μν©μ λ°λΌμ μ§ννλ©΄ λ κ² κ°λ€.
# xpathλ‘ element μ°ΎκΈ° (κΈμμ μμΈν λ€λ£° μμ )
driver.find_element_by_xpath("xpath")
# νμ΄μ§ λ‘λ© κΈ°λ€λ¦΄ μ μλλ‘ ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬
wait = WebDriverWait(driver, 5)
μκ°λλ건 μ΄μ λ λ°μ μλ€. μΆκ°λ‘ λμμ΄ λ λ§ν λ΄μ©μ΄ μκ°νλ©΄ μ μ΄λ£λλ‘ νκ² μ΅λλ€.
λ³΄ν΅ Selenium
μ½λλ μμ μ΄ κ°λ°ν μΉ μ¬μ΄νΈ ν
μ€νΈλ₯Ό μν΄μ μ¬μ©νμ§λ§ μ°λ¦¬λ μ°μ μμ€μ λμμλ μ λͺ
μ¬μ΄νΈμμ μ΄λ»κ² μ½λλ₯Ό μ¬μ©νλμ§λ₯Ό νμΈν΄λ³΄κ² μ΅λλ€. λ°λΌμ μ λ LostArk κ²μ ννμ΄μ§μμ μ μ κ²μ μμ΄λμ μ 보λ₯Ό κ²μνκ³ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ μλ리μ€λ‘ ν΄λ³΄κ² μ΅λλ€.
μ°μ λ‘μ€νΈμν¬ κ³΅μννμ΄μ§μ μ μν©λλ€. κ·Έλ¦¬κ³ λ κ°λ°μ λꡬ(F12) λ₯Ό μΌμ μμ μ΄ μ°ΎμμΌ νλ element
λ₯Ό μ°Ύμ΅λλ€. μ λ μ ν¬μ 보μ€μ΄λΌλ λ²νΌμ element
λ₯Ό μ°Ύκ² μ΅λλ€.
μ¬κΈ°μ λ΄κ° μνλ element
μ μμ±μ λΉ λ₯΄κ² μ°Ύλ λ°©λ²μ κ°λ°μ λꡬλ₯Ό μΌλ©΄ λ€μκ³Ό κ°μ μμ΄μ½μ΄ 보μ
λλ€.
ν΄λΉ μμ΄μ½μ λλ₯΄κ³ λ΄κ° μνλ element
λ₯Ό ν΄λ¦νλ©΄ κ³§λ°λ‘ κ°λ°μλꡬμμ μμ κ·Έλ¦Όκ³Ό κ°μ΄ νλμμΌλ‘ μ νν΄μ€λλ€.
μ΄ κ³Όμ μ λ¨μΆκΈ°κ° μ‘΄μ¬νλλ° Ctrl + Shite + C
λ₯Ό λλ₯΄λ©΄ μμ΄μ½μ λλ₯΄μ§ μμλ μλμΌλ‘ Select
λͺ¨λλ‘ μ νλ©λλ€.
κ·Έλ¦¬κ³ λμ element
λ₯Ό νμΈν΄λ΄€λλ ID
κ°λ μκ³ Class
, Name
κ°μ΄ μ λΆ μμ΄μ μμμ λ°°μ΄ μ½λλ‘λ element
λ₯Ό μ°Ύμ μκ° μλλ°, μ΄λ μ¬μ©νλ λ°©λ²μ΄ xPath μ
λλ€.
λ°λΌμ xPath
λ₯Ό μ΄μ©ν΄μ λ€μμ element
λ₯Ό μ°ΎμΌλ©΄ λ€μκ³Ό κ°μ΄ μ°Ύμ μ μμ΅λλ€.
character = driver.find_element_by_xpath("//nav[@class='nav']//ul//a[@href='/Profile/Character']")
character.click()
μ μ λ κ² xPath
κ° μ
λ ₯μ΄ λμλμ§ html
μ ν΅ν΄ μ΄ν΄λ³΄μ.
μ ν¬μ λ³΄μ€ element
κ° λ€μ΄μλ 첫 μμ νκ·Έκ° div
λ‘ λμμλ€. λ°λΌμ μ²μλΆν° νκ³ λ€μ΄κ°λ λ°©λ²λ μμ§λ§ λλ nav
νκ·Έκ° μ΄κ³³μμλ§ μ¬μ©λλκ±Έ κ°λ°μλꡬμμ κ²μν΄μ μμκ³ nav
λΆν° νκ³ λ€μ΄κ°λ λ°©ν₯μΌλ‘ ννλ€. κ·Έλ°λ° νμ€νκ² λ΄κ° μνλ nav
λ‘ κ²μλκΈΈ μνκ³ λ°λΌμ class
λ₯Ό λͺ
μν΄μ€¬λ€.
λ°λΌμ //nav[@class='nav']
λ‘ xPath
μ μ€ννΈλ₯Ό λμλ€. κ·Έλ¦¬κ³ nav
λ°μ μ‘΄μ¬νλ νκ·Έκ° h2
μ ul
μ΄ μλλ° h2
λ μ°λ¦¬μ λͺ©μ κ³Ό μκ΄ μλ νκ·ΈλκΉ λ¬΄μνκ³ ul
νκ·Έλ₯Ό μ΄μ΄λ³΄μ. κ·Έλ¬λ©΄ λ§μ κ°μμ li
λ€μ΄ μλλ° μ°μ μ¬κΈ°κΉμ§ νλ©΄ //nav//ul
μ΄λ κ² μμ±μ΄ λλ€.
μ¬κΈ°κΉμ§λ κ·Έλ₯ μμ½κ² λ°λΌν μ μλ€. κ·Έ λ€μμ μ¬κΈ°μ ν΅μ¬μΈλ°, li
λ₯Ό νΉμ νκ² κ΅¬λΆν΄μ€ μ μλ selector
κ° μλ€. κ·Έλμ νμκ° μκ°ν λΆλΆμ a
νκ·Έμ href
κ°μΌλ‘ μ ν¬μ λ³΄μ€ element
λ₯Ό μ°Ύλλ°©λ²μ λ μ¬λ Έλ€. κ·Έλμ xPath
λ λ€μκ³Ό κ°μ΄ μ ν μ μλ€.
//nav[@class='nav']//ul//a[@href='/Profile/Character']
λ°λΌμ ul
νκ·Έ λ°μ a
νκ·Έλ₯Ό μ°Ύλλ° href
λ΄μ©μ΄ /Profile/Character
μΈ a
νκ·Έλ₯Ό μ°Ύκ² λ€λ μλ―Έλ€. μ¬κΈ°μ νκ°μ§ μ€μν λ¬Έλ²μ΄ λμ€λλ° νκ·Έμ΄λ¦[@μ
λ ν°='κ°']
μΌλ‘ μ μΌλ©΄ ν΄λΉ element
λ₯Ό μ°Ύμ μ μλ€. μ
λ ν°μλ id
, class
, name
, href
λ± λ€μν κ°μ΄ μ ν μ μλλ° μμΈν λ΄μ©μ ꡬκΈμ κ²μν΄λ³΄λ©΄ μ μ μλ€.
κ·Έλμ xPath
λ₯Ό μ΅μ’
μ μΌλ‘ μ μ΄λ³΄λ©΄ λ€μ μ½λμ²λΌ μ ν μ μλ€.
character = driver.find_element_by_xpath("//nav[@class='nav']//ul//a[@href='/Profile/Character']")
character.click() # a νκ·Έ ν΄λ¦νκΈ°
find_elements_by_xpath
κ° μκ³find_element_by_xpath
κ° μλλ° μ°λ¦¬λ μ ν¬μ λ³΄μ€ νλλ§ νμνκΈ° λλ¬Έμelement
λ‘ μ¬μ©νλ€. νΉμ 볡μμelement
λ₯Ό μ°ΎμμΌ νλ κ²½μ°λelements
λ‘ κ²μνλ€.
κ·Έλ¦¬κ³ μ€ννλ©΄ μ ν¬μ 보μ€λ‘ νμ΄μ§κ° μ΄λνλ κ²μ λ³Ό μ μλ€.
μ¬κΈ°μ λ΄ λλ€μμ κ²μνκ³ μ 보λ₯Ό print
ν΄λ³΄λ λΆλΆκΉμ§ μ§νν΄λ³΄μ. xpath
λΆλΆμ΄ μ€λͺ
μ΄ κΈΈμ΄μ Έμ κ·Έλ¬μ§ λλ¨Έμ§λ κΈλ°©μ΄λ€.
λ°λΌμ λ€μ html
μ λΆμν΄μΌ λλλ° λ΄κ° κ°μ μ
λ ₯ν΄μΌ λλ input
νκ·Έ element
λ₯Ό μ°ΎμμΌ νλ€.
λ‘λ°μμ γ·γ· πββοΈ
λ€ν(?)μ€λ½κ²λ input
νκ·Έμλ λκ° λ§μ΄ μ νμλ€. λ°λΌμ μ΄ λΆλΆλ class
λ₯Ό μ΄μ©ν΄μ element
λ₯Ό μ°Ύμ보λλ‘ νκ² λ€. μ½λλ λ€μκ³Ό κ°λ€.
input = driver.find_element_by_class_name("input--profile-search")
input.send_keys("μ κ±°μ’")
submit = driver.find_element_by_class_name("button--profile-search")
submit.click()
send_keys
λinput
νκ·Έμ κ°μ λ£μ λ μ¬μ©λλ€. (μμΈν λΆλΆμ μΆνμ μ€λͺ )
click()
λ©μλλ λ²νΌμ ν΄λ¦ν λ μ¬μ©νλ€.
μ¬κΈ°κΉμ§ μ€ννλ©΄ λ€μκ³Ό κ°λ€.
λ§μ§λ§μΌλ‘ κ²μλ κ°μ print
ν΄μ console
μ μ°μ΄λ³΄λ©΄ λλλλ°, ν΄λΉ λΆλΆμ μ λΆ λ€ λκ°κ³ .text
λ©μλλ§ μ΄μ©νλ©΄ λλ€. λ°λΌμ κ°λ¨νκ² λλ€μ λ°μ΄ν°λ§ κ°μ Έμ€λ©΄ λ€μκ³Ό κ°λ€.
name = driver.find_element_by_class_name("profile-character-info__name")
print(name.text)
μμμ 보μΌμ§ λͺ¨λ₯΄κ² λλ°
console
μ°½μ 'μ κ±°μ’' μ΄ λ¬ λͺ¨μ΅μ λ³Ό μ μλ€.
λ°λΌμ μ΄ κ³Όμ μ μ 체 μ½λλ‘ μ μΌλ©΄ λ€μκ³Ό κ°λ€.
import time
from selenium import webdriver
def print_hi():
# μμ μ΄ μ¬μ©νλ μΉλλΌμ΄λ² κ°μ Έμ€κΈ°
driver = webdriver.Chrome("C:/Users/junsugi/Desktop/chromedriver.exe")
# get λ©μλλ ν΄λΉ URLλ‘ μ΄λνλ€.
driver.get("https://lostark.game.onstove.com/Main")
character = driver.find_element_by_xpath("//nav[@class='nav']//ul//a[@href='/Profile/Character']")
character.click()
input = driver.find_element_by_class_name("input--profile-search")
input.send_keys("μ κ±°μ’")
submit = driver.find_element_by_class_name("button--profile-search")
submit.click()
name = driver.find_element_by_class_name("profile-character-info__name")
print(name.text)
# driver session μ’
λ£
driver.close()
if __name__ == '__main__':
print_hi()
μ΅λν μ½κ² μ€λͺ
μ νλ €κ³ νλλ° λκ° μ€κ΅¬λλ°© μ€λͺ
ν κ² κ°μλ€. μ§κΈκΉμ§ μ€λͺ
ν λΆλΆμ Selenium
μ κΈ°μ΄μ κΈ°μ΄λ§ μ€λͺ
νλ€. λλ μμ§ μ λ¬Έμ μΈ μ§μμ κ°μ§κ±΄ μμ§λ§ μ‘°κΈ λ μμμΌ ν λΆλΆλ€μ΄ μ‘΄μ¬νλ€.
λκ² νμ΄μ§ λ‘λ©μ΄ λλκΈ°λ μ μ element
λ₯Ό μ°Ύλ κ²½μ° μλ¬κ° λ¨λλ° κ·Έ λ νμ΄μ§ λ‘λ©μ κΈ°λ€λ Έλ€κ° element
λ₯Ό μ°Ύλ μμ£Ό μ’μ λΌμ΄λΈλ¬λ¦¬λ€λ μλ€.
μ΄λ° λΆλΆλ€μ λ€μ ν¬μ€ν μμ λ€λ€λ³΄λλ‘ ν μμ μ΄λ€.
λ€μ ν¬μ€ν λ μ¬λΉ λ₯΄κ² μ¬λ¦΄ μ μλλ‘ λ Έλ ₯νκ² μ΅λλ€.
κ°μ¬ν©λλ€.
μ’μ λ΄μ©μ΄λ€μ γ γ