ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Selenium 기초 및 활용 하기 01 - 설치 및 기본 기능
    빅데이터/Selenium 2022. 1. 7. 14:37

    유투버 '이수안컴퓨터연구소' 강의 참조

     

     

    01 셀레니엄 이란?

    • 최초의 셀레니엄의 목적은 웹사이트 테스트를 위해서 만들어졌다.
    • 셀레니엄을 이용하면 마치 사람이 사용하는것처럼 웹사이트를 열고 원하는 사이트에 들어가서 검색을 하는 등 자동화 테스트용으로 만들어졌다.
    • 셀레니엄은 4가지 종류가 있다 IDE/RC/WebDriver/Grid
    • 현재는 'Selenium WebDriver' 라는 프로그램을 통해 운영체제 및 프로그래밍언어등에 사용이 가능하고 이를 통해 업무 자동화에 사용 된다. 
    • 크롬을 이용해서 셀레니엄을 사용하려면 크롬이 가지고있는 내부 드라이버에 접근을 해야하는데 이를 'Chronium' 이라 불리고 이를 기반으로해서 만들어 졌다. 

     

     

    02 셀레니엄 및 크롬 관련 드라이브 설치 

    • 가장 간단한 방법은 VS가 깔려있으면 터미널로 깔면 된다
    • 테스트
      이렇게 했을때 오류가 없으면 설치 성공
    • 크롬으로 셀레니엄을 이용해 웹스크래핑을 하려면 크롬용 웹 드라이버가 필요하다. 
      다음 링크를 확인해서 설치를 해주자 (https://chancoding.tistory.com/136)
    • 크롬으로 셀레니엄을 사용하려면 반드시 크롬드라이버가 사용하고자 하는 폴더에 있어야 가능하다. 

    크롬드라이버 버전이 꼭 일치해야 오류가 없다!

     

     

    ▶ 기본 세팅

    import selenium
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    #웹브라우저를 띄우지 않고 진행하기 위한 설정
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    #이렇게 객체를 생성하여 위에서 세팅된 값을 넣어주면 된다!
    wd = webdriver.Chrome('chromedriver', options=chrome_options)
    • 셀레니엄도 뷰티풀숩처럼 일단 스크래핑 하고자 하는 사이트를 들고 와야 한다
    wd.get("http://suanlab.com/")

     

     

     

    01 셀레니엄 간단 기능 보기

    • 스크린샷
      wd.get_screenshot_as_file("suanlab.png")​

     

    • 간단 스크래핑

    이 사진에 나와있는 <label> 태그 들고 와보자

    for label in wd.find_elements_by_tag_name('label'):
        print(label.text)#객체의 text값을 들고 와야 한다

    • 뷰티풀숩과 매우 흡사하게 접근 한다고 보면 된다. 'label' 태그가 계속 여러번 반복되니 그것을 찾아오고 포문을 돌려서 하나씩 뽑는 형태. 하나의 태그에 접근할때는 단순 'find_element'

     

    ▶ 뷰티풀숩과 마찬가지로 CSS 셀렉터로도 접근이 가능 하다. 

    #wrapper > section > div > div > div:nth-child(1) > div > div:nth-child(1) > label
    
    -> 구조 선택자를 없애야 모든 label을 인덱싱 관계없이 들고올 수 있다.
    '#wrapper > section > div > div > div > div > div > label'
    
    for label in wd.find_elements_by_css_selector('#wrapper > section > div > div > div > div > div > label'):
        print(label.text)

     

    ▶ 셀레니움에서는 CSS 선택자 말고 XPATH 선택자도 엄청 많이 쓰인다.

    //*[@id="wrapper"]/section/div/div/div[1]/div/div[1]/label
    
    # 똑같이 특정 인덱스를 없애줘야 포문을 오류없이 돌릴 수 있다.
    
    //*[@id="wrapper"]/section/div/div/div/div/div/label
    
    for label in wd.find_elements_by_xpath('//*[@id="wrapper"]/section/div/div/div/div/div/label'):
        print(label.text)

     

     

    • 클래스로 접근이 안될때에는 CSS 선택자나 XPATH 선택자로 접근해서 다시 클래스로 가져 올 수 있다.
    labels = wd.find_element_by_css_selector('#wrapper > section > div > div > div > div')
    
    for label in labels.find_elements_by_class_name('toggle'):
        print(label.text)

    → 최상위 <div> 클래스를 들고 올때에는 하나밖에 없으니 .find_element 단수로 찾아야 한다

     

     

    • 위와 완전히 똑같은 결과를 내지만 코드가 약간 다른 방식이 있다.
    from selenium.webdriver.common.by import By
    
    for label in wd.find_elements(By.TAG_NAME, 'label):
    	print(label.text)
        
    for label in wd.find_elements(By.CSS_SELECTOR, '#wrapper > section > div > div > div > div > div > label'):
    	print(label.text)
Designed by Tistory.