커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
숙제
[왕초보] 칼퇴를 부르는 파이썬 업무 자동화
기타
북마크
이*희
댓글
3
추천
0
조회수
13
조회수
13
답변 완료

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

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



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

import requests


from io import BytesIO

from openpyxl import Workbook

from openpyxl.drawing.image import Image

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


# 쇼핑 메뉴 클릭하기

driver.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() #쇼핑 탭 클릭

time.sleep(1)


# 새 창으로 전환하기

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_83jy9")

search.click()


# 검색어 입력

search.send_keys("아이폰")

search.send_keys(Keys.ENTER)


### 변경된 부분


# 무한 스크롤 관련 수정 코드

scroll_pause_time = 1

scroll_count = 0

max_scrolls = 1


while scroll_count < max_scrolls:

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    time.sleep(scroll_pause_time)

    scroll_count += 1

    print(scroll_count)


###


# 새 워크북 생성 및 시트 활성화

wb = Workbook()

ws = wb.active

ws.title = '상품 정보'


# 헤더 행 추가

ws.append(['상품명', '가격', '링크', '총 리뷰 수', '이미지'])


# 상품 정보 div

items = driver.find_elements(By.CSS_SELECTOR, ".basicProductCard_basic_product_card__TdrHT.basicProductCard_view_type_grid2__vKr1n")


for item in items:

  # 상품명

  names = item.find_elements(By.CSS_SELECTOR, ".basicProductCardInformation_title__Bc_Ng")

  name = names[0].text if names else "이름 없음"

 

  # 가격 찾기

  prices = item.find_elements(By.CSS_SELECTOR, ".priceTag_inner_price__TctbK")

  price = prices[0].text if prices else "가격 없음"


  # 링크 찾기

  links = item.find_elements(By.CSS_SELECTOR, ".basicProductCardInformation_title__Bc_Ng > a")

  link = links[0].get_attribute('href') if links else "링크 없음"


  # 리뷰 수 찾기

  review_totals = item.find_elements(By.CSS_SELECTOR, ".productCardReview_text__A9N9N")

  review_total = review_totals[0].text if review_totals else "리뷰 없음"


  # 이미지 찾기

  images = item.find_elements(By.CSS_SELECTOR, ".productCardThumbnail_thumbnail__KzO1N > img")

  image = images[0].get_attribute('src') if images else "이미지 없음"

  ws.append([name, price, link, review_total, image])


#  product_info = {

#    '상품명' : name,

#    '가격' : price,

#    '링크' : link,

#    '총 리뷰수' : review_total,

#    '이미지' : image,

#  }


# E열에 해당하는 열 번호 설정

col_num = 5


for row_num, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2):

    img_url = row[col_num-1]  # E열의 이미지 URL

    if img_url:  # 이미지 URL이 있다면

        try:

            response = requests.get(img_url)  # 특정 주소에서 이미지 URL로부터 이미지 다운로드

            img = Image(BytesIO(response.content))  # 이미지 객체 생성

            img.width = 140

            img.height = 140

            cell = ws.cell(row=row_num, column=col_num)

            cell.value = ""  # 기존의 이미지 URL을 비움

            ws.add_image(img, f'E{row_num}')  # 이미지 삽입 위치 지정

            ws.row_dimensions[row_num].height = 140  # 셀 높이 조정

        except Exception as e: # 예외 창이 될 때

            print(f"{e}")


# 배경색 지정

color = PatternFill(start_color='FFA07A', end_color='FFA07A', fill_type='solid')

for row in ws.iter_rows(min_row=1, max_row=1):  # 첫 번째 행에 적용 (데이터 제목 행)

    for cell in row:

        cell.fill = color


# 열 너비 변경

ws.column_dimensions['A'].width = 30

ws.column_dimensions['E'].width = 20


# 수직 가운데 맞춤 설정

for row in ws.iter_rows(min_row=2, max_row=ws.max_row):

    for cell in row:

        cell.alignment = Alignment(vertical="center")


# Excel 파일 저장

excel_file_path = "업무 자동화.xlsx"

wb.save(excel_file_path)


# 웹드라이버 종료

driver.quit()


스파르타 즉문즉답

이미지로 안되요...







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