작성
·
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()을 빼주니 정상적으로 동작합니다.
감사합니다.
- 스타트코딩 드림.