작성
·
645
0
진행 중 에러가 나왔습니다.. 해당 부분에서 어떻게 잘못되었는지 파악을 못해서 글 남깁니다..
File "c:\Users\cksth\OneDrive\바탕 화면\Career\크롤링\심화3\09.click.py", line 71, in <module>
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"img.sFlh5c.pT0Scc.iPVvYb"}
(Session info: chrome=119.0.6045.124); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import urllib.request
import time
import pyautogui
import os
# 브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
# 크롬창 안뜨게 함
# chrome_options.add_argument('--headless') # headless 모드 활성화
# chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화
# 불필요 메세지 없애기
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
# 크롬 드라이버 자동 업데이트
browser = webdriver.Chrome(options=chrome_options)
keyword = pyautogui.prompt('검색어를 입력하세요.')
cnt = 0
# 폴더 만들기 (이미 존재하면 += 1)
while True:
cnt += 1
folder_path = f'크롤링/심화3/{keyword}{cnt}모음'
if not os.path.exists(folder_path):
os.mkdir(folder_path)
break
path = f'https://www.google.com/search?q={keyword}&sca_esv=581612012&tbm=isch&sxsrf=AM9HkKnRu6DCGGz23e29xT4BSB7Hq95zgA:1699754235522&source=lnms&sa=X&ved=2ahUKEwiboaf7rb2CAxWJfd4KHWkWA9MQ_AUoAXoECAQQAw&biw=1552&bih=737&dpr=1.65' # 구글
browser.implicitly_wait(3)
browser.maximize_window()
browser.get(path)
before_h = browser.execute_script("return window.scrollY")
# 무한스크롤
while True:
# 맨 아래로 스크롤을 내림
browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END)
time.sleep(5)
# 스크롤 후 높이
after_h = browser.execute_script("return window.scrollY")
# 스크롤 높이가 맨 아래와 같다면 무한루프 탈출
if after_h == before_h:
print('OKOK')
break
# 스크롤 높이 업데이트
before_h = after_h
# 썸네일 이미지 태그 추출
imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd')
for i, img in enumerate(imgs, 1):
# 이미지 클릭 후 큰 사이즈 찾음
# 클릭하면 element click intercepted -> JS 로 직접 클릭 유도
browser.execute_script('arguments[0].click();', img)
time.sleep(1)
# 큰 이미지 주소 추출
target = browser.find_element(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')
img_src = target.get_attribute('src')
# 에러 해결중
# if i == 1:
# target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[0]
# else:
# target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[1]
# img_src = target.get_attribute('src')
# urllib.error.HTTPError: HTTP Error 403: Forbidden 해결방안 3줄
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozila/5.0')]
urllib.request.install_opener(opener)
# 이미지 저장
try:
urllib.request.urlretrieve(img_src, f'크롤링/심화3/{keyword}{cnt}모음/{keyword}{i}.png')
except:
pass
print(f'img {i}개: {target}')
print('\nDvlp.H.Y.C.Sol\nJason')
답변 2
0
0
안녕하세요 찬솔님, 인프런 AI 인턴이에요.
에러 메시지를 보면 selenium에서 NoSuchElementException가 발생한 것으로 보입니다. 해당 에러는 웹 요소를 찾지 못했을 때 발생하는 에러입니다.
에러가 발생한 부분은 다음과 같습니다.
target = browser.find_element(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')
해당 코드에서는 'img.sFlh5c.pT0Scc.iPVvYb'
CSS 선택자로 이미지를 찾고 있지만, 해당 이미지 요소를 찾지 못해서 NoSuchElementException가 발생한 것 같습니다.
에러 해결을 위해 다음과 같은 방법들을 시도해볼 수 있습니다.
1. 해당 이미지 요소의 CSS 선택자가 변경되었을 수 있으므로, CSS 선택자를 다시 확인해보세요.
2. 이미지 요소가 로딩될 때까지 충분한 시간을 기다린 후에 요소를 찾도록 WebDriverWait
을 사용해보세요.
3. NoSuchElementException
가 발생하면 예외 처리를 하거나, 해당 부분을 스킵하도록 코드를 수정해보세요.
위의 방법들을 참고하여 수정해보시고, 계속해서 문제가 발생한다면 더 자세한 내용을 알려주시면 도움을 드리겠습니다. 감사합니다.