Chrome inspect 창에서 selenium headless session이 나오지 않는 문제 해결방법

DoDoBest

·

2023. 6. 23. 15:08

 Selenium headless로 파이썬 스크립트를 실행할 때, NoSuchElementException과 같은 에러로 멈추는 경우가 있다. 이때, chrome://inspect를 이용해서 에러가 발생한 페이지를 살펴볼 수 있다.

 

 

이전에는 종료된 원인이 모든 스크립트가 수행된 이후거나 Exception 일지라도 driver가 종료되지 않았기 때문에, inspect 창에 session 포트를 설정하면 페이지를 볼 수 있었다.

 

 하지만 최근에는 driver가 종료되는 것이 기본값으로 변경된 것 같다. 그래서 예기치 않은 종료 혹은 정상적인 종료 후에 페이지를 확인하고 싶은 경우, 아래와 같이 detach 옵션을 True로 설정해줘야 한다.

 

options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
# options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# options.set_capability("detach", True) # debuggerAddress와 함께 사용
options.add_experimental_option("detach", True)  # debuggerAddress 사용시 InvalidArgumentException 발생

...

driver = webdriver.Chrome(service=service, options=options)

 

debuggerAddress를 이용해서 이미 열린 창을 제어할 경우, set_capability를 이용해서 설정해야 detach가 정상 동작한다. add_experimental_option 사용시 아래와 같은 에러가 발생한다.

 

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: cannot parse capability: goog:chromeOptions
from invalid argument: unrecognized chrome option: detach

 

 debuggerAddress를 이용하지 않는다면, add_experimental_option을 이용해서 설정해야 한다. set_capability를 이용하면 detach 설정이 적용되지 않는다.

 

 driver.close() 명령어를 실행하면, detach 옵션과 무관하게 driver가 종료되기 때문에 session 포트로 페이지를 확인할 수 없다.