무한 스크롤을 적용하려고 짠 코드인데, 이상하게 적용이 안 된다. 구글링해보면 다 아래와 같은 방식으로 잘 돌아가는 것 같은데 내 코드에 무슨 문제가 있는걸까?
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
코드 자체가 됐다 안 됐다 한다는 누군가의 후기를 듣고 일단 코드가 잘못되진 않았다고 정신 승리 해보기로 😟
스크롤이 너무 안 먹어서 짜증나던 차에 찾아보니 그냥 페이지 다운을 계속 반복하는 코드도 발견했다. 아래와 같이 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)