
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
확인 좀 부탁드립니다.


작성한 코드 및 에러 메세지
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
from openpyxl import load_workbook, Workbook
from openpyxl.drawing.image import Image
import requests
from io import BytesIO
from openpyxl.styles import PatternFill, Alignment
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=chrome_options)
# 웹 사이트 열기
driver.get('https://www.naver.com')
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() # 쇼핑 탭 클릭
time.sleep(2)
# 쇼핑 창이 뜨는데, 그 창으로 이동
new_window = driver.window_handles[1]
driver.switch_to.window(new_window)
driver.maximize_window()
search = driver.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_3CUDs")
search.click()
search.send_keys("후드티")
search.send_keys(Keys.ENTER)
before_h = driver.execute_script("return window.scrollY")
while True:
driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) # 스크롤 내리기 위해 END 키 누름
time.sleep(1)
after_h = driver.execute_script("return window.scrollY") # 이동하고 나서 스크롤 위치
if after_h == before_h: # 만약에 옮기기 전과 후의 스크롤 위치가 동일하다면(끝까지 다 내렸다면.)
break
before_h = after_h
# 새 워크북 생성
wb = Workbook()
ws = wb.active
ws.title = "상품 정보"
# 헤더 행 추가
ws.append(['상품명','가격','링크','총 리뷰 수','이미지'])
items = driver.find_elements(By.CSS_SELECTOR, ".product_item__MDtDF")
for item in items:
# 상품명
names = item.find_elements(By.CSS_SELECTOR, ".product_title__Mmw2K")
name = names[0].text if names else "이름 없음"
# 가격 찾기
prices = item.find_elements(By.CSS_SELECTOR, ".price_num__S2p_v")
price = prices[0].text if prices else "가격 없음"
# 링크 찾기
links = item.find_elements(By.CSS_SELECTOR, ".product_title__Mmw2K > a")
link = links[0].text if links else "링크 없음"
# 리뷰 수 찾기
review_totals = item.find_elements(By.CSS_SELECTOR, ".product_num__fafe5")
review_total = review_totals[0].text if review_totals else "리뷰 없음"
# 이미지 찾기
images = item.find_elements(By.CSS_SELECTOR, '.thumbnail_thumb__Bxb6Z > img')
image = images[0].get_attribute('src') if images else "이미지 없음"
ws.append([name, price, link, review_total, image])
col_num = 5
for row_num, row in enumerate(ws.iter_rows(min_row=2, values_only=True)):
img_url = row[col_num-1] # 이미지 url
if img_url:
try:
response = requests.get(img_url)
img = image(BytesIO(response.content))
img.width = 140
img.height = 140
cell = ws.cell(row=row_num, column=col_num)
cell.value = ""
ws.add_image(img, f'E{row_num}')
ws.row_dimensions[row_num].height = 140
# 2번째 문제 // skip
except Exception as e:
print(f"{e}")
# 배경색 지정
color = PatternFill(start_color="808080", end_color="808080", fill_type ='solid') # 색상마다 고유의 rgb a 값 #000000 로 나옴
for row in ws.iter_rows(min_row=1,max_row=1): # 첫번째 줄만 색칠
for cell in row:
cell.fill = color
excel_file_path = "상품 정보.xlsx"
wb.save(excel_file_path)
driver.quit()
product_info = {
'상품명': name,
'가격': price,
'링크': link,
'총 리뷰 수': review_total,
'이미지': image,
}
print(product_info)
driver.quit()
