미해결
[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
웹 크롤링 대상중 웹에디터(smart_editor2) 안의 텍스트를 크롤링하는 방법
수업을 적용하며 크롤링 연습을 하고 있는데, 웹 크롤링 대상중 웹에디(smart_editor2) 안의 텍스트를 크롤링하는 방법이 궁금합니다.셀레니움을 활용하여 적용하고 있는데 웹에디터는 접근이 잘 안되고 접근이 된것 같은데 텍스트가 출력되지 않습니다 어떠헥 해야 할지 모르겠어서 질의 드려요 외부 접근되지 않는 사이트이고 아이디 비번은 마스킹 처리한 코드는 아래와 같습니다. 결국 아래 부분이 문제인것 같은데 에디터 내 텍스트 추출 방법을 몰라 문의드려요 try:
driver.switch_to.frame("iframe4dummy") # 🔹 iframe 내부로 이동
# 🔹 iframe 내부에서 특정 클래스("se2_inputarea")를 가진 body 태그 찾기
# 🔹 iframe 내부의 `body` 태그에서 텍스트 가져오기
body = driver.find_element(By.CSS_SELECTOR, "body")
answer = body.text.strip()
print("✅ HTML 에디터 내용:", answer)
# 🔹 다시 원래 페이지로 복귀
driver.switch_to.default_content()
except Exception as e:
print("❌ iframe 전환 실패 또는 body 태그를 찾을 수 없습니다:", str(e))
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from urllib.parse import urlencode # URL 파라미터 추가용
import time
import random
import openpyxl
import requests
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
newscralling =[]
import pyautogui
import pyperclip
#크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager
# #브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service = service)
# 웹페이지 해당 주소 주소이동
driver.implicitly_wait(2) #웹페이지가 로딩 될때까지 5초 대기
driver.maximize_window()
driver.get("https://OOO")
#아이디 입력창
id = driver.find_element(By.CSS_SELECTOR, ".submitLogin.text:nth-of-type(1)")
id.click()
pyperclip.copy("id")
pyautogui.hotkey("ctrl", "v")
time.sleep(0.3)
# id.send_keys(Keys.TAB)
# #비밀번호 입력창 직접입력
# time.sleep(7)
pw = driver.find_element(By.CSS_SELECTOR, ".login ul li:nth-of-type(2) input")
pw.click()
# pw.send_keys("비밀번호")
pyperclip.copy("pass")
pyautogui.hotkey("ctrl", "v")
#로그인 버튼
login_btn = driver.find_element(By.CSS_SELECTOR, ".btnLogin")
login_btn.click()
time.sleep(1)
params = {
"counselProcStatus": 2,
"page": 1,
"pageSize": 2
}
#SSL인증 비활성화에 대한 경고메시지 삭제
import urllib3
urllib3.disable_warnings()
qna_list_url = "https://OOO"+ urlencode(params)
driver.get(qna_list_url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select(".boardListStyle table tbody tr")
import openpyxl
from datetime import datetime
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "온라인상담_접수중"
ws.append(["date", "category", "title", "quest", "answer", "man", "status"])
crowling = []
for article in articles:
title = article.select_one(".alignLeft a").text
date = article.select_one(".boardListStyle table tbody td:nth-of-type(4)").text
category = article.select_one(".boardListStyle table tbody td:nth-of-type(2)").text
status = article.select_one(".boardListStyle table tbody td:nth-of-type(7)").text
link = 'https://OOO/'+ article.select_one(".alignLeft a").attrs['href']
title_link = f'=HyPERLINK("{link}", "{title}")'
#상세 페이지 요청
driver.get(link)
time.sleep(2) # 페이지 로딩 대기
detail_html = driver.page_source
detail_soup = BeautifulSoup(detail_html, 'html.parser')
quest = detail_soup.select_one(".con_txt").text
try:
driver.switch_to.frame("iframe4dummy") # 🔹 iframe 내부로 이동
# 🔹 iframe 내부에서 특정 클래스("se2_inputarea")를 가진 body 태그 찾기
# 🔹 iframe 내부의 `body` 태그에서 텍스트 가져오기
body = driver.find_element(By.CSS_SELECTOR, "body")
answer = body.text.strip()
print("✅ HTML 에디터 내용:", answer)
# 🔹 다시 원래 페이지로 복귀
driver.switch_to.default_content()
except Exception as e:
print("❌ iframe 전환 실패 또는 body 태그를 찾을 수 없습니다:", str(e))
#answer = detail_soup.select_one(".se2_input_area.husky_seditor_editing_area_container iframe").text
man = detail_soup.find('th', string="작성자").find_next_sibling().text
crowling = ws.append([date, category, title, quest, answer, man, status])
driver.back() # 브라우저에서 '뒤로 가기' 실행
print(date, category, title, quest, answer, man, status)
now = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"온라인상담_{now}.xlsx"
wb.save(filename)