작성
·
211
0
구글 코랩에서 코딩하고 있습니다.
크롬 창을 헤드리스로 하고 창이 안 보이게 해놓고 실행시키고 있는데
(헤드리스 안하면 오류가 나더라구요)
base_url = "https://www.google.co.kr/imghp?hl=ko" # 구글 이미지 검색
keyword=input("검색할 키워드를 입력 : ")
# print(type(a))
image_name = input("저장할 이미지 이름 : ")
driver = webdriver.Chrome(options=chrome_options)
driver.get(base_url)
driver.find_element(By.NAME, 'q').send_keys(keyword)
실행시키면
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-85-fb695c1d6e4f> in <cell line: 27>()
25 browser.clear()
26 time.sleep(5)
---> 27 driver.find_element(By.NAME, 'q').send_keys("Hi")
이런 오류가 발생하네요.
신기한 건 저 코드 그대로 했을 때 주피터노트북은 실행되는데
이상하게 코랩에서만 오류가 납니다.
혹시 왜 이런지 알 수 있을가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 답변드리자면, 셀레니움을 사용할 때 발생하는 ElementNotInteractableException
오류는 대상 요소가 사용자 상호 작용을 할 수 없는 상태일 때 발생합니다. 이는 대상 요소가 아직 화면에 나타나지 않았거나, 숨겨져 있거나, 비활성화 상태일 경우에 주로 발생합니다.
구글 코랩에서 헤드리스 모드로 셀레니움을 실행하시는 경우, 요소가 완전히 로드되고 상호작용 가능한 상태가 되기까지 충분한 시간을 기다리지 않아 발생할 수 있습니다. 주피터 노트북에서는 문제가 발생하지 않는다고 하셨는데, 환경 또는 실행 타이밍 차이에서 오는 문제일 수 있습니다.
문제를 해결하기 위해 몇 가지 방법을 시도해볼 수 있습니다:
1. 페이지가 완전히 로드될 때까지 기다리기 위해 time.sleep()
를 사용하실 수 있지만, 이 방법은 비효율적일 수 있습니다.
2. 대신 WebDriverWait
와 expected_conditions
를 사용하여 특정 요소가 상호작용할 준비가 될 때까지 명시적으로 기다리는 것이 좋습니다.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 코드에서 WebDriverWait를 추가함
wait = WebDriverWait(driver, 10) # 10초 동안 기다림
element = wait.until(EC.element_to_be_clickable((By.NAME, 'q')))
element.send_keys(keyword)
이와 같은 방법으로 문제를 해결해보시길 바랍니다. 더 자세한 도움이 필요하시다면, 추가적으로 문의해주시기를 바랍니다.