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

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

초칼라님의 프로필 이미지
초칼라

작성한 질문수

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

GUI의 핵심! 레이아웃 알아보기

셀레니움 headless 옵션 추가시 크롤링 안되는 현상

작성

·

475

0

안녕하세요.

셀레니움으로 개발된 프로그램을 GUI로 감싸서 만들어 보려고 하고 있습니다.

 

  1. 아래 코드에서 크롬 창이 뜨도록 하면 잘 실행되면 elem에 데이터가 들어옴을 확인할 수 있습니다.

image.png

 

  1. 1번을 확인 후 headless 옵션을 주고 실행하면 창은 뜨지 않고 실행되나, 데이터를 가져오지 못합니다.

 

구글링도 해보고, GPT도 물어봤지만 답을 찾을 수 없어서 문의 드리게 되었습니다.

 

확인 부탁드립니다.

 

from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 업데이트을 위한 모듈
from selenium.webdriver.common.by import By
# from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver import ActionChains  # 스크롤시 사용
from selenium.webdriver.support import expected_conditions as EC
import time
from bs4 import BeautifulSoup as bts
import pandas as pd
import os
from datetime import datetime



###################################
# Window 열고, 네이버 지도에서 검색
################################### 
options = webdriver.ChromeOptions()
options.add_argument('headless')

# service = Service(ChromeDriverManager().install())
# driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()

# driver = webdriver.Chrome(ChromeDriverManager().install())

action = ActionChains(driver)

keyword = '서울 강남구 정보통신'
url = f'https://map.naver.com/p/search/{keyword}'
driver.get(url)
# WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="searchIframe"]')))
time.sleep(20)
search_iframe()
elem = driver.find_elements(By.CSS_SELECTOR, '.place_bluelink.C6RjW > span.YwYLL') # 이름
name_list = [e.text for e in elem]
elem

 

 

 

 

답변 2

0

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

headless 모드로 변경하게 되면 AI 인턴이 해준말 대로

페이지에 따라 정보를 가져올 수 없는 경우가 있어요 ㅎㅎ

 

아마도 렌더링 문제지 않을까 싶습니다

0

안녕하세요, 인프런 AI 인턴입니다. 초칼라님의 질문에 관해, 셀레니움을 사용하여 headless 모드로 크롤링을 할 때 데이터를 가져오지 못하는 문제에 대해 도움이 될만한 답변을 안내드리겠습니다.

셀레니움에서 headless 모드를 활용할 때, 일부 웹 페이지가 제대로 로드되지 않거나, 특정 요소가 정상적으로 렌더링되지 않는 경우가 있습니다. 이는 headless 모드에서는 브라우저의 창 크기가 설정되지 않거나 다르게 인식될 수 있기 때문입니다. 따라서, 명시적으로 창 크기를 지정해주는 옵션을 추가해 주는 것이 좋습니다.

예를 들어, 다음과 같이 코드에 window-size 옵션을 추가할 수 있습니다:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080') # 창 크기 명시

아래는 관련한 기존 답변의 일부를 가져온 예시입니다:

이와 같이 창 크기를 지정하면, headless 모드에서도 페이지가 예상대로 로드되어 원하는 데이터를 추출하는 데 도움이 될 수 있습니다. 또한, 페이지 로드를 기다리는 과정에서 time.sleep() 대신에 WebDriverWait를 더 적극적으로 활용하여 동적 페이지의 로드 완료를 기다리는 것이 좋습니다. 이 방법을 통해 원활하게 데이터를 크롤링할 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

초칼라님의 프로필 이미지
초칼라

작성한 질문수

질문하기