반응형

파이썬, 셀레니움 HTML 파일 읽어서 분석하기 

 

글. 수알치 오상문

 

다음과 같은 HTML 파일이 있다고 하자. 

<!DOCTYPE html>
<html lang="ko-kr">
<head>
  <style>
    table, td {
      border: 1px solid #444;
    }
    thead, tfoot {
      background-color: #aaa;
      color: #111;
    }
  </style>
</head>
<body>
<h1> 테이블 예제 </h1>
    <table>
        <thead>
            <tr>
                <th colspan="2">음식 주문 차림표</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><h5>비 빔 밥 (1번줄 1번째 칸)</h5></td>
                <td>9000원 (1번줄 2번째 칸)</td>
            </tr>
            <tr>
                <td><h5>김치찌개 (2번줄 1번째 칸)</h5></td>
                <td>8000원 (2번줄 2번째 칸)</td>
            </tr>
            <tr>
                <td><h5>된장찌개 (3번줄 1번째 칸)</h5></td>
                <td>7000원 (3번줄 2번째 칸)</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <th colspan="2">물은 셀프입니다.</td>
            </tr>
        </tfoot>
    </table>
</body>
</html>

 

브라우저에서 살펴보면 다음과 같은 화면 구조를 보여준다.

 

이제 이 HTML 파일을 읽어와서 셀레니움에서 다뤄보자. 

예제에서 해당 파일 풀네임은  'D:/project_selenium/table.html'이다.

 

다음 파이썬 코드는 셀레니움을 이용해서 해당 테이블 내용을 보여준다.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging']) # device error 메시지 off
driver = webdriver.Chrome(options=options)  # 현재 위치에 있는 크롬드라이버 등록
driver.implicitly_wait(10)  # 정상 페이지 로딩 최대 허용 시간
try:
    # HTML 파일 로딩 
    driver.get("file:///D:/project_selenium/table.html")
    try:
        # 'tfoot' 태그가 보일 때까지 기다리기 
        WebDriverWait(driver, 20).until(
            lambda driver: driver.find_element(By.TAG_NAME, 'tfoot'))
        time.sleep(1)
    except Exception as e:
        print('get error:', e)
        raise Exception('"tfoot" tag not found')
except Exception as e:
    print('get error:', e)
    driver.quit()
    exit(1)
try:
    # 테이블 내용 출력 
    for tr in driver.find_elements(By.TAG_NAME, 'tr'):
        tr_text = []
        for td in tr.find_elements(By.TAG_NAME, 'td'):
            tr_text.append(td.text)
        print(*tr_text)
except Exception as e:
    print(e)
input('Quit? ')
driver.quit()

 

[실행 결과]

비 빔 밥 (1번줄 1번째 칸) 9000원 (1번줄 2번째 칸)
김치찌개 (2번줄 1번째 칸) 8000원 (2번줄 2번째 칸)
된장찌개 (3번줄 1번째 칸) 7000원 (3번줄 2번째 칸)

Quit? 

 

 

 

반응형

+ Recent posts