Linux

[Ubuntu/Java] Chrome/Selenium 터미널(쉘) 실행 성공한 썰.txt

dev_haha 2024. 1. 19. 18:28

어제 오늘 붙잡고 있던 에러가 해결됐다 룰루

요즘 한창 리눅스 공부중인데 모르는게 산더미라서

하루종일 구글링구글링구글링vscode구글링빙빙돌아가는~~~회전목마처럼~~~~~

에러를 많이 겪을 수록 공부도 되고 경험도 되는게 팍팍 느껴진다. 그리고 해결하는게 재밋땅

 

메이븐이 뭔지 1도 모르던 내가, 우분투 터미널 실행ㅇㅣ 뭔지 1도 모르는 내가

이틀동안 삽질하며 결국 성공한 과정 기록 스타뚜


일단 Maven 프로젝트로 실행하기 전에

클래스 파일을 Run해서 성공하는 것을 목표로 잡음.(부장님 디렉)


초기 샘플 Selenium 실행 파일 (에러잔뜩)

package com.first.mavenapp;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;


public class SeleniumSample {
    private static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
    // /usr/bin/chromedriver
    private static final String WEB_DRIVER_PATH = "/usr/bin/chromedriver";

    public static void main(String[] args) {
        
        System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
		WebDriver driver = new ChromeDriver();
        
        try {
            driver.get("https://www.google.com");

            WebElement searchBox = driver.findElement(By.name("q"));

            searchBox.sendKeys("Selenium");

            searchBox.submit();

            System.out.println("Page title is : " + driver.getTitle());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            driver.quit();
        }
    }

}

 

계속 이거 돌리면서 왜 안되지... 왜 안되지...

ㅎㅎ 

 

에러는 계속

Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: session not created: Chrome failed to start: exited normally. (session not created: DevToolsActivePort file doesn't exist)

SessionNotCreatedException 에러가 났다. (session not created: DevToolsActivePort file dosen't exist)

 

폭풍 구글링 결과 방법2개

1. 지난 포스팅 마지막에 적었듯이 chrome 과 chromedriver 의 버전 맞추기.

 흥 이미 둘의 버전은 120으로 맞춘거였고 뒤의 숫자까지 맞추려고

chrome을 120.0.6099.109-1로 다시 깔아봣지만

효과는 미미햇다!

 

하지만 쉘에서 크롬을 실행하려면

2. ChromeOptions 추가

우분투 터미널로 크롬을 실행하려면 화면이 없기 때문에(GIU..? 라고 하나 암튼 GUI 인지 머시기)

가상화면을 설치하던가

아니면 headless 를 추가하던가

그래서 ChromeOptions를 더 검색해보앗당

package com.first.mavenapp;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;


public class SeleniumSample {
    private static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
    // /usr/bin/chromedriver
    private static final String WEB_DRIVER_PATH = "/usr/bin/chromedriver";

    public static void main(String[] args) {
        
        System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");

        WebDriver driver = new ChromeDriver(options);

        try {
            driver.get("https://www.google.com");

            WebElement searchBox = driver.findElement(By.name("q"));

            searchBox.sendKeys("Selenium");

            searchBox.submit();

            System.out.println("Page title is : " + driver.getTitle());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            driver.quit();
        }
    }

}

쉘에서 크롬을 실행하려면 'headless'옵션을 추가해야 한다. 

 

그랫더니 성공!

gkrud@DESKTOP-HJPVGM2:~$  /usr/bin/env /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -cp /tmp/cp_bwmjhcpkqh92a8ud61ut92iou.jar com.first.mavenapp.SeleniumSample 
Starting ChromeDriver 120.0.6099.109 (3419140ab665596f21b385ce136419fde0924272-refs/branch-heads/6099@{#1483}) on port 23950
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Jan 22, 2024 9:58:26 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Page title is : Selenium - Google 검색

 

 

이제 maven으로 실행해보자.