작성
·
380
0
안녕하세요.
셀레니움으로 개발된 프로그램을 GUI로 감싸서 만들어 보려고 하고 있습니다.
아래 코드에서 크롬 창이 뜨도록 하면 잘 실행되면 elem에 데이터가 들어옴을 확인할 수 있습니다.
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
0
안녕하세요, 인프런 AI 인턴입니다. 초칼라님의 질문에 관해, 셀레니움을 사용하여 headless 모드로 크롤링을 할 때 데이터를 가져오지 못하는 문제에 대해 도움이 될만한 답변을 안내드리겠습니다.
셀레니움에서 headless 모드를 활용할 때, 일부 웹 페이지가 제대로 로드되지 않거나, 특정 요소가 정상적으로 렌더링되지 않는 경우가 있습니다. 이는 headless 모드에서는 브라우저의 창 크기가 설정되지 않거나 다르게 인식될 수 있기 때문입니다. 따라서, 명시적으로 창 크기를 지정해주는 옵션을 추가해 주는 것이 좋습니다.
예를 들어, 다음과 같이 코드에 window-size
옵션을 추가할 수 있습니다:
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080') # 창 크기 명시
아래는 관련한 기존 답변의 일부를 가져온 예시입니다:
이와 같이 창 크기를 지정하면, headless 모드에서도 페이지가 예상대로 로드되어 원하는 데이터를 추출하는 데 도움이 될 수 있습니다. 또한, 페이지 로드를 기다리는 과정에서 time.sleep()
대신에 WebDriverWait
를 더 적극적으로 활용하여 동적 페이지의 로드 완료를 기다리는 것이 좋습니다. 이 방법을 통해 원활하게 데이터를 크롤링할 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.