인프런 커뮤니티 질문&답변
로그인 후에 무한 스크롤이 안 됩니다.
작성
·
267
0
크림에 크롤링을 응용해 볼려고 접속 후 로그인까지는 성공했는데
그 이후 무한 스크롤 내리는 것이 안 됩니다...
아무래도 로그인하고나서의 브라우저를 인식하지 못하는 거 같은 데 어떻게 해결하면 될까요?
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import csv
# 크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager
import time
import pyautogui
import pyperclip
# 브라우저 꺼짐 방지
Chrome_options = Options()
Chrome_options.add_experimental_option("detach", True)
#불필요한 에러 메시지 없애기
Chrome_options.add_experimental_option("excludeSwitches",["enable-logging"])
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=Chrome_options)
# 웹페이지 해당 주소 이동
driver.implicitly_wait(5) # 웹페이지 로딩 5초는 대기
driver.maximize_window() # 화면 최대화
######################################################
######################################################
#"nike" 브랜드로
driver.get("https://kream.co.kr/brands/nike")
login = driver.find_element(By.CSS_SELECTOR,"#__layout > div > div.gnb > div > div.header_top > div > ul > li:nth-child(5) > a")
login.click()
#아이디 입력창
id = driver.find_element(By.CSS_SELECTOR,"#wrap > div.container.login > div > div > div:nth-child(2) > div")
id.click()
pyperclip.copy("아이디")
pyautogui.keyDown("command")
pyautogui.press("v")
pyautogui.keyUp("command")
time.sleep(2)
#비밀번호 입력창
pw = driver.find_element(By.CSS_SELECTOR,"#wrap > div.container.login > div > div > div:nth-child(3) > div")
pw.click()
pyperclip.copy("비번")
pyautogui.keyDown("command")
pyautogui.press("v")
pyautogui.keyUp("command")
time.sleep(2)
#로그인 버튼 클릭
login_btn = driver.find_element(By.CSS_SELECTOR, '#wrap > div.container.login > div > div > div.login_btn_box > a')
login_btn.click()
#반복문 시작
while True:
# 맨 아래로 스크롤 내린다.
driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END)
# 스크롤 사이 페이지 로딩 시간
time.sleep(1)
# 스크롤 후 높이
after_h = driver.execute_script("return window.scrollY")
if after_h == before_h:
break
before_h = after_h
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
로그인 이후 무한 스크롤이 정상적으로 작동하지 않는 문제는 여러 가지 원인으로 발생할 수 있습니다. 보통은 로그인 상태를 유지하지 못하거나, 페이지의 스크롤 기능이 변동되었을 경우 발생할 수 있습니다.
우선, 로그인 상태를 확인하세요. 세션 또는 쿠키가 제대로 관리되고 있지 않을 수 있습니다. selenium을 사용할 때는 종종 로그인 상태가 유지되지 않는 문제가 발생하는데, 이는 웹드라이버의 세션 관리 방식에 따라 달라질 수 있습니다.
또한, 무한 스크롤을 구현한 웹 사이트는 브라우저의 스크롤 위치에 따라 동적으로 콘텐츠를 로드할 수 있습니다. 스크립트에서 before_h 변수를 선언하지 않아 after_h == before_h 비교 시 오류가 발생할 수 있으므로, before_h 변수를 after_h 변수 선언 전에 초기화 해주셔야 합니다.
이 외에도, 페이지에 추가적인 인증이나 상태 검증을 하는 경우(예: 캡챠, 보안 질문 등), 무한 스크롤 동작이 막힐 수 있으므로 해당 사항도 검토해보시기 바랍니다.
제공해주신 코드에서 수정할 부분은 before_h의 초기화입니다. 다음과 같이 before_h를 루프 시작 전에 0 또는 None으로 초기화하시면 문제를 해결하는 데 도움이 될 것입니다:
# 반복문 시작 전 before_h 초기화하기
before_h = driver.execute_script("return window.scrollY")
# 반복문 시작
while True:
...
위와 같이 변경 후에도 문제가 해결되지 않는다면, 페이지가 로그인 후의 상태 변화에 따른 추가적인 스크롤 매커니즘을 가지고 있는지 확인할 필요가 있습니다. 페이지의 네트워크 통신을 모니터링하거나, JavaScript 코드를 분석하여 무한 스크롤이 구현된 방식을 파악한 뒤 스크립트에 반영해야 할 수도 있습니다.




