웹 크롤링: 무한 스크롤 문제 (feat. execute_script)

yeeun lee·2020년 6월 29일
0

코드 1

무한 스크롤을 적용하려고 짠 코드인데, 이상하게 적용이 안 된다. 구글링해보면 다 아래와 같은 방식으로 잘 돌아가는 것 같은데 내 코드에 무슨 문제가 있는걸까?

execute_script

javascript 코드를 실행해주는 함수다. 아래 코드는 페이지에 진입해서 스크롤의 높이를 저장한 뒤에, 스크롤의 크기가 변화하지 않을 때까지 페이지 아래까지 스크롤을 내리는 방식이다.

def scroll_auto():
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        
        time.sleep(1)
        
        new_height = driver.execute_script("return document.body.scrollHeight")
        
        if new_height == last_height:
            break
        last_height = new_height

코드 자체가 됐다 안 됐다 한다는 누군가의 후기를 듣고 일단 코드가 잘못되진 않았다고 정신 승리 해보기로 😟

코드 2

스크롤이 너무 안 먹어서 짜증나던 차에 찾아보니 그냥 페이지 다운을 계속 반복하는 코드도 발견했다. 아래와 같이 css selector로 body를 가져오고, body 객체에 키를 적용하는 메소드를 사용하게 된다.

위의 코드는 잘 안 먹었던 반면, 아래 코드는 잘 적용되었다. 나는 사실 플레이리스트를 스크롤하는 것이기 때문에 무한스크롤의 범위가 크지 않아서 코드 2를 써도 무관하지만, 영상 리스트 같은 경우 무한으로 내려야 하기 때문에 코드 1에 대해 조금 더 고민해봐야겠다.

from selenium.webdriver.common.keys import Keys

def scroll():
    body = driver.find_element_by_css_selector('body')
    for i in range(10):
        body.send_keys(Keys.PAGE_DOWN)
        time.sleep(0.5)
profile
이사간 블로그: yenilee.github.io

0개의 댓글