본문 바로가기

Developer/Troubleshooting

Failed: element not interactable in headless chrome

셀레니움 크롤링을 진행하다보면, 정말 다양한 오류를 만난다.

 

셀레니움 크롬으로 진행하고 있었고, 옵션에서 오류가 발생하는 경우였다.

try:
    path_dir = os.getcwd()
    options = webdriver.ChromeOptions()
    options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
    options.add_argument('--headless')
    options.add_argument("--no-sandbox")
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--start-fullscreen')

    driver = webdriver.Chrome(r'/usr/bin/chromedriver',chrome_options=options)
    driver.set_page_load_timeout(10)

    driver.get('[크롤링 사이트명]')

    driver.find_element_by_xpath('//*[@id="proxylisttable_length"]/label/select').click()
    driver.find_element_by_xpath('//*[@id="proxylisttable_length"]/label/select/option[3]').click()

except Exception as ex:
    print(traceback.format_exc)
    print(ex)

위의 코드로 크롤링을 실행했고, 오류가 났다.

<function format_exc at 0x7fa2cea058c8>
Message: element not interactable
  (Session info: headless chrome=80.0.3987.106)

 

 

우선 해결책을 먼저 적자면,

options.add_argument('--window-size=1920x1080')

크롬 옵션에 window-size 옵션을 추가해주면 된다.

 

 

오류가 발생한 이유를 찾아보니,

option에 headless 조건을 주었기 때문에, 창을 띄울수 없는데,

options.add_argument('--headless')

driver.find_element_by_xpath('//*[@id="proxylisttable_length"]/label/select').click()
driver.find_element_by_xpath('//*[@id="proxylisttable_length"]/label/select/option[3]').click()
            

driver로, click() 이벤트를 주었기 때문이다.

 

따라서, window-size 옵션 한줄이면 해결 가능했다.