programming/python

[python] selenium 이용한 element 접근으로 네이버 쇼핑 상품 접속하기

labj 2024. 4. 9. 14:57

python selenium 이용한 element 접근으로 네이버 쇼핑 상품 접속하기
이번껀 마우스포인트를 이동하여 클릭하는 것이 아닌 코드를 이용하여 웹브라우저를 제어한 것입니다. chromedriver에 python의 selenium을 이용하니 원하는 페이지로 자동으로 이동하는 것이 쉬워집니다.

다음 순서로 프로그램을 짰습니다.
-  네이버 홈페이지 접속 
-  검색 창 element 정보 가져오기 
-  검색어 입력하기
-  enter 치기
-  검색어에 맞는 a  tag 찾고 click 이벤트 (새탭이 열림)
-  네이버 검색한 탭  닫기
-  남은 탭을 driver로 사용함
-  상세정보 탭까지 스크롤로 내려가기 
-  상세정보[1], 리뷰[2], Q&A[3], 반품교환정보[4] 탭에서 Q&A[3]탭을 클릭함
-  상세정보[1], 리뷰[2], Q&A[3], 반품교환정보[4] 탭에서 상세정보[1]탭을 클릭함
-  페이지 높이를 구함
-  상세정보 펼쳐보기 버튼 보일때까지 스크롤 이동
-  상세정보 펼쳐보기
-  다시 페이지 높이를 구함
-  제일 아래로 내려갑니다.
-  컬러사이즈 select box 위치로 올라갑니다.
-  컬러 선택
-  모카 베이지 선택
-  사이즈  선택
-  사이즈  항목 선택
-  제일 위로 올라가기 
-  네이버 검색으로 돌아가기

 

import time
import requests
from time import sleep
import re, requests, csv
from bs4 import BeautifulSoup as bs
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import chromedriver_autoinstaller
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

# 네이버 홈페이지 접속
driver.maximize_window()
driver.get("https://www.naver.com/")

time.sleep(3)	

# 검색 창 element 정보 가져오기 
search_box = driver.find_element(By.ID, "query")

# 검색어 입력하기
keyword = "프리미엄 알러지케어 침대패드";
search_box.send_keys(keyword)

# enter 치기
search_box.send_keys(Keys.ENTER)

#print("title = " + driver.title)
#print("url = " + driver.current_url)
#print("handle = " + driver.current_window_handle)

time.sleep(3)

# 검색어에 맞는 a  tag 찾고 click 이벤트 -> 새탭이 열림
driver .find_element(By.XPATH, "//a[contains(text(), '" + keyword + "')]").click()

time.sleep(2)

# 네이버 검색한 탭  닫기
driver.close();

# 남은 탭을 driver로 사용함
first_tab = driver.window_handles[0]
driver.switch_to.window(window_name=first_tab)

#print("title = " + driver.title)
#print("url = " + driver.current_url)
#print("handle = " + driver.current_window_handle)

time.sleep(2)

# 상세정보 탭까지 스크롤로 내려가기 
for i in range(1, 1300, 100):
    driver.execute_script("window.scrollTo(0, " + str(i) + ")")
    print('-' + str(i))
    time.sleep(0.5)

#상세정보[1], 리뷰[2], Q&A[3], 반품교환정보[4] 탭에서 Q&A[3]탭을 클릭함
search_box = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[3]/div[3]/ul/li[3]/a')
search_box.click()
time.sleep(2)

#print("title = " + driver.title)
#print("url = " + driver.current_url)
#print("handle = " + driver.current_window_handle)

#상세정보[1], 리뷰[2], Q&A[3], 반품교환정보[4] 탭에서 상세정보[1]탭을 클릭함
search_box = driver.find_element(By.XPATH, '//*[@id="_productFloatingTab"]/div/div[3]/ul/li[1]/a')
search_box.click()
time.sleep(2)

#driver.execute_script("window.scrollTo(0, 700)")
#time.sleep(1.5)

# 페이지 높이를 구함
last_height = driver.execute_script("return document.body.scrollHeight")
#print(last_height)

# 상세정보 펼쳐보기 버튼 보일때까지 스크롤 이동
for i in range(1700, 3500, 100):
    driver.execute_script("window.scrollTo(0, " + str(i) + ")")
    #print('-' + str(i))
    time.sleep(0.5)

# 상세정보 펼쳐보기
search_box = driver.find_element(By.XPATH, '//*[@id="INTRODUCE"]/div/div[3]/button')
search_box.click()
time.sleep(2)


# 다시 페이지 높이를 구함
last_height = driver.execute_script("return document.body.scrollHeight")
#print(last_height)

#  제일 아래로 내려갑니다.
for i in range(1700, last_height, 300):
    driver.execute_script("window.scrollTo(0, " + str(i) + ")")
    #print('-' + str(i))
    time.sleep(0.5)


# 컬러사이즈 select box 위치로 올라갑니다.
for i in range(last_height, 500, -300):
    driver.execute_script("window.scrollTo(0, " + str(i) + ")")
    #print('-' + str(i))
    time.sleep(0.2)

# 컬러 선택
search_box = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[2]/div[2]/fieldset/div[5]/div[1]/a')
search_box.click()
time.sleep(2)

# 모카 베이지 선택
search_box = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[2]/div[2]/fieldset/div[5]/div[1]/ul/li[2]/a')
search_box.click()
time.sleep(2)

# 사이즈  선택
search_box = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[2]/div[2]/fieldset/div[5]/div[2]/a')
search_box.click()
time.sleep(2)

# 사이즈  항목 선택
search_box = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[2]/div[2]/fieldset/div[5]/div[2]/ul/li[1]/a')
search_box.click()
time.sleep(2)

# 제일 위로 올라가기 
for i in range(900, -500, -100):
    driver.execute_script("window.scrollTo(0, " + str(i) + ")")
    time.sleep(0.2)

# 네이버 검색으로 돌아가기 
search_box = driver.find_element(By.XPATH, '//*[@id="header"]/div/div[1]/div[1]/a[1]')
search_box.click()
time.sleep(2)

 

'programming > python' 카테고리의 다른 글

[파이썬] chatgpt에서 받은 응답의 데이터형 확인  (0) 2024.03.11
[파이썬] 데이터 구분  (0) 2024.03.11