채널톡 아이콘

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

이상님의 프로필 이미지

작성한 질문수 6

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

IndexError: list index out of range 오류가 뜹니다.

작성

·

1K

0

똑같이 적어서 실행을 했는데, 제 컴퓨터에선

IndexError                                Traceback (most recent call last)
c:\windows\temp/ipykernel_99852/1573255598.py in <module>
     66     # 큰 이미지 주소 추출
     67     if i == 1:
---> 68         target = browser.find_elements_by_css_selector("img.n3VNCb")[0]
     69     else:
     70         target = browser.find_elements_by_css_selector("img.n3VNCb")[1]

IndexError: list index out of range

이렇게 계속 에러가 뜹니다.. 뭐가 잘못된 걸까요?



------------------------------------------------------

 

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

import os

import urllib.request

import pyautogui

 

keyword = pyautogui.prompt("검색어를 입력하세요>>>")

 

if not os.path.exists(f'{keyword}'):

    os.mkdir(f'{keyword}')

url=f"https://www.google.com/search?q={keyword}&rlz=1C1ASRM_enKR736KR736&sxsrf=APq-WBsr3Zy2hTZpd5_ruEiKeetlCYhZUw:1644073269541&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiAstyZ6uj1AhVSZ94KHbp4DjwQ_AUoAXoECAEQAw&biw=1920&bih=979&dpr=1"

 

browser=webdriver.Chrome("D:/python/chromedriver.exe")

browser.implicitly_wait(10)

browser.maximize_window()

browser.get(url)

 

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

    

imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd")

 

i=1

for i, img in enumerate(imgs, 1):

 

    browser.execute_script("arguments[0].click();",img)

    img.click()

    time.sleep(1)

    

    if i == 1:

        target = browser.find_elements_by_css_selector("img.n3VNCb")[0]

    else:

        target = browser.find_elements_by_css_selector("img.n3VNCb")[1]

    img_src = target.get_attribute('src')

 

    # 이미지 다운로드

    # 크롤링 하다보면 http error 403 이 발생함

    opener = urllib.request.build_opener()

    opener.addheaders = [('User-agent', 'Mozila/5.0')]

    urllib.request.install_opener(opener)

    i = i+1

    urllib.request.urlretrieve(img_src,f'{keyword}/{i}.png')

답변 1

0

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

안녕하세요.

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

 

    browser.execute_script("arguments[0].click();",img)

    img.click()

    time.sleep(1)

 

여기서 오류가 있습니다.

자바스크립트로 img를 찾아서 클릭을 했는데, 또다시 img.click()을 하고 있죠.

img.click()을 빼주니 정상적으로 동작합니다.

 

감사합니다.

- 스타트코딩 드림.