Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결

Java의 selenium 라이브러리가 Chrome 111.0.5563.64 버전에서 아래와 같은 ConnectionFailedException 에러를 발생하며 동작하지 않는 문제가 있습니다.

크롬 111버전은 2023년 3월 기준 최신 버전이며, 자동 업데이트되면서 대부분의 selenium 툴에서 문제가 발생하는 것 같습니다.

해결 방법을 공유합니다.

org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://localhost:64820/devtools/browser/27cc1ab2-7320-47bf-b503-1099b7052fcc
Build info: version: '4.4.0', revision: 'e5c75ed026a'
System info: host: 'sdg-mac334.local', ip: '2601:681:8004:57a0:0:0:0:5bfc%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '12.1', java.version: '17.0.4.1'
Driver info: driver.version: Driver

문제 발생 코드

아래와 같은 코드로 ChromeDriver()를 생성할 때 크롬 111버전에서 Unable to establish websocket connection 에러가 발생하여 ChromeDriver 객체가 생성되지 않습니다.

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("debuggerAddress", IP_ADDR);
ChromeDriver driver = new ChromeDriver(options);

해결 방법 1

아래와 같이 프로퍼티를 설정하고, 기존에 사용하던 Seleninum 코드를 사용하면 문제가 발생하지 않습니다.

System.setProperty("webdriver.http.factory", "jdk-http-client");

대신 maven에 아래와 같은 의존성이 추가되어야 하며, Java는 11버전 이상을 사용해야하는 것으로 보입니다.

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-http-jdk-client -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-http-jdk-client</artifactId>
    <version>4.5.0</version>
</dependency>

해결 방법 2

다른 방법으로는 "--remote-allow-origins=*"를 argument로 추가하는 것입니다.

ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*")
WebDriver driver = new ChromeDriver(options);

하지만, debuggerAddress와 함께 사용 시, 동작이 되지 않기 때문에 저는 위의 첫번째 방법으로 해결하였습니다.

ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*")
options.setExperimentalOption("debuggerAddress","127.0.0.1:9222");
WebDriver driver = new ChromeDriver(options);

References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha