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

HLY님의 프로필 이미지
HLY

작성한 질문수

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

-

선생님, 스크롤이 안됩니다. 도와주세요.

작성

·

447

1

안녕하세요. 아래와 같이 코드를 짰는데 스크롤 하는 부분에서 더이상 진행이 안되는거 같습니다.
스크롤 하는 부분 소스를 봤는데 특이점은 못찾겠습니다.
선생님, 아래 소스 확인 요청 드립니다.
참고로 제 환경은 macOS 환경이고, Chrome 버전 100.0.4896.60 입니다.
물론 webdriver 도 동일 버전으로 맞춰서 하고 있습니다.
 
아래 소스 올려드립니다.
 


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

# 웹브라우저 생성
browser = webdriver.Chrome('/Users/yuheewon/Downloads/chromedriver')

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

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

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

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

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

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

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

# 스크롤 후 높이
after_h = browser.execute_script("return windows.scrollY")

if after_h == before_h :
break

before_h = after_h

# 상품 정보 리스트
# 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
# price = item.find_element_by_css_selector(".price_num__2WUXn").text
# link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute("href")
# print(name, price, link)
 
이렇게 했을때 오류메세지는 아래와 같습니다.
 
/Users/yuheewon/Documents/PythonWorkspace/999_두번째_스터디_자료/03_네이버_쇼핑_크롤링/01_셀레니움_무한스크롤.py:8: DeprecationWarning: executable_path has been deprecated, please pass in a Service object browser = webdriver.Chrome('/Users/yuheewon/Downloads/chromedriver') /Users/yuheewon/Documents/PythonWorkspace/999_두번째_스터디_자료/03_네이버_쇼핑_크롤링/01_셀레니움_무한스크롤.py:15: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead browser.find_element_by_css_selector('a.nav.shop').click() /Users/yuheewon/Documents/PythonWorkspace/999_두번째_스터디_자료/03_네이버_쇼핑_크롤링/01_셀레니움_무한스크롤.py:19: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead search = browser.find_element_by_css_selector('input.co_srh_input._input') Traceback (most recent call last): File "/Users/yuheewon/Documents/PythonWorkspace/999_두번째_스터디_자료/03_네이버_쇼핑_크롤링/01_셀레니움_무한스크롤.py", line 28, in <module> before_h = browser.execute_script("return windows.scrollY") File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 879, in execute_script return self.execute(command, { File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 425, in execute self.error_handler.check_response(response) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.JavascriptException: Message: javascript error: windows is not defined (Session info: chrome=100.0.4896.60) Stacktrace: 0 chromedriver 0x000000010464a3d9 chromedriver + 5104601 1 chromedriver 0x00000001045dabf3 chromedriver + 4647923 2 chromedriver 0x00000001041cbb48 chromedriver + 392008 3 chromedriver 0x00000001041cea87 chromedriver + 404103 4 chromedriver 0x00000001041ce926 chromedriver + 403750 5 chromedriver 0x00000001041cf4ed chromedriver + 406765 6 chromedriver 0x0000000104231cb3 chromedriver + 810163 7 chromedriver 0x000000010421e6c2 chromedriver + 730818 8 chromedriver 0x0000000104231091 chromedriver + 807057 9 chromedriver 0x000000010421e5b3 chromedriver + 730547 10 chromedriver 0x00000001041f4139 chromedriver + 557369 11 chromedriver 0x00000001041f5165 chromedriver + 561509 12 chromedriver 0x000000010460939d chromedriver + 4838301 13 chromedriver 0x0000000104621cde chromedriver + 4938974 14 chromedriver 0x0000000104626b5e chromedriver + 4959070 15 chromedriver 0x000000010462294a chromedriver + 4942154 16 chromedriver 0x00000001045fe33c chromedriver + 4793148 17 chromedriver 0x000000010463c3b8 chromedriver + 5047224 18 chromedriver 0x000000010463c53f chromedriver + 5047615 19 chromedriver 0x0000000104651705 chromedriver + 5134085 20 libsystem_pthread.dylib 0x00007ff8017644e1 _pthread_start + 125 21 libsystem_pthread.dylib 0x00007ff80175ff6b thread_start + 15

답변 1

0

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

아... 선생님, 원인을 찾았습니다.

잠깐 낮잠을 자고 다시  봤더니 보이는게 있네요. ㅎ

결국 오타가 문제였네요.

return windows.scrollY 가 아니라

return window.scrollY 가 맞는거네요. ㅎ

귀찮게 해드려 죄송합니다.

 

 

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

찾고 나서 댓글을 봤네요

오타 잘 찾으셨습니다 ^^

HLY님의 프로필 이미지
HLY

작성한 질문수

질문하기