마케팅 캡틴 - 네이버 블로그 자동 포스팅 기능 개발 사례

소개

시도하고자 했던 것과 그 이유

이전 프로젝트에서 marketing_wizard_extand_collector.py (황금키워드 추출기)를 개발하여 마케팅에 필요한 키워드를 자동으로 수집하는 기능을 완성했습니다.

이번에는 여기서 한 단계 더 나아가 마케팅캡틴_자동로그인미완성버전.py를 기반으로 네이버 블로그 자동 포스팅 기능을 추가 개발했습니다.

프로젝트 흐름:

[황금키워드 추출기] → [블로그 콘텐츠 생성] → [네이버 블로그 자동 포스팅] ← 이번 작업

목표:

  • AI가 생성한 블로그 콘텐츠를 네이버 블로그에 자동으로 업로드

  • 이미지와 텍스트를 함께 포스팅

  • 사용자 개입 최소화 (발행 버튼만 수동)

이유:

  • 황금키워드로 콘텐츠를 생성한 후, 수동으로 블로그에 복사/붙여넣기하는 반복 작업 자동화

  • 키워드 추출 → 콘텐츠 생성 → 포스팅까지 원스톱 마케팅 자동화 파이프라인 구축

진행 방법

사용 도구

  • Claude Code: 코드 분석 및 구현

  • Selenium: 브라우저 자동화

  • Python: tkinter, ttkbootstrap UI

1. 2단계 로그인(2FA) 문제 해결

문제: 네이버 로그인 시 2단계 인증으로 인해 자동 로그인 불가

해결: 쿠키 기반 세션 저장/로드 방식 구현

def save_naver_cookies(self, driver):
    """네이버 쿠키를 파일에 저장"""
    cookies = driver.get_cookies()
    with open("naver_cookies.json", "w") as f:
        json.dump(cookies, f)

def load_naver_cookies(self, driver):
    """저장된 쿠키로 로그인 시도"""
    if os.path.exists("naver_cookies.json"):
        with open("naver_cookies.json", "r") as f:
            cookies = json.load(f)
        for cookie in cookies:
            driver.add_cookie(cookie)
        return True
    return False

결과: 최초 1회만 2FA 인증하면 이후 자동 로그인 가능

2. 이미지 삽입 위치 문제 해결

시도한 방법들:

방법

결과

역순 입력

이미지 없을 때 역순 출력됨 ❌

마커 기반 Ctrl+F 검색

네이버 에디터에서 작동 불안정 ❌

섹션 헤더 기반 검색

복잡하고 불안정 ❌

최종 해결: 텍스트 먼저 전체 입력 → 이미지 순서대로 마지막에 삽입

# Step 1: 본문 텍스트 입력 (마커/프롬프트 제외)
for line in actual_body.split('\n'):
    # 불필요한 패턴 건너뛰기
    if any(pattern in line for pattern in skip_patterns):
        continue
    # 텍스트 입력
    ...

# Step 2: 이미지 순서대로 입력
for img_path in available_images:
    self.upload_blog_image(driver, img_path)

3. 불필요한 텍스트 제거

문제: AI 생성 콘텐츠에 마크다운 형식과 이미지 프롬프트가 포함됨

제거 대상:

skip_patterns = [
    "**[Image Prompt for Nano Banana]**",  # 이미지 마커
    "**[TL;DR Summary]**",                 # 섹션 헤더
    "**[Intro:",                          # 섹션 헤더
    "**[Body 1:",                         # 섹션 헤더
    "**(Line Break)**",                   # 라인 브레이크
    "## 2. Blog Post Body",               # 마크다운 헤더
]

추가 처리: ## 2. Blog Post Body ~ ## 3. Recommended Hashtags 범위만 추출

4. 이미지 생성 기능 개선

요구사항:

  • API 비용 부담으로 전체/개별 생성 선택 가능

  • 이미지 스타일 선택 (3D Pixar, Watercolor 등)

  • 이미지 비율 선택 (16:9, 4:3, 1:1 등)

UI 구현:

[1. Intro]
[이미지 미리보기]
[16:9 ▼] [3D Pixar Style ▼] [재생성] [불러오기]

5. 이미지 비율 문제 (미해결)

문제: 16:9, 4:3 등 다양한 비율을 요청했지만 항상 1280x1280으로 생성됨

원인 추정: 사용 중인 이미지 생성 API의 제한 또는 프롬프트 전달 방식 문제

현재 상태: 추가 조사 필요


6. 기존 이미지 불러오기 기능

구현: 각 섹터별 "불러오기" 버튼 추가

def load_custom_image(self, image_type):
    """사용자 지정 이미지 불러오기"""
    file_path = filedialog.askopenfilename(
        title=f"{image_type.upper()} 이미지 선택",
        filetypes=[("이미지 파일", "*.jpg *.jpeg *.png *.gif *.bmp")]
    )
    if file_path:
        self.step6_custom_images[image_type] = os.path.normpath(file_path)

결과: 사용자가 원하는 이미지를 선택하여 포스팅에 사용 가능

영화 화면을 보여주는 웹페이지의 스크린샷

7. "작성 중인 글이 있습니다" 팝업 처리

문제: 이전 작성 내용이 남아있으면 팝업이 뜨며 진행 중단

해결: "취소" 버튼 자동 클릭

# "작성 중인 글이 있습니다" 팝업 처리
cancel_selectors = [
    "button.cancel",
    "button[class*='cancel']",
    "//button[contains(text(), '취소')]",
]
for selector in cancel_selectors:
    try:
        cancel_btn = driver.find_element(By.CSS_SELECTOR, selector)
        if cancel_btn.is_displayed():
            cancel_btn.click()
            break
    except:
        continue

결과와 배운 점

배운 점과 꿀팁

  1. 네이버 에디터 특성 이해가 중요

    • 이미지 삽입 시 커서 위치가 예측과 다르게 이동

    • Ctrl+F 검색이 브라우저/에디터에서 다르게 동작

  2. 단순한 방법이 최선

    • 복잡한 마커 기반 삽입보다 "텍스트 먼저 → 이미지 나중에" 방식이 안정적

  3. 쿠키 기반 세션 관리

    • 2FA 인증은 쿠키 저장으로 해결 가능

시행착오

시도

문제점

해결

역순 입력

이미지 없을 때 역순 출력

정순 입력으로 변경

Ctrl+F 마커 검색

에디터에서 불안정

마지막에 이미지 삽입

이미지 비율 지정

API에서 무시됨

미해결 (추가 조사 필요)

도움이 필요한 부분

  • 이미지 생성 API에서 비율(aspect ratio)이 적용되지 않는 문제 해결 방법

앞으로의 계획

  1. 이미지 비율 문제 해결

  2. 해시태그 자동 입력 기능 추가

  3. 예약 발행 기능 검토


도움 받은 글

  • Claude Code 활용 가이드

  • [실습 가이드] 마케팅 캡틴: 네이버 블로그 자동 포스팅 기능 정복하기(박카스님)

2
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요