인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

jcy4023님의 프로필 이미지
jcy4023

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

웹브라우저 기능 조작 한방에 끝내기

셀레니움 관련 질문입니다.

작성

·

22

1

안녕하세요. 군대에서 정말 잘 듣고있습니다. 아무래도 싸지방이다보니 codespace로 동작시켰는데요.
다름이 아니라 셀레니움 부분을 공부하던 중 어찌저찌해서 driver를 연결까진 했으나, 화면이 뜨지 않아서 질문드립니다.

에러가 나는 것은 아니지만, 아마 GUI가 설정이 안되어있어서 그런 것 같습니다.
어떻게 해야할까요?

 

아래는 driver = webdriver.Chrome()를 codespace에 맞게 변경한 코드이고

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# ChromeDriver 경로 명시
chromedriver_path = "/usr/local/bin/chromedriver"  # ChromeDriver 경로
chrome_path = "/usr/bin/google-chrome"  # Chrome 브라우저 경로 (시스템에 따라 다를 수 있음)

# Chrome 옵션 설정
options = Options()
options.add_argument("--headless")  # GUI 없이 실행
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.binary_location = chrome_path  # Chrome 브라우저 경로 설정

# ChromeDriver 서비스 설정
service = Service(chromedriver_path)

# WebDriver 생성
driver = webdriver.Chrome(service=service, options=options)

아래는 이로인해 나타나는 화면입니다.

image.png


driver.get() 등등의 메소드를 이용하면 title, current_url의 결과로 잘 작동되는 것을 알 수 있습니다.
하지만, 화면이 바뀌지 않아서 문제입니다.

앞에서도 언급했지만, GUI를 codespace에서 설정하는 방법을 알아야할 거 같은데 쉽지 않습니다..
GUI가 없다보니 headless를 설정할 수밖에 없었구요..

답변 1

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

음... 저도 Codespace로 셀레니움을 돌려본적이 없는데
기본적으로 GUI가 제공되지 않는거 같네요..!

 

아래는 GPT o1 모델의 답변인데 마찬가지로 화면이 나오지 않는게 정상이고 headless 모드로만 동작한다고 합니다. 추가적으로 알려준 내용도 적용하기 힘들듯 하구요 불편하시겠지만 headless 모드를 사용하면서, print 명령어로 확인하면서 강의를 듣는것을 추천드려요!

 

😊안녕하세요, 질문 주셔서 감사합니다!😊

Codespace는 기본적으로 GUI 환경(화면을 띄우는 환경)이 제공되지 않아서, Chrome을 headless(화면 없이 동작) 모드로만 사용할 수 있습니다. 따라서 일반적으로 우리가 생각하는 그래픽 창이 뜨지 않는 것이 정상입니다.


1. 왜 화면이 뜨지 않을까?

  • Codespace원격 서버에서 Selenium을 실행하면, 디스플레이(모니터) 같은 GUI 환경이 없기 때문에 그래픽으로 된 브라우저 창을 띄울 수 없습니다.

  • options.add_argument("--headless") 옵션을 넣지 않으면 에러가 날 수 있고, 넣으면 화면이 나오지 않지만 내부적으로 웹페이지를 처리합니다.


2. GUI 환경을 만들려면?

GUI를 원한다면, 아래와 같은 여러 방법이 있습니다.

방법 A. Xvfb(가상 디스플레이) + Selenium

  1. Xvfb라는 가상 디스플레이를 띄워서, 이를 통해 Chrome이 그래픽 창을 사용할 수 있게 합니다.

  2. 이후 VNC(리모트 데스크톱)를 통해 해당 창을 확인할 수도 있습니다.

    • 예:

      sudo apt-get update
      sudo apt-get install xvfb
      Xvfb :99 -screen 0 1280x1024x24 &
      export DISPLAY=:99

      그리고 파이썬에서 Selenium을 구동하면 GUI 모드로 띄울 수 있습니다.

    • 하지만 GitHub Codespace에서는 이 작업이 상당히 번거로울 수 있고, 보안 설정 등으로 인해 실패할 수도 있습니다.

방법 B. PyVirtualDisplay 라이브러리 사용

pyvirtualdisplay 라이브러리를 사용하면, 가상 디스플레이를 좀 더 간편하게 다룰 수 있습니다.

pip install pyvirtualdisplay

from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

with Display(size=(1280, 1024)):
    # 크롬 옵션
    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    
    driver = webdriver.Chrome(options=options)
    driver.get("https://www.google.com")
    # 이 시점에 내부적으로는 GUI 모드로 동작하지만,
    # codespace 상에서 직접 '눈에 보이게' 창이 뜨진 않습니다.
    driver.save_screenshot("test.png")  # 화면 캡처 가능

코드 복사

  • 이렇게 하면 코드상으로는 GUI 모드로 돌지만, 실질적으로 그래픽 창을 직접 볼 순 없고, 대신 스크린샷을 찍어 파일로 확인할 수 있습니다.

방법 C. 로컬 환경에서 직접 실행

  • 군 복무 중이시라 쉽지 않을 수 있지만, 나중에 개인 PCGUI 환경이 있는 서버에서 코드를 실행하시면 Chrome 창이 실제로 뜨는 모습을 보실 수 있습니다.


3. 결론

  • Codespace 환경에서는 원칙적으로 헤드리스 모드 또는 가상 디스플레이(Xvfb/pyvirtualdisplay)를 사용하는 방식이 일반적입니다.

  • 그래픽 창이 실제로 뜨는 것을 직접 ‘눈으로 확인’하려면 로컬 환경이 가장 쉽고, 원격 환경에서는 스크린샷이나 VNC 같은 별도 설정이 필요합니다.

  • 외주나 실무에서도 원격 서버에서 헤드리스로 실행 후 스크린샷을 찍어 검사하는 방식을 자주 씁니다.

따라서 화면이 뜨지 않는 것은 설정이 잘못되었다기보다는, GUI 환경이 없는 원격 서버(Codespace)여서 나타나는 정상적인 현상입니다. 오히려 셀레니움이 정상 작동한다면 문제 없이 크롤링하실 수 있으니, 스크린샷 파일 혹은 테스트를 통한 결과물로 확인하시면 됩니다.

궁금한 점이 있으면 언제든지 말씀해 주세요!
😊군 복무 중에도 열심히 공부하시는 모습 응원합니다!😊

jcy4023님의 프로필 이미지
jcy4023

작성한 질문수

질문하기