인프런 커뮤니티 질문&답변

ljyoung414님의 프로필 이미지
ljyoung414

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 기본편

-

스크롤이 끝까지 내려가지 않습니다!

작성

·

4.2K

0

강의 잘 들었습니다! ㅎㅎ
다름이 아니라 무한 스크롤 코드를 작성하던 중, 스크롤 내리기가 여러 번 반복돼야 끝까지 내려가게 되는데 현재 코드를 그대로 작성하면 한번만 스크롤이 내려가고 멈추는 현상이 발생합니다!
혹시 스크롤 사이 페이지 로딩 시간이 문제인가 싶어 0부터 3까지 모두 넣어봤는데 계속 반복됩니다..
무슨 문제인지 모르겠어요ㅠ
 
항상 강의 깔끔하게 해주셔서 감사합니다!

답변 3

1

# browser.find_element_by_css_selector('body').send_keys(Keys.END)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight);')

코드에 이상은 없는데, body tag 인식을 못한다는 오류가 뜨네요. Keys.END 대체 메소드 올립니다.

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

body태그를 찾기 전에 time.sleep(2) 정도 줘서

로딩하는 시간을 줘보시기 바랍니다 ^^

ljyoung414님의 프로필 이미지
ljyoung414
질문자

감사합니다 ! ㅎㅎ

0

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
browser = webdriver.Chrome(options=options)

url = 'https://www.naver.com/'

browser.get(url)  # 페이지 이동
browser.maximize_window()  # 창 최대화
browser.implicitly_wait(10)  # 로딩이 끝날때까지 10초간 대기(없어도됨)

element = browser.find_element(
    By.CLASS_NAME, 'nav.shop').click()  # 쇼핑몰 버튼을 찾아서 클릭

time.sleep(2)

search = browser.find_element(By.CLASS_NAME, '_searchInput_search_input_QXUFf')
search.click()  # 검색창으로 이동

search.send_keys('아이폰13')  # 검색어 입력
search.send_keys(Keys.ENTER)  # 검색버튼 클릭


 

# 스크롤 높이 가져옴
after_h = browser.execute_script("return document.body.scrollHeight")

while True:
    # 끝까지 스크롤 내리기
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # 대기
    time.sleep(1)

    # 스크롤 내린 후 스크롤 높이 다시 가져옴
    before_h = browser.execute_script("return document.body.scrollHeight")
    if before_h == after_h:
        break
    after_h = before_h

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

안녕하세요.

코딩을 가장 쉽게 알려주는 크리에이터, 스타트코딩입니다.

 

우선 코드에서 오류가 있을 수 있으니 제가 드리는 코드와 비교해 보세요 :)

 

[02_셀레니움_무한스크롤.py]

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 브라우저 생성
browser = webdriver.Chrome('C:/chromedriver.exe')
# mac 의 경우 /User/startcoding/Documents/chromedriver

# 웹사이트 열기
browser.get('https://www.naver.com')
browser.implicitly_wait(10) # 로딩이 끝날 때까지 10초까지는 기다려줌

# 쇼핑 메뉴 클릭
browser.find_element_by_css_selector('a.nav.shop').click()
time.sleep(2)

# 검색창 클릭
search = browser.find_element_by_css_selector('input.co_srh_input._input')
search.click()

# 검색어 입력
search.send_keys('아이폰 13')
search.send_keys(Keys.ENTER)

# 스크롤 전 높이
before_h = browser.execute_script("return window.scrollY")

# 무한 스크롤
while True:
    # 맨 아래로 스크롤을 내린다.
    browser.find_element_by_css_selector("body").send_keys(Keys.END)

    # 스크롤 사이 페이지 로딩 시간
    time.sleep(1)

    # 스크롤 후 높이
    after_h = browser.execute_script("return window.scrollY")
   
    if after_h == before_h:
        break
    before_h = after_h

# 상품 정보 div
items = browser.find_elements_by_css_selector(".basicList_info_area__17Xyo")

for item in items:
    name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
    try:
        price = item.find_element_by_css_selector(".price_num__2WUXn").text
    except:
        price = "판매중단"
    link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href')
    print(name, price, link)
ljyoung414님의 프로필 이미지
ljyoung414
질문자

답변 감사합니다!

코드는 동일합니다. 스크롤이 1회만 실행되고 지속적인 스크롤이 되지 않는 것으로 보입니다.

현재 다른 method를 구글링하여 해결은 했습니다!

ljyoung414님의 프로필 이미지
ljyoung414

작성한 질문수

질문하기