커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
코드 오류 질문
[왕초보] 칼퇴를 부르는 파이썬 업무 자동화 v0
4주차
북마크
박*연
댓글
1
추천
0
조회수
12
조회수
12
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.



확인 좀 부탁드립니다.






작성한 코드 및 에러 메세지

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()

취소
 공유
취소
댓글 0
댓글 알림
나의얼굴