3주차 과제:Streamlit & Selenium

강의 듣기 1주~3주 인증

https://www.gpters.org/dev/post/complete-1-4-weeks-KySmzWcG1DQuzF5


과제: BMI 계산기 만들기 (Streamlit)

알려주신대로 요구사항을 넣고 실행해 봤고 결론은 도출되었으나 많은 오류가 있었음.

Claude OPUS가 알려준 code

import streamlit as st

def calculate_bmi(height, weight):

"""

BMI를 계산하는 함수

"""

return weight / (height / 100) ** 2

def get_bmi_category(bmi):

"""

BMI 값에 따라 체중 범위와 색상을 반환하는 함수

"""

if bmi < 18.5:

return "저체중", "blue"

elif bmi < 23:

return "정상 체중", "green"

elif bmi < 25:

return "과체중", "orange"

else:

return "비만", "red"

def main():

st.title("BMI 계산기")

# 사용자로부터 이름 입력받기

name = st.text_input("이름을 입력하세요.")

# 사용자로부터 나이 입력받기 (0~120 사이의 값으로 제한)

age = st.number_input("나이를 입력하세요.", min_value=0, max_value=120, value=30)

# 사용자로부터 성별 선택받기

gender = st.radio("성별을 선택하세요.", ("남성", "여성"))

# 사용자로부터 키와 몸무게 입력받기

height = st.number_input("키 (cm)", min_value=1, max_value=300, value=160)

weight = st.number_input("몸무게 (kg)", min_value=1, max_value=500, value=60)

if st.button("BMI 계산"):

# BMI 계산

bmi = calculate_bmi(height, weight)

category, color = get_bmi_category(bmi)

# 사용자의 이름, 나이, 성별과 함께 BMI 계산 결과 출력

st.write(f"{name}님의 BMI는 {bmi:.2f}입니다. 나이는 {age}세, 성별은 {gender}입니다.")

st.write(f"{category}입니다.")

# BMI 값을 0~40 범위로 정규화하여 프로그레스 바로 표시

bmi_normalized = min(bmi / 40, 1.0)

st.progress(bmi_normalized, color=color)

# 세션에 사용자 데이터 저장

st.session_state.setdefault("bmi_data", []).append({

"name": name,

"age": age,

"gender": gender,

"bmi": bmi

})

# "데이터 저장" 버튼 클릭 시 파일에 데이터 저장

if st.button("데이터 저장"):

with open("bmi_data.csv", "a") as file:

for data in st.session_state.get("bmi_data", []):

file.write(f"{data['name']},{data['age']},{data['gender']},{data['bmi']:.2f}\n")

st.success("데이터가 저장되었습니다.")

# 도움말 섹션 추가

with st.expander("도움말"):

st.write("이 BMI 계산기는 사용자의 키와 몸무게를 입력받아 BMI 값을 계산합니다.")

st.write("BMI는 다음과 같이 분류됩니다:")

st.write("- 저체중: BMI < 18.5")

st.write("- 정상 체중: 18.5 <= BMI < 23")

st.write("- 과체중: 23 <= BMI < 25")

st.write("- 비만: BMI >= 25")

st.write("계산된 BMI 값은 프로그레스 바로 시각화되며, 체중 범위에 따라 색상이 다르게 표시됩니다.")

st.write("'데이터 저장' 버튼을 클릭하면 입력된 데이터가 'bmi_data.csv' 파일에 저장됩니다.")

if name == '__main__':

main()


여러 차례 오류가 지속되었지만 계속 하니 어찌 되었든 결과는 도출

안될 때 마다 다시 찍어서 보여주고 무엇이 오류인지 물어보았고, 반복을 통해 실


결과물 main · Streamlit

결과물에서도 오류 발견


결과물에서 아래와 같은 오류 발견

color인지를 못하기에 코드 수정이 필요한 상태.

st.progress(bmi_normalized, color=color) 부분을 아래처럼 color 파트를 제거고 바꿔 주었다. 
==> st.progress(bmi_normalized)

그래도 마지막 에러는 수정하지 못한 채 끝남.


Selenium 시도

미션부여

1. 네이버 접속

2. 검색창에 원하는 검색어 입력

3. 검색 버튼 클릭


코드제안

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.service import Service

from webdriver_manager.chrome import ChromeDriverManager

# Set up the Chrome WebDriver

service = Service(ChromeDriverManager().install())

driver = webdriver.Chrome(service=service)

# Step 1: Navigate to Naver

driver.get("https://www.naver.com")

# Step 2: Find the search box and input a search query

# The search box can be located by the name attribute which is usually "query" on Naver.

search_box = driver.find_element(By.NAME, "query")

search_query = "your search keyword" # Replace with your desired search

search_box.send_keys(search_query)

# Step 3: Click the search button

# The search button can usually be activated by sending an ENTER key in the search box.

search_box.send_keys(Keys.RETURN)

# Remember to close the driver after your session

driver.quit()


결과: 자동으로 아래 창 열리고 자동으로 form 제출됨. 요청이 간 후, gpters를 자동으로 검색함. 헐.. 이게 되다니…



2
2개의 답글

👉 이 게시글도 읽어보세요