[DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9004:20260613220016 [PIPELINE RUN START] run_id=75, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=42 realtor_id=3 article_no=2630560969 sort_at=2026-06-13 16:01:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=42, realtor_id=3, draft_id=42, article_no=2630560969 [DRAFT HTML CHECK] clipboard_len=10136, draft_len=10136, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=42, draft_id=42, article_no=2630560969 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_3.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_04_2630560969_1781334251.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 9760 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_42_2630560969_after_paste_20260613_220056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_42_2630560969_after_paste_20260613_220056.txt [EDITOR DEBUG LEN] html= 131914 text= 2215 [EDITOR VALIDATE] html_len=131914 text_len=2215 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224315037536 [RESULT URL CHECK] https://blog.naver.com/animone/224315037536 [PRIVATE QUEUE NONE] realtor_id=3 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=42 blog_id=animone blog_post_no=224315037536 url=https://blog.naver.com/animone/224315037536 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224315037536 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224315037536 [PUBLISH ELAPSED] queue_id=42 elapsed=59.3s avg=59.3s [SMART SLEEP CALC] remaining_seconds=34123 remaining_count=1 target_cycle=34123.0 avg_publish=59.3 base_sleep=34063.7 range=17031~17031 selected=17031 [SLEEP] 17031s before next queue [PUBLISH TARGET SELECTED] queue_id=41 realtor_id=2 article_no=2631961899 sort_at=2026-06-13 16:01:03 today_published_count=0 ================================================================================ [QUEUE START] queue_id=41, realtor_id=2, draft_id=41, article_no=2631961899 [DRAFT HTML CHECK] clipboard_len=13600, draft_len=13600, plain_len=512 ================================================================================ [INTEGRITY OK] queue_id=41, draft_id=41, article_no=2631961899 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=2 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FINAL URL] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k4811582k&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=19&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 346, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_07_2631961899_1781334248.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13224 plain_len= 512 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_41_2631961899_after_paste_20260614_024555.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_41_2631961899_after_paste_20260614_024555.txt [EDITOR DEBUG LEN] html= 151160 text= 2147 [EDITOR VALIDATE] html_len=151160 text_len=2147 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k4811582k/224315183444 [RESULT URL CHECK] https://blog.naver.com/k4811582k/224315183444 [PRIVATE QUEUE NONE] realtor_id=2 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=41 blog_id=k4811582k blog_post_no=224315183444 url=https://blog.naver.com/k4811582k/224315183444 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k4811582k/224315183444 [BLOG RESULT PARSED] blog_id=k4811582k blog_post_no=224315183444 [PUBLISH ELAPSED] queue_id=41 elapsed=63.5s avg=61.4s [SMART SLEEP CALC] remaining_seconds=17025 remaining_count=1 target_cycle=17025.0 avg_publish=61.4 base_sleep=16963.6 range=8481~8481 selected=8481 [SLEEP] 8481s before next queue [PUBLISH TARGET SELECTED] queue_id=40 realtor_id=1 article_no=2631676097 sort_at=2026-06-12 10:06:43 today_published_count=0 ================================================================================ [QUEUE START] queue_id=40, realtor_id=1, draft_id=40, article_no=2631676097 [DRAFT HTML CHECK] clipboard_len=6768, draft_len=6768, plain_len=513 ================================================================================ [INTEGRITY OK] queue_id=40, draft_id=40, article_no=2631676097 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_02_2631676097_1781334245.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 6392 plain_len= 513 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 2 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_40_2631676097_after_paste_20260614_050817.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_40_2631676097_after_paste_20260614_050817.txt [EDITOR DEBUG LEN] html= 110353 text= 1818 [EDITOR VALIDATE] html_len=110353 text_len=1818 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224315218640 [RESULT URL CHECK] https://blog.naver.com/animone/224315218640 [PRIVATE QUEUE NONE] realtor_id=1 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=40 blog_id=animone blog_post_no=224315218640 url=https://blog.naver.com/animone/224315218640 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224315218640 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224315218640 [PUBLISH ELAPSED] queue_id=40 elapsed=60.2s avg=61.0s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 2, 3] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=75, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-13 22:00:16] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-14 05:08:36] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1648:20260614220007 [PIPELINE RUN START] run_id=97, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=45 realtor_id=3 article_no=2630641918 sort_at=2026-06-13 16:01:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=45, realtor_id=3, draft_id=45, article_no=2630641918 [DRAFT HTML CHECK] clipboard_len=11759, draft_len=11759, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=45, draft_id=45, article_no=2630641918 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_3.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2630641918_1781391679.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 11381 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_45_2630641918_after_paste_20260614_220047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_45_2630641918_after_paste_20260614_220047.txt [EDITOR DEBUG LEN] html= 140947 text= 2167 [EDITOR VALIDATE] html_len=140947 text_len=2167 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224315781102 [RESULT URL CHECK] https://blog.naver.com/animone/224315781102 [PRIVATE QUEUE COUNT] realtor_id=3 count=1 [PRIVATE START] private_queue_id=1 realtor_id=3 article_no=2630560969 blog_id=animone blog_post_no=224315037536 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315037536 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=1 article_no=2630560969 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=45 blog_id=animone blog_post_no=224315781102 url=https://blog.naver.com/animone/224315781102 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224315781102 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224315781102 [PUBLISH ELAPSED] queue_id=45 elapsed=96.8s avg=96.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[3] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=1 [PIPELINE RUN FINISH] run_id=97, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-14 22:00:07] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-14 22:01:45] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2288:20260615220000 [PIPELINE RUN START] run_id=114, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=71 realtor_id=4 article_no=2631359593 sort_at=2026-06-15 16:01:30 today_published_count=0 ================================================================================ [QUEUE START] queue_id=71, realtor_id=4, draft_id=74, article_no=2631359593 [DRAFT HTML CHECK] clipboard_len=7950, draft_len=7950, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=71, draft_id=74, article_no=2631359593 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_02_2631359593_1781506946.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 7574 plain_len= 528 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_71_2631359593_after_paste_20260615_220041.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_71_2631359593_after_paste_20260615_220041.txt [EDITOR DEBUG LEN] html= 118527 text= 2001 [EDITOR VALIDATE] html_len=118527 text_len=2001 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224316909632 [RESULT URL CHECK] https://blog.naver.com/pjy287/224316909632 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=74 blog_id=pjy287 blog_post_no=224316909632 url=https://blog.naver.com/pjy287/224316909632 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224316909632 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224316909632 [PUBLISH ELAPSED] queue_id=71 elapsed=59.0s avg=59.0s [SMART SLEEP CALC] remaining_seconds=34139 remaining_count=3 target_cycle=11379.7 avg_publish=59.0 base_sleep=11320.6 range=5660~5660 selected=5660 [SLEEP] 5660s before next queue [PUBLISH TARGET SELECTED] queue_id=70 realtor_id=3 article_no=2632322145 sort_at=2026-06-15 16:01:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=70, realtor_id=3, draft_id=73, article_no=2632322145 [DRAFT HTML CHECK] clipboard_len=8523, draft_len=8523, plain_len=513 ================================================================================ [INTEGRITY OK] queue_id=70, draft_id=73, article_no=2632322145 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_3.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=3 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_3.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_06_2632322145_1781506943.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 8140 plain_len= 513 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_70_2632322145_after_paste_20260615_233609.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_70_2632322145_after_paste_20260615_233609.txt [EDITOR DEBUG LEN] html= 123091 text= 2162 [EDITOR VALIDATE] html_len=123091 text_len=2162 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224316988547 [RESULT URL CHECK] https://blog.naver.com/animone/224316988547 [PRIVATE QUEUE COUNT] realtor_id=3 count=1 [PRIVATE START] private_queue_id=12 realtor_id=3 article_no=2630641918 blog_id=animone blog_post_no=224315781102 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315781102 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=12 article_no=2630641918 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=73 blog_id=animone blog_post_no=224316988547 url=https://blog.naver.com/animone/224316988547 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224316988547 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224316988547 [PUBLISH ELAPSED] queue_id=70 elapsed=101.1s avg=80.0s [SMART SLEEP CALC] remaining_seconds=28373 remaining_count=2 target_cycle=14186.5 avg_publish=80.0 base_sleep=14106.5 range=7053~7053 selected=7053 [SLEEP] 7053s before next queue [PUBLISH TARGET SELECTED] queue_id=69 realtor_id=2 article_no=2632068653 sort_at=2026-06-15 16:01:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=69, realtor_id=2, draft_id=72, article_no=2632068653 [DRAFT HTML CHECK] clipboard_len=7891, draft_len=7891, plain_len=521 ================================================================================ [INTEGRITY OK] queue_id=69, draft_id=72, article_no=2632068653 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=2 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FINAL URL] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k4811582k&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=19&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 346, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_03_2632068653_1781506939.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 7514 plain_len= 521 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_69_2632068653_after_paste_20260616_013522.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_69_2632068653_after_paste_20260616_013522.txt [EDITOR DEBUG LEN] html= 114952 text= 2187 [EDITOR VALIDATE] html_len=114952 text_len=2187 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k4811582k/224317059750 [RESULT URL CHECK] https://blog.naver.com/k4811582k/224317059750 [PRIVATE QUEUE COUNT] realtor_id=2 count=1 [PRIVATE START] private_queue_id=2 realtor_id=2 article_no=2631961899 blog_id=k4811582k blog_post_no=224315183444 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=k4811582k&logNo=224315183444 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=2 article_no=2631961899 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=72 blog_id=k4811582k blog_post_no=224317059750 url=https://blog.naver.com/k4811582k/224317059750 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k4811582k/224317059750 [BLOG RESULT PARSED] blog_id=k4811582k blog_post_no=224317059750 [PUBLISH ELAPSED] queue_id=69 elapsed=100.1s avg=86.7s [SMART SLEEP CALC] remaining_seconds=21220 remaining_count=3 target_cycle=7073.3 avg_publish=86.7 base_sleep=6986.6 range=3493~3493 selected=3493 [SLEEP] 3493s before next queue [PUBLISH TARGET SELECTED] queue_id=46 realtor_id=1 article_no=2631678155 sort_at=2026-06-12 09:16:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=46, realtor_id=1, draft_id=47, article_no=2631678155 [DRAFT HTML CHECK] clipboard_len=12406, draft_len=12406, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=46, draft_id=47, article_no=2631678155 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_DARK_REC_PHOTO_LAYOUT_03_2631678155_1781406073.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12031 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_46_2631678155_after_paste_20260616_023515.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_46_2631678155_after_paste_20260616_023515.txt [EDITOR DEBUG LEN] html= 146580 text= 2299 [EDITOR VALIDATE] html_len=146580 text_len=2299 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224317084521 [RESULT URL CHECK] https://blog.naver.com/animone/224317084521 [PRIVATE QUEUE COUNT] realtor_id=1 count=2 [PRIVATE START] private_queue_id=4 realtor_id=1 article_no=2628430285 blog_id=animone blog_post_no=224314586780 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224314586780 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=4 article_no=2628430285 [PRIVATE START] private_queue_id=5 realtor_id=1 article_no=2631676097 blog_id=animone blog_post_no=224315218640 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=animone&logNo=224315218640 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=5 article_no=2631676097 [PRIVATE QUEUE RESULT] {'processed': 2, 'success': 2, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=47 blog_id=animone blog_post_no=224317084521 url=https://blog.naver.com/animone/224317084521 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224317084521 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224317084521 [PUBLISH ELAPSED] queue_id=46 elapsed=137.7s avg=99.5s [SMART SLEEP CALC] remaining_seconds=17589 remaining_count=2 target_cycle=8794.5 avg_publish=99.5 base_sleep=8695.0 range=4347~4347 selected=4347 [SLEEP] 4347s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 2, 3, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=2 private_pending=0 [PIPELINE RUN FINISH] run_id=114, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 4 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-15 22:00:00] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-16 03:49:17] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:16812:20260616220008 [PIPELINE RUN START] run_id=168, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=84 realtor_id=4 article_no=2632571003 sort_at=2026-06-16 18:48:08 today_published_count=0 ================================================================================ [QUEUE START] queue_id=84, realtor_id=4, draft_id=117, article_no=2632571003 [DRAFT HTML CHECK] clipboard_len=19078, draft_len=19078, plain_len=531 ================================================================================ [INTEGRITY OK] queue_id=84, draft_id=117, article_no=2632571003 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_04_2632571003_1781603312.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18700 plain_len= 531 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_84_2632571003_after_paste_20260616_220047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_84_2632571003_after_paste_20260616_220047.txt [EDITOR DEBUG LEN] html= 190793 text= 2873 [EDITOR VALIDATE] html_len=190793 text_len=2873 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224318069364 [RESULT URL CHECK] https://blog.naver.com/pjy287/224318069364 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=117 blog_id=pjy287 blog_post_no=224318069364 url=https://blog.naver.com/pjy287/224318069364 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224318069364 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224318069364 [PUBLISH ELAPSED] queue_id=84 elapsed=57.4s avg=57.4s [SMART SLEEP CALC] remaining_seconds=34133 remaining_count=1 target_cycle=34133.0 avg_publish=57.4 base_sleep=34075.6 range=17037~17037 selected=17037 [SLEEP] 17037s before next queue [PUBLISH TARGET SELECTED] queue_id=82 realtor_id=3 article_no=2632533071 sort_at=2026-06-16 16:01:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=82, realtor_id=3, draft_id=101, article_no=2632533071 [DRAFT HTML CHECK] clipboard_len=16115, draft_len=16115, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=82, draft_id=101, article_no=2632533071 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_3.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/justjooit [WAIT EDITOR] 1/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 2/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 3/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 4/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 5/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 6/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 7/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 8/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 9/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 10/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 11/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 12/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 13/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 14/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 15/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 16/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 17/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 18/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 19/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 20/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 21/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 22/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 23/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 24/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 25/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 26/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 27/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 28/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 29/30 url=https://blog.naver.com/justjooit [WAIT EDITOR] 30/30 url=https://blog.naver.com/justjooit [WRITE FINAL URL] https://blog.naver.com/justjooit [WRITE HOLD] [WRITE_HOLD] realtor_id=3 / 글쓰기 iframe 미발견 / 최종 URL: https://blog.naver.com/justjooit [PUBLISH ELAPSED] queue_id=82 elapsed=35.5s avg=46.5s [SMART SLEEP CALC] remaining_seconds=17056 remaining_count=4 target_cycle=4264.0 avg_publish=46.5 base_sleep=4217.5 range=2108~2108 selected=2108 [SLEEP] 2108s before next queue [PUBLISH TARGET SELECTED] queue_id=81 realtor_id=2 article_no=2632527990 sort_at=2026-06-16 16:00:51 today_published_count=0 ================================================================================ [QUEUE START] queue_id=81, realtor_id=2, draft_id=100, article_no=2632527990 [DRAFT HTML CHECK] clipboard_len=19868, draft_len=19868, plain_len=531 ================================================================================ [INTEGRITY OK] queue_id=81, draft_id=100, article_no=2632527990 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=2 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FINAL URL] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k4811582k&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=19&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 346, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2632527990_1781593307.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19490 plain_len= 531 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_81_2632527990_after_paste_20260617_032134.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_81_2632527990_after_paste_20260617_032134.txt [EDITOR DEBUG LEN] html= 195801 text= 3015 [EDITOR VALIDATE] html_len=195801 text_len=3015 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k4811582k/224318261905 [RESULT URL CHECK] https://blog.naver.com/k4811582k/224318261905 [PRIVATE QUEUE NONE] realtor_id=2 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=100 blog_id=k4811582k blog_post_no=224318261905 url=https://blog.naver.com/k4811582k/224318261905 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k4811582k/224318261905 [BLOG RESULT PARSED] blog_id=k4811582k blog_post_no=224318261905 [PUBLISH ELAPSED] queue_id=81 elapsed=62.2s avg=51.7s [SMART SLEEP CALC] remaining_seconds=14886 remaining_count=3 target_cycle=4962.0 avg_publish=51.7 base_sleep=4910.3 range=2455~2455 selected=2455 [SLEEP] 2455s before next queue [PUBLISH TARGET SELECTED] queue_id=43 realtor_id=1 article_no=2631703943 sort_at=2026-06-12 09:16:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=43, realtor_id=1, draft_id=43, article_no=2631703943 [DRAFT HTML CHECK] clipboard_len=7583, draft_len=7583, plain_len=540 ================================================================================ [INTEGRITY OK] queue_id=43, draft_id=43, article_no=2631703943 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_04_2631703943_1781391674.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 7205 plain_len= 540 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_43_2631703943_after_paste_20260617_040332.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_43_2631703943_after_paste_20260617_040332.txt [EDITOR DEBUG LEN] html= 114662 text= 1892 [EDITOR VALIDATE] html_len=114662 text_len=1892 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224318276777 [RESULT URL CHECK] https://blog.naver.com/animone/224318276777 [PRIVATE QUEUE NONE] realtor_id=1 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=43 blog_id=animone blog_post_no=224318276777 url=https://blog.naver.com/animone/224318276777 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224318276777 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224318276777 [PUBLISH ELAPSED] queue_id=43 elapsed=62.5s avg=54.4s [SMART SLEEP CALC] remaining_seconds=12368 remaining_count=2 target_cycle=6184.0 avg_publish=54.4 base_sleep=6129.6 range=3064~3064 selected=3064 [SLEEP] 3064s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 2, 3, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=2 private_pending=0 [PIPELINE RUN FINISH] run_id=168, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 3 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-16 22:00:08] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-17 04:54:55] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2528:20260617220016 [PIPELINE RUN START] run_id=231, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=100 realtor_id=6 article_no=2632630691 sort_at=2026-06-17 16:02:10 today_published_count=0 ================================================================================ [QUEUE START] queue_id=100, realtor_id=6, draft_id=156, article_no=2632630691 [DRAFT HTML CHECK] clipboard_len=16267, draft_len=16267, plain_len=537 ================================================================================ [INTEGRITY OK] queue_id=100, draft_id=156, article_no=2632630691 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_06_2632630691_1781689058.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15889 plain_len= 537 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_100_2632630691_after_paste_20260617_220054.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_100_2632630691_after_paste_20260617_220054.txt [EDITOR DEBUG LEN] html= 171916 text= 2859 [EDITOR VALIDATE] html_len=171916 text_len=2859 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=305 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=61 remain=244 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=123 remain=182 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=182 remain=123 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=251 remain=54 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=286 remain=19 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=305 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=305 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224319173047 [RESULT URL CHECK] https://blog.naver.com/efg5254/224319173047 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=156 blog_id=efg5254 blog_post_no=224319173047 url=https://blog.naver.com/efg5254/224319173047 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224319173047 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224319173047 [PUBLISH ELAPSED] queue_id=100 elapsed=362.1s avg=362.1s [SMART SLEEP CALC] remaining_seconds=33820 remaining_count=1 target_cycle=33820.0 avg_publish=362.1 base_sleep=33457.9 range=16728~16728 selected=16728 [SLEEP] 16728s before next queue [PUBLISH TARGET SELECTED] queue_id=97 realtor_id=2 article_no=2632355480 sort_at=2026-06-17 16:01:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=97, realtor_id=2, draft_id=153, article_no=2632355480 [DRAFT HTML CHECK] clipboard_len=19476, draft_len=19476, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=97, draft_id=153, article_no=2632355480 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=2 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_2.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FINAL URL] https://blog.naver.com/k4811582k?Redirect=Write&categoryNo=19 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k4811582k&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=19&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 346, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2632355480_1781689559.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19098 plain_len= 563 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_97_2632355480_after_paste_20260618_024552.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_97_2632355480_after_paste_20260618_024552.txt [EDITOR DEBUG LEN] html= 189985 text= 2960 [EDITOR VALIDATE] html_len=189985 text_len=2960 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=351 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=47 remain=304 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=112 remain=239 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=156 remain=195 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=226 remain=125 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=289 remain=62 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=351 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=351 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k4811582k/224319345297 [RESULT URL CHECK] https://blog.naver.com/k4811582k/224319345297 [PRIVATE QUEUE NONE] realtor_id=2 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=153 blog_id=k4811582k blog_post_no=224319345297 url=https://blog.naver.com/k4811582k/224319345297 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k4811582k/224319345297 [BLOG RESULT PARSED] blog_id=k4811582k blog_post_no=224319345297 [PUBLISH ELAPSED] queue_id=97 elapsed=415.7s avg=388.9s [SMART SLEEP CALC] remaining_seconds=16676 remaining_count=4 target_cycle=4169.0 avg_publish=388.9 base_sleep=3780.1 range=1890~1890 selected=1890 [SLEEP] 1890s before next queue [PUBLISH TARGET SELECTED] queue_id=94 realtor_id=5 article_no=2632364259 sort_at=2026-06-17 12:02:08 today_published_count=0 ================================================================================ [QUEUE START] queue_id=94, realtor_id=5, draft_id=135, article_no=2632364259 [DRAFT HTML CHECK] clipboard_len=15767, draft_len=15767, plain_len=540 ================================================================================ [INTEGRITY OK] queue_id=94, draft_id=135, article_no=2632364259 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_03_2632364259_1781689126.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15389 plain_len= 540 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_94_2632364259_after_paste_20260618_032420.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_94_2632364259_after_paste_20260618_032420.txt [EDITOR DEBUG LEN] html= 163705 text= 3168 [EDITOR VALIDATE] html_len=163705 text_len=3168 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=336 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=51 remain=285 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=91 remain=245 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=157 remain=179 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=189 remain=147 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=235 remain=101 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=289 remain=47 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=336 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=336 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224319359126 [RESULT URL CHECK] https://blog.naver.com/boram8857/224319359126 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=135 blog_id=boram8857 blog_post_no=224319359126 url=https://blog.naver.com/boram8857/224319359126 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224319359126 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224319359126 [PUBLISH ELAPSED] queue_id=94 elapsed=398.6s avg=392.2s [SMART SLEEP CALC] remaining_seconds=14383 remaining_count=3 target_cycle=4794.3 avg_publish=392.2 base_sleep=4402.2 range=2201~2201 selected=2201 [SLEEP] 2201s before next queue [PUBLISH TARGET SELECTED] queue_id=93 realtor_id=4 article_no=2632687693 sort_at=2026-06-17 12:01:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=93, realtor_id=4, draft_id=134, article_no=2632687693 [DRAFT HTML CHECK] clipboard_len=15139, draft_len=15139, plain_len=537 ================================================================================ [INTEGRITY OK] queue_id=93, draft_id=134, article_no=2632687693 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_DARK_REC_PHOTO_LAYOUT_05_2632687693_1781689206.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14764 plain_len= 537 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_93_2632687693_after_paste_20260618_040740.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_93_2632687693_after_paste_20260618_040740.txt [EDITOR DEBUG LEN] html= 162735 text= 2744 [EDITOR VALIDATE] html_len=162735 text_len=2744 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=495 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=59 remain=436 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=104 remain=391 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=165 remain=330 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=202 remain=293 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=254 remain=241 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=293 remain=202 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=333 remain=162 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=379 remain=116 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=425 remain=70 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=461 remain=34 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=495 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=495 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224319375373 [RESULT URL CHECK] https://blog.naver.com/pjy287/224319375373 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=134 blog_id=pjy287 blog_post_no=224319375373 url=https://blog.naver.com/pjy287/224319375373 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224319375373 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224319375373 [PUBLISH ELAPSED] queue_id=93 elapsed=558.3s avg=433.7s [SMART SLEEP CALC] remaining_seconds=11623 remaining_count=2 target_cycle=5811.5 avg_publish=433.7 base_sleep=5377.8 range=2688~2688 selected=2688 [SLEEP] 2688s before next queue [PUBLISH TARGET SELECTED] queue_id=53 realtor_id=1 article_no=2629533877 sort_at=2026-06-11 14:15:00 today_published_count=0 ================================================================================ [QUEUE START] queue_id=53, realtor_id=1, draft_id=56, article_no=2629533877 [DRAFT HTML CHECK] clipboard_len=12414, draft_len=12414, plain_len=556 ================================================================================ [INTEGRITY OK] queue_id=53, draft_id=56, article_no=2629533877 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_08_2629533877_1781481313.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12037 plain_len= 556 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_53_2629533877_after_paste_20260618_050146.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_53_2629533877_after_paste_20260618_050146.txt [EDITOR DEBUG LEN] html= 145001 text= 2309 [EDITOR VALIDATE] html_len=145001 text_len=2309 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=479 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=51 remain=428 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=96 remain=383 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=132 remain=347 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=182 remain=297 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=226 remain=253 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=288 remain=191 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=335 remain=144 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=382 remain=97 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=409 remain=70 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=453 remain=26 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=479 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=479 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224319395298 [RESULT URL CHECK] https://blog.naver.com/animone/224319395298 [PRIVATE QUEUE NONE] realtor_id=1 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=56 blog_id=animone blog_post_no=224319395298 url=https://blog.naver.com/animone/224319395298 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224319395298 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224319395298 [PUBLISH ELAPSED] queue_id=53 elapsed=540.7s avg=455.1s [SMART SLEEP CALC] remaining_seconds=8395 remaining_count=1 target_cycle=8395.0 avg_publish=455.1 base_sleep=7939.9 range=3969~3969 selected=3969 [SLEEP] 3969s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 2, 4, 5, 6] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=0 [PIPELINE RUN FINISH] run_id=231, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-17 22:00:16] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-18 06:16:14] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2028:20260618220005 [PIPELINE RUN START] run_id=275, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=123 realtor_id=7 article_no=2632918847 sort_at=2026-06-18 16:01:33 today_published_count=0 ================================================================================ [QUEUE START] queue_id=123, realtor_id=7, draft_id=202, article_no=2632918847 [DRAFT HTML CHECK] clipboard_len=17518, draft_len=17518, plain_len=530 ================================================================================ [INTEGRITY OK] queue_id=123, draft_id=202, article_no=2632918847 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_07_2632918847_1781771936.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17141 plain_len= 530 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_123_2632918847_after_paste_20260618_220045.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_123_2632918847_after_paste_20260618_220045.txt [EDITOR DEBUG LEN] html= 191390 text= 3915 [EDITOR VALIDATE] html_len=191390 text_len=3915 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=383 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=54 remain=329 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=99 remain=284 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=150 remain=233 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=205 remain=178 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=258 remain=125 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=308 remain=75 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=356 remain=27 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=383 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=383 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224320241675 [RESULT URL CHECK] https://blog.naver.com/e5221140/224320241675 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=202 blog_id=e5221140 blog_post_no=224320241675 url=https://blog.naver.com/e5221140/224320241675 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224320241675 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224320241675 [PUBLISH ELAPSED] queue_id=123 elapsed=442.4s avg=442.4s [SMART SLEEP CALC] remaining_seconds=33752 remaining_count=1 target_cycle=33752.0 avg_publish=442.4 base_sleep=33309.6 range=16654~16654 selected=16654 [SLEEP] 16654s before next queue [PUBLISH TARGET SELECTED] queue_id=122 realtor_id=6 article_no=2633001541 sort_at=2026-06-18 16:01:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=122, realtor_id=6, draft_id=201, article_no=2633001541 [DRAFT HTML CHECK] clipboard_len=16696, draft_len=16696, plain_len=568 ================================================================================ [INTEGRITY OK] queue_id=122, draft_id=201, article_no=2633001541 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_08_2633001541_1781772311.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16319 plain_len= 568 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_122_2633001541_after_paste_20260619_024546.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_122_2633001541_after_paste_20260619_024546.txt [EDITOR DEBUG LEN] html= 175092 text= 3306 [EDITOR VALIDATE] html_len=175092 text_len=3306 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=365 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=44 remain=321 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=100 remain=265 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=156 remain=209 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=202 remain=163 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=261 remain=104 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=321 remain=44 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=365 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=365 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224320398375 [RESULT URL CHECK] https://blog.naver.com/efg5254/224320398375 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=201 blog_id=efg5254 blog_post_no=224320398375 url=https://blog.naver.com/efg5254/224320398375 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224320398375 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224320398375 [PUBLISH ELAPSED] queue_id=122 elapsed=429.5s avg=435.9s [SMART SLEEP CALC] remaining_seconds=16668 remaining_count=2 target_cycle=8334.0 avg_publish=435.9 base_sleep=7898.1 range=3949~3949 selected=3949 [SLEEP] 3949s before next queue [PUBLISH TARGET SELECTED] queue_id=121 realtor_id=5 article_no=2633005438 sort_at=2026-06-18 16:01:05 today_published_count=0 ================================================================================ [QUEUE START] queue_id=121, realtor_id=5, draft_id=200, article_no=2633005438 [DRAFT HTML CHECK] clipboard_len=13173, draft_len=13173, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=121, draft_id=200, article_no=2633005438 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_05_2633005438_1781766179.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12796 plain_len= 528 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 2 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_121_2633005438_after_paste_20260619_035847.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_121_2633005438_after_paste_20260619_035847.txt [EDITOR DEBUG LEN] html= 148575 text= 3237 [EDITOR VALIDATE] html_len=148575 text_len=3237 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=378 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=33 remain=345 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=79 remain=299 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=146 remain=232 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=183 remain=195 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=224 remain=154 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=260 remain=118 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=290 remain=88 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=341 remain=37 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=378 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=378 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224320418102 [RESULT URL CHECK] https://blog.naver.com/boram8857/224320418102 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=200 blog_id=boram8857 blog_post_no=224320418102 url=https://blog.naver.com/boram8857/224320418102 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224320418102 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224320418102 [PUBLISH ELAPSED] queue_id=121 elapsed=441.2s avg=437.7s [SMART SLEEP CALC] remaining_seconds=12274 remaining_count=1 target_cycle=12274.0 avg_publish=437.7 base_sleep=11836.3 range=5918~5918 selected=5918 [SLEEP] 5918s before next queue [PUBLISH TARGET SELECTED] queue_id=120 realtor_id=4 article_no=2632992123 sort_at=2026-06-18 16:00:51 today_published_count=0 ================================================================================ [QUEUE START] queue_id=120, realtor_id=4, draft_id=199, article_no=2632992123 [DRAFT HTML CHECK] clipboard_len=16894, draft_len=16894, plain_len=517 ================================================================================ [INTEGRITY OK] queue_id=120, draft_id=199, article_no=2632992123 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2632992123_1781772255.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16516 plain_len= 517 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_120_2632992123_after_paste_20260619_054446.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_120_2632992123_after_paste_20260619_054446.txt [EDITOR DEBUG LEN] html= 170407 text= 2759 [EDITOR VALIDATE] html_len=170407 text_len=2759 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=446 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=29 remain=417 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=96 remain=350 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=127 remain=319 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=176 remain=270 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=216 remain=230 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=283 remain=163 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=321 remain=125 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=364 remain=82 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=426 remain=20 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=446 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=446 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224320452412 [RESULT URL CHECK] https://blog.naver.com/pjy287/224320452412 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=199 blog_id=pjy287 blog_post_no=224320452412 url=https://blog.naver.com/pjy287/224320452412 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224320452412 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224320452412 [PUBLISH ELAPSED] queue_id=120 elapsed=509.0s avg=455.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 6, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=275, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 4 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-18 22:00:05] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-19 05:52:33] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:15816:20260619220013 [PIPELINE RUN START] run_id=309, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=140 realtor_id=7 article_no=2633150047 sort_at=2026-06-19 16:01:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=140, realtor_id=7, draft_id=239, article_no=2633150047 [DRAFT HTML CHECK] clipboard_len=17188, draft_len=17188, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=140, draft_id=239, article_no=2633150047 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_DARK_REC_PHOTO_LAYOUT_03_2633150047_1781852545.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16813 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_140_2633150047_after_paste_20260619_220053.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_140_2633150047_after_paste_20260619_220053.txt [EDITOR DEBUG LEN] html= 188495 text= 3952 [EDITOR VALIDATE] html_len=188495 text_len=3952 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=465 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=40 remain=425 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=97 remain=368 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=165 remain=300 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=220 remain=245 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=251 remain=214 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=309 remain=156 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=351 remain=114 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=416 remain=49 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=465 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=465 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224321261136 [RESULT URL CHECK] https://blog.naver.com/e5221140/224321261136 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=239 blog_id=e5221140 blog_post_no=224321261136 url=https://blog.naver.com/e5221140/224321261136 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224321261136 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224321261136 [PUBLISH ELAPSED] queue_id=140 elapsed=524.3s avg=524.3s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=309, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-19 22:00:12] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-19 22:08:58] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:15848:20260620220003 [PIPELINE RUN START] run_id=332, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=156 realtor_id=7 article_no=2633338204 sort_at=2026-06-20 16:02:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=156, realtor_id=7, draft_id=255, article_no=2633338204 [DRAFT HTML CHECK] clipboard_len=17906, draft_len=17906, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=156, draft_id=255, article_no=2633338204 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_DARK_REC_PHOTO_LAYOUT_03_2633338204_1781939001.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17531 plain_len= 563 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_156_2633338204_after_paste_20260620_220043.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_156_2633338204_after_paste_20260620_220043.txt [EDITOR DEBUG LEN] html= 192797 text= 3951 [EDITOR VALIDATE] html_len=192797 text_len=3951 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=450 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=46 remain=404 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=82 remain=368 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=121 remain=329 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=160 remain=290 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=213 remain=237 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=256 remain=194 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=321 remain=129 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=367 remain=83 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=421 remain=29 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=450 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=450 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224322034237 [RESULT URL CHECK] https://blog.naver.com/e5221140/224322034237 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=255 blog_id=e5221140 blog_post_no=224322034237 url=https://blog.naver.com/e5221140/224322034237 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224322034237 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224322034237 [PUBLISH ELAPSED] queue_id=156 elapsed=509.6s avg=509.6s [SMART SLEEP CALC] remaining_seconds=33686 remaining_count=3 target_cycle=11228.7 avg_publish=509.6 base_sleep=10719.0 range=5359~5359 selected=5359 [SLEEP] 5359s before next queue [PUBLISH TARGET SELECTED] queue_id=155 realtor_id=6 article_no=2633090721 sort_at=2026-06-20 16:01:52 today_published_count=0 ================================================================================ [QUEUE START] queue_id=155, realtor_id=6, draft_id=254, article_no=2633090721 [DRAFT HTML CHECK] clipboard_len=16288, draft_len=16288, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=155, draft_id=254, article_no=2633090721 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_06_2633090721_1781938998.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15910 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_155_2633090721_after_paste_20260620_233836.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_155_2633090721_after_paste_20260620_233836.txt [EDITOR DEBUG LEN] html= 171192 text= 3321 [EDITOR VALIDATE] html_len=171192 text_len=3321 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=455 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=36 remain=419 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=72 remain=383 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=101 remain=354 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=127 remain=328 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=186 remain=269 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=216 remain=239 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=285 remain=170 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=339 remain=116 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=374 remain=81 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=401 remain=54 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=448 remain=7 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=455 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=455 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224322097752 [RESULT URL CHECK] https://blog.naver.com/efg5254/224322097752 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=254 blog_id=efg5254 blog_post_no=224322097752 url=https://blog.naver.com/efg5254/224322097752 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224322097752 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224322097752 [PUBLISH ELAPSED] queue_id=155 elapsed=519.3s avg=514.5s [SMART SLEEP CALC] remaining_seconds=27807 remaining_count=2 target_cycle=13903.5 avg_publish=514.5 base_sleep=13389.0 range=6694~6694 selected=6694 [SLEEP] 6694s before next queue [PUBLISH TARGET SELECTED] queue_id=154 realtor_id=5 article_no=2633003518 sort_at=2026-06-20 16:01:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=154, realtor_id=5, draft_id=253, article_no=2633003518 [DRAFT HTML CHECK] clipboard_len=16320, draft_len=16320, plain_len=568 ================================================================================ [INTEGRITY OK] queue_id=154, draft_id=253, article_no=2633003518 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_06_2633003518_1781938994.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15944 plain_len= 568 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_154_2633003518_after_paste_20260621_013849.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_154_2633003518_after_paste_20260621_013849.txt [EDITOR DEBUG LEN] html= 171280 text= 3477 [EDITOR VALIDATE] html_len=171280 text_len=3477 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=348 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=68 remain=280 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=121 remain=227 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=153 remain=195 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=185 remain=163 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=233 remain=115 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=281 remain=67 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=343 remain=5 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=348 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=348 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224322161551 [RESULT URL CHECK] https://blog.naver.com/boram8857/224322161551 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=253 blog_id=boram8857 blog_post_no=224322161551 url=https://blog.naver.com/boram8857/224322161551 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224322161551 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224322161551 [PUBLISH ELAPSED] queue_id=154 elapsed=412.1s avg=480.4s [SMART SLEEP CALC] remaining_seconds=20701 remaining_count=4 target_cycle=5175.2 avg_publish=480.4 base_sleep=4694.9 range=2347~2347 selected=2347 [SLEEP] 2347s before next queue [PUBLISH TARGET SELECTED] queue_id=153 realtor_id=4 article_no=2633391433 sort_at=2026-06-20 16:01:26 today_published_count=0 ================================================================================ [QUEUE START] queue_id=153, realtor_id=4, draft_id=252, article_no=2633391433 [DRAFT HTML CHECK] clipboard_len=17761, draft_len=17761, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=153, draft_id=252, article_no=2633391433 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_06_2633391433_1781938990.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17383 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_153_2633391433_after_paste_20260621_022448.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_153_2633391433_after_paste_20260621_022448.txt [EDITOR DEBUG LEN] html= 181406 text= 2851 [EDITOR VALIDATE] html_len=181406 text_len=2851 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=557 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=28 remain=529 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=91 remain=466 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=144 remain=413 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=181 remain=376 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=225 remain=332 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=259 remain=298 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=314 remain=243 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=340 remain=217 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=391 remain=166 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=429 remain=128 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=476 remain=81 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=527 remain=30 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=557 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=557 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224322179256 [RESULT URL CHECK] https://blog.naver.com/pjy287/224322179256 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=252 blog_id=pjy287 blog_post_no=224322179256 url=https://blog.naver.com/pjy287/224322179256 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224322179256 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224322179256 [PUBLISH ELAPSED] queue_id=153 elapsed=619.7s avg=515.2s [SMART SLEEP CALC] remaining_seconds=17734 remaining_count=3 target_cycle=5911.3 avg_publish=515.2 base_sleep=5396.1 range=2698~2698 selected=2698 [SLEEP] 2698s before next queue [PUBLISH TARGET SELECTED] queue_id=151 realtor_id=1 article_no=2633339879 sort_at=2026-06-20 16:01:12 today_published_count=0 ================================================================================ [QUEUE START] queue_id=151, realtor_id=1, draft_id=250, article_no=2633339879 [DRAFT HTML CHECK] clipboard_len=18472, draft_len=18472, plain_len=543 ================================================================================ [INTEGRITY OK] queue_id=151, draft_id=250, article_no=2633339879 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2633339879_1781938985.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18096 plain_len= 543 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_151_2633339879_after_paste_20260621_032006.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_151_2633339879_after_paste_20260621_032006.txt [EDITOR DEBUG LEN] html= 185232 text= 2978 [EDITOR VALIDATE] html_len=185232 text_len=2978 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=332 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=66 remain=266 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=93 remain=239 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=154 remain=178 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=183 remain=149 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=247 remain=85 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=282 remain=50 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=329 remain=3 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=332 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=332 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224322196158 [RESULT URL CHECK] https://blog.naver.com/animone/224322196158 [PRIVATE QUEUE NONE] realtor_id=1 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=250 blog_id=animone blog_post_no=224322196158 url=https://blog.naver.com/animone/224322196158 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224322196158 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224322196158 [PUBLISH ELAPSED] queue_id=151 elapsed=395.6s avg=491.3s [SMART SLEEP CALC] remaining_seconds=14640 remaining_count=2 target_cycle=7320.0 avg_publish=491.3 base_sleep=6828.7 range=3414~3414 selected=3414 [SLEEP] 3414s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 4, 5, 6, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=2 private_pending=0 [PIPELINE RUN FINISH] run_id=332, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-20 22:00:03] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-21 04:22:53] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:16408:20260621220007 [PIPELINE RUN START] run_id=357, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=175 realtor_id=7 article_no=2633337590 sort_at=2026-06-21 16:01:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=175, realtor_id=7, draft_id=274, article_no=2633337590 [DRAFT HTML CHECK] clipboard_len=17149, draft_len=17149, plain_len=538 ================================================================================ [INTEGRITY OK] queue_id=175, draft_id=274, article_no=2633337590 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2633337590_1782025408.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16771 plain_len= 538 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_175_2633337590_after_paste_20260621_220047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_175_2633337590_after_paste_20260621_220047.txt [EDITOR DEBUG LEN] html= 189160 text= 3908 [EDITOR VALIDATE] html_len=189160 text_len=3908 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=542 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=35 remain=507 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=83 remain=459 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=153 remain=389 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=190 remain=352 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=259 remain=283 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=289 remain=253 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=346 remain=196 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=382 remain=160 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=439 remain=103 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=472 remain=70 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=513 remain=29 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=542 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=542 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224322775934 [RESULT URL CHECK] https://blog.naver.com/e5221140/224322775934 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=274 blog_id=e5221140 blog_post_no=224322775934 url=https://blog.naver.com/e5221140/224322775934 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224322775934 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224322775934 [PUBLISH ELAPSED] queue_id=175 elapsed=601.3s avg=601.3s [SMART SLEEP CALC] remaining_seconds=33590 remaining_count=1 target_cycle=33590.0 avg_publish=601.3 base_sleep=32988.7 range=16494~16494 selected=16494 [SLEEP] 16494s before next queue [PUBLISH TARGET SELECTED] queue_id=174 realtor_id=6 article_no=2633026980 sort_at=2026-06-21 16:01:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=174, realtor_id=6, draft_id=273, article_no=2633026980 [DRAFT HTML CHECK] clipboard_len=16451, draft_len=16451, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=174, draft_id=273, article_no=2633026980 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2633026980_1782025405.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16074 plain_len= 528 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_174_2633026980_after_paste_20260622_024550.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_174_2633026980_after_paste_20260622_024550.txt [EDITOR DEBUG LEN] html= 169831 text= 2793 [EDITOR VALIDATE] html_len=169831 text_len=2793 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=494 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=51 remain=443 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=88 remain=406 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=156 remain=338 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=213 remain=281 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=265 remain=229 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=312 remain=182 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=377 remain=117 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=425 remain=69 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=462 remain=32 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=494 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=494 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224322942900 [RESULT URL CHECK] https://blog.naver.com/efg5254/224322942900 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=273 blog_id=efg5254 blog_post_no=224322942900 url=https://blog.naver.com/efg5254/224322942900 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224322942900 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224322942900 [PUBLISH ELAPSED] queue_id=174 elapsed=556.9s avg=579.1s [SMART SLEEP CALC] remaining_seconds=16535 remaining_count=4 target_cycle=4133.8 avg_publish=579.1 base_sleep=3554.6 range=1777~1777 selected=1777 [SLEEP] 1777s before next queue [PUBLISH TARGET SELECTED] queue_id=173 realtor_id=5 article_no=2631903973 sort_at=2026-06-21 16:01:26 today_published_count=0 ================================================================================ [QUEUE START] queue_id=173, realtor_id=5, draft_id=272, article_no=2631903973 [DRAFT HTML CHECK] clipboard_len=21517, draft_len=21517, plain_len=519 ================================================================================ [INTEGRITY OK] queue_id=173, draft_id=272, article_no=2631903973 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2631903973_1782025391.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 21141 plain_len= 519 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_173_2631903973_after_paste_20260622_032444.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_173_2631903973_after_paste_20260622_032444.txt [EDITOR DEBUG LEN] html= 200138 text= 3132 [EDITOR VALIDATE] html_len=200138 text_len=3132 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=543 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=48 remain=495 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=89 remain=454 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=121 remain=422 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=149 remain=394 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=206 remain=337 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=256 remain=287 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=305 remain=238 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=373 remain=170 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=418 remain=125 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=483 remain=60 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=528 remain=15 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=543 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=543 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224322954630 [RESULT URL CHECK] https://blog.naver.com/boram8857/224322954630 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=272 blog_id=boram8857 blog_post_no=224322954630 url=https://blog.naver.com/boram8857/224322954630 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224322954630 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224322954630 [PUBLISH ELAPSED] queue_id=173 elapsed=605.2s avg=587.8s [SMART SLEEP CALC] remaining_seconds=14152 remaining_count=3 target_cycle=4717.3 avg_publish=587.8 base_sleep=4129.5 range=2064~2064 selected=2064 [SLEEP] 2064s before next queue [PUBLISH TARGET SELECTED] queue_id=172 realtor_id=4 article_no=2633333928 sort_at=2026-06-21 16:01:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=172, realtor_id=4, draft_id=271, article_no=2633333928 [DRAFT HTML CHECK] clipboard_len=13829, draft_len=13829, plain_len=570 ================================================================================ [INTEGRITY OK] queue_id=172, draft_id=271, article_no=2633333928 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_01_2633333928_1782025382.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13446 plain_len= 570 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_172_2633333928_after_paste_20260622_040915.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_172_2633333928_after_paste_20260622_040915.txt [EDITOR DEBUG LEN] html= 152491 text= 2763 [EDITOR VALIDATE] html_len=152491 text_len=2763 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=512 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=42 remain=470 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=103 remain=409 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=165 remain=347 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=190 remain=322 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=225 remain=287 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=279 remain=233 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=322 remain=190 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=348 remain=164 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=412 remain=100 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=467 remain=45 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=511 remain=1 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=512 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=512 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224322967234 [RESULT URL CHECK] https://blog.naver.com/pjy287/224322967234 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=271 blog_id=pjy287 blog_post_no=224322967234 url=https://blog.naver.com/pjy287/224322967234 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224322967234 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224322967234 [PUBLISH ELAPSED] queue_id=172 elapsed=575.7s avg=584.8s [SMART SLEEP CALC] remaining_seconds=11512 remaining_count=2 target_cycle=5756.0 avg_publish=584.8 base_sleep=5171.2 range=2585~2585 selected=2585 [SLEEP] 2585s before next queue [PUBLISH TARGET SELECTED] queue_id=164 realtor_id=1 article_no=2630399288 sort_at=2026-06-21 12:00:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=164, realtor_id=1, draft_id=263, article_no=2630399288 [DRAFT HTML CHECK] clipboard_len=18531, draft_len=18531, plain_len=552 ================================================================================ [INTEGRITY OK] queue_id=164, draft_id=263, article_no=2630399288 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2630399288_1782011024.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18153 plain_len= 552 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_164_2630399288_after_paste_20260622_050155.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_164_2630399288_after_paste_20260622_050155.txt [EDITOR DEBUG LEN] html= 184946 text= 3031 [EDITOR VALIDATE] html_len=184946 text_len=3031 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=508 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=56 remain=452 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=110 remain=398 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=164 remain=344 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=211 remain=297 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=278 remain=230 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=312 remain=196 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=350 remain=158 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=416 remain=92 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=458 remain=50 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=485 remain=23 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=508 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=508 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/animone/224322981880 [RESULT URL CHECK] https://blog.naver.com/animone/224322981880 [PRIVATE QUEUE NONE] realtor_id=1 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=263 blog_id=animone blog_post_no=224322981880 url=https://blog.naver.com/animone/224322981880 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/animone/224322981880 [BLOG RESULT PARSED] blog_id=animone blog_post_no=224322981880 [PUBLISH ELAPSED] queue_id=164 elapsed=570.5s avg=581.9s [SMART SLEEP CALC] remaining_seconds=8357 remaining_count=1 target_cycle=8357.0 avg_publish=581.9 base_sleep=7775.1 range=3887~3887 selected=3887 [SLEEP] 3887s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 4, 5, 6, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=0 [PIPELINE RUN FINISH] run_id=357, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-21 22:00:07] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-22 06:15:30] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:7848:20260622220016 [PIPELINE RUN START] run_id=373, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=193 realtor_id=7 article_no=2633148099 sort_at=2026-06-22 16:02:03 today_published_count=0 ================================================================================ [QUEUE START] queue_id=193, realtor_id=7, draft_id=292, article_no=2633148099 [DRAFT HTML CHECK] clipboard_len=16951, draft_len=16951, plain_len=540 ================================================================================ [INTEGRITY OK] queue_id=193, draft_id=292, article_no=2633148099 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2633148099_1782111786.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16573 plain_len= 540 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_193_2633148099_after_paste_20260622_220055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_193_2633148099_after_paste_20260622_220055.txt [EDITOR DEBUG LEN] html= 188247 text= 3753 [EDITOR VALIDATE] html_len=188247 text_len=3753 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=349 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=46 remain=303 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=95 remain=254 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=126 remain=223 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=168 remain=181 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=232 remain=117 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=301 remain=48 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=338 remain=11 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=349 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=349 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224323872789 [RESULT URL CHECK] https://blog.naver.com/e5221140/224323872789 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=292 blog_id=e5221140 blog_post_no=224323872789 url=https://blog.naver.com/e5221140/224323872789 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224323872789 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224323872789 [PUBLISH ELAPSED] queue_id=193 elapsed=408.5s avg=408.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=373, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-22 22:00:15] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-22 22:07:05] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:10156:20260623220003 [PIPELINE RUN START] run_id=404, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=211 realtor_id=7 article_no=2633803335 sort_at=2026-06-23 16:01:36 today_published_count=0 ================================================================================ [QUEUE START] queue_id=211, realtor_id=7, draft_id=321, article_no=2633803335 [DRAFT HTML CHECK] clipboard_len=16792, draft_len=16792, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=211, draft_id=321, article_no=2633803335 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_04_2633803335_1782198150.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16415 plain_len= 532 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_211_2633803335_after_paste_20260623_220044.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_211_2633803335_after_paste_20260623_220044.txt [EDITOR DEBUG LEN] html= 186728 text= 3917 [EDITOR VALIDATE] html_len=186728 text_len=3917 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=417 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=65 remain=352 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=120 remain=297 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=182 remain=235 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=211 remain=206 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=246 remain=171 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=293 remain=124 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=347 remain=70 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=402 remain=15 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=417 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=417 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224325023878 [RESULT URL CHECK] https://blog.naver.com/e5221140/224325023878 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=321 blog_id=e5221140 blog_post_no=224325023878 url=https://blog.naver.com/e5221140/224325023878 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224325023878 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224325023878 [PUBLISH ELAPSED] queue_id=211 elapsed=477.5s avg=477.5s [SMART SLEEP CALC] remaining_seconds=33718 remaining_count=3 target_cycle=11239.3 avg_publish=477.5 base_sleep=10761.9 range=5380~5380 selected=5380 [SLEEP] 5380s before next queue [PUBLISH TARGET SELECTED] queue_id=210 realtor_id=6 article_no=2633755038 sort_at=2026-06-23 16:01:21 today_published_count=0 ================================================================================ [QUEUE START] queue_id=210, realtor_id=6, draft_id=320, article_no=2633755038 [DRAFT HTML CHECK] clipboard_len=15038, draft_len=15038, plain_len=529 ================================================================================ [INTEGRITY OK] queue_id=210, draft_id=320, article_no=2633755038 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_04_2633755038_1782198146.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14655 plain_len= 529 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_210_2633755038_after_paste_20260623_233824.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_210_2633755038_after_paste_20260623_233824.txt [EDITOR DEBUG LEN] html= 165304 text= 2859 [EDITOR VALIDATE] html_len=165304 text_len=2859 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=580 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=26 remain=554 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=88 remain=492 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=141 remain=439 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=169 remain=411 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=222 remain=358 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=271 remain=309 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=324 remain=256 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=371 remain=209 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=427 remain=153 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=487 remain=93 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=514 remain=66 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=580 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=580 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224325105173 [RESULT URL CHECK] https://blog.naver.com/efg5254/224325105173 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=320 blog_id=efg5254 blog_post_no=224325105173 url=https://blog.naver.com/efg5254/224325105173 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224325105173 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224325105173 [PUBLISH ELAPSED] queue_id=210 elapsed=642.4s avg=559.9s [SMART SLEEP CALC] remaining_seconds=27695 remaining_count=2 target_cycle=13847.5 avg_publish=559.9 base_sleep=13287.6 range=6643~6643 selected=6643 [SLEEP] 6643s before next queue [PUBLISH TARGET SELECTED] queue_id=209 realtor_id=5 article_no=2633823547 sort_at=2026-06-23 16:01:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=209, realtor_id=5, draft_id=319, article_no=2633823547 [DRAFT HTML CHECK] clipboard_len=14319, draft_len=14319, plain_len=507 ================================================================================ [INTEGRITY OK] queue_id=209, draft_id=319, article_no=2633823547 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_06_2633823547_1782198142.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13942 plain_len= 507 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_209_2633823547_after_paste_20260624_013950.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_209_2633823547_after_paste_20260624_013950.txt [EDITOR DEBUG LEN] html= 155993 text= 2688 [EDITOR VALIDATE] html_len=155993 text_len=2688 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=547 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=28 remain=519 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=56 remain=491 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=102 remain=445 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=169 remain=378 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=204 remain=343 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=240 remain=307 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=295 remain=252 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=331 remain=216 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=382 remain=165 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=415 remain=132 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=461 remain=86 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=523 remain=24 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=547 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=547 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224325172750 [RESULT URL CHECK] https://blog.naver.com/boram8857/224325172750 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=319 blog_id=boram8857 blog_post_no=224325172750 url=https://blog.naver.com/boram8857/224325172750 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224325172750 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224325172750 [PUBLISH ELAPSED] queue_id=209 elapsed=609.3s avg=576.4s [SMART SLEEP CALC] remaining_seconds=20443 remaining_count=4 target_cycle=5110.8 avg_publish=576.4 base_sleep=4534.4 range=2267~2267 selected=2267 [SLEEP] 2267s before next queue [PUBLISH TARGET SELECTED] queue_id=196 realtor_id=4 article_no=2633672147 sort_at=2026-06-23 08:01:33 today_published_count=0 ================================================================================ [QUEUE START] queue_id=196, realtor_id=4, draft_id=295, article_no=2633672147 [DRAFT HTML CHECK] clipboard_len=17340, draft_len=17340, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=196, draft_id=295, article_no=2633672147 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_02_2633672147_1782169388.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16963 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_196_2633672147_after_paste_20260624_022746.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_196_2633672147_after_paste_20260624_022746.txt [EDITOR DEBUG LEN] html= 174688 text= 2735 [EDITOR VALIDATE] html_len=174688 text_len=2735 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=352 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=38 remain=314 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=63 remain=289 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=92 remain=260 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=126 remain=226 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=174 remain=178 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=200 remain=152 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=264 remain=88 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=333 remain=19 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=352 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=352 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224325188837 [RESULT URL CHECK] https://blog.naver.com/pjy287/224325188837 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=295 blog_id=pjy287 blog_post_no=224325188837 url=https://blog.naver.com/pjy287/224325188837 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224325188837 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224325188837 [PUBLISH ELAPSED] queue_id=196 elapsed=415.1s avg=536.0s [SMART SLEEP CALC] remaining_seconds=17760 remaining_count=3 target_cycle=5920.0 avg_publish=536.0 base_sleep=5384.0 range=2691~2691 selected=2691 [SLEEP] 2691s before next queue [PUBLISH TARGET SELECTED] queue_id=170 realtor_id=1 article_no=2630545347 sort_at=2026-06-21 11:33:09 today_published_count=0 ================================================================================ [QUEUE START] queue_id=170, realtor_id=1, draft_id=269, article_no=2630545347 [DRAFT HTML CHECK] clipboard_len=18363, draft_len=18363, plain_len=556 ================================================================================ [INTEGRITY OK] queue_id=170, draft_id=269, article_no=2630545347 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=1 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_1.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FINAL URL] https://blog.naver.com/animone?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=animone&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=2&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 442.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_04_2630545347_1782025350.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("이미지") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("이미지"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("첨부") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("이미지") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("이미지"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[aria-label*="이미지"] [REP IMAGE BUTTON ERROR] root=frame, selector=[aria-label*="이미지"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[title*="사진"] [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image button [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD FAIL] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18362 plain_len= 556 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=나를 돌아보는 회고, 뜻밖의 발견을 기다립니다. #모두의회고 box={'x': 442.5, 'y': 356, 'width': 368.28125, 'height': 15} [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_170_2630545347_after_paste_20260624_032036.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_170_2630545347_after_paste_20260624_032036.txt [EDITOR DEBUG LEN] html= 57109 text= 601 [EDITOR VALIDATE] html_len=57109 text_len=601 hit_count=0 [EDITOR VALIDATE RESULT] False 에디터 본문 핵심문구 부족 hit_count=0, text_len=601 [BODY INPUT ERROR] 네이버 에디터 본문 검증 실패: 에디터 본문 핵심문구 부족 hit_count=0, text_len=601 [PUBLISH ELAPSED] queue_id=170 elapsed=106.8s avg=450.2s [SMART SLEEP CALC] remaining_seconds=14962 remaining_count=3 target_cycle=4987.3 avg_publish=450.2 base_sleep=4537.1 range=2268~2268 selected=2268 [SLEEP] 2268s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[1, 4, 5, 6, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=3 private_pending=0 [PIPELINE RUN FINISH] run_id=404, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 4 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-23 22:00:03] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-24 03:58:25] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:15476:20260624220013 [PIPELINE RUN START] run_id=431, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=226 realtor_id=7 article_no=2633801207 sort_at=2026-06-24 16:01:21 today_published_count=0 ================================================================================ [QUEUE START] queue_id=226, realtor_id=7, draft_id=338, article_no=2633801207 [DRAFT HTML CHECK] clipboard_len=16925, draft_len=16925, plain_len=520 ================================================================================ [INTEGRITY OK] queue_id=226, draft_id=338, article_no=2633801207 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_07_2633801207_1782284995.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16549 plain_len= 520 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_226_2633801207_after_paste_20260624_220052.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_226_2633801207_after_paste_20260624_220052.txt [EDITOR DEBUG LEN] html= 188638 text= 3719 [EDITOR VALIDATE] html_len=188638 text_len=3719 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=355 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=63 remain=292 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=99 remain=256 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=164 remain=191 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=196 remain=159 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=226 remain=129 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=278 remain=77 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=322 remain=33 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=348 remain=7 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=355 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=355 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224326202519 [RESULT URL CHECK] https://blog.naver.com/e5221140/224326202519 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=338 blog_id=e5221140 blog_post_no=224326202519 url=https://blog.naver.com/e5221140/224326202519 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224326202519 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224326202519 [PUBLISH ELAPSED] queue_id=226 elapsed=414.6s avg=414.6s [SMART SLEEP CALC] remaining_seconds=33772 remaining_count=1 target_cycle=33772.0 avg_publish=414.6 base_sleep=33357.4 range=16678~16678 selected=16678 [SLEEP] 16678s before next queue [PUBLISH TARGET SELECTED] queue_id=225 realtor_id=6 article_no=2634026467 sort_at=2026-06-24 16:01:08 today_published_count=0 ================================================================================ [QUEUE START] queue_id=225, realtor_id=6, draft_id=337, article_no=2634026467 [DRAFT HTML CHECK] clipboard_len=16770, draft_len=16770, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=225, draft_id=337, article_no=2634026467 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=7&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_02_2634026467_1782284992.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16394 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_225_2634026467_after_paste_20260625_024549.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_225_2634026467_after_paste_20260625_024549.txt [EDITOR DEBUG LEN] html= 175255 text= 3381 [EDITOR VALIDATE] html_len=175255 text_len=3381 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=468 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=30 remain=438 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=92 remain=376 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=133 remain=335 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=188 remain=280 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=231 remain=237 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=282 remain=186 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=336 remain=132 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=395 remain=73 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=442 remain=26 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=468 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=468 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224326410924 [RESULT URL CHECK] https://blog.naver.com/efg5254/224326410924 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=337 blog_id=efg5254 blog_post_no=224326410924 url=https://blog.naver.com/efg5254/224326410924 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224326410924 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224326410924 [PUBLISH ELAPSED] queue_id=225 elapsed=531.4s avg=473.0s [SMART SLEEP CALC] remaining_seconds=16562 remaining_count=3 target_cycle=5520.7 avg_publish=473.0 base_sleep=5047.7 range=2523~2523 selected=2523 [SLEEP] 2523s before next queue [PUBLISH TARGET SELECTED] queue_id=224 realtor_id=5 article_no=2634039502 sort_at=2026-06-24 16:00:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=224, realtor_id=5, draft_id=336, article_no=2634039502 [DRAFT HTML CHECK] clipboard_len=16504, draft_len=16504, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=224, draft_id=336, article_no=2634039502 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2634039502_1782284989.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16126 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_224_2634039502_after_paste_20260625_033643.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_224_2634039502_after_paste_20260625_033643.txt [EDITOR DEBUG LEN] html= 171670 text= 3623 [EDITOR VALIDATE] html_len=171670 text_len=3623 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=401 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=55 remain=346 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=91 remain=310 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=152 remain=249 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=206 remain=195 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=266 remain=135 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=307 remain=94 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=358 remain=43 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=401 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=401 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224326434263 [RESULT URL CHECK] https://blog.naver.com/boram8857/224326434263 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=336 blog_id=boram8857 blog_post_no=224326434263 url=https://blog.naver.com/boram8857/224326434263 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224326434263 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224326434263 [PUBLISH ELAPSED] queue_id=224 elapsed=464.3s avg=470.1s [SMART SLEEP CALC] remaining_seconds=13574 remaining_count=2 target_cycle=6787.0 avg_publish=470.1 base_sleep=6316.9 range=3158~3158 selected=3158 [SLEEP] 3158s before next queue [PUBLISH TARGET SELECTED] queue_id=214 realtor_id=4 article_no=2633878501 sort_at=2026-06-24 08:01:26 today_published_count=0 ================================================================================ [QUEUE START] queue_id=214, realtor_id=4, draft_id=325, article_no=2633878501 [DRAFT HTML CHECK] clipboard_len=15843, draft_len=15843, plain_len=515 ================================================================================ [INTEGRITY OK] queue_id=214, draft_id=325, article_no=2633878501 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_02_2633878501_1782255766.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15466 plain_len= 515 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_214_2633878501_after_paste_20260625_043706.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_214_2633878501_after_paste_20260625_043706.txt [EDITOR DEBUG LEN] html= 170507 text= 2839 [EDITOR VALIDATE] html_len=170507 text_len=2839 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=448 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=70 remain=378 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=114 remain=334 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=159 remain=289 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=198 remain=250 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=254 remain=194 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=280 remain=168 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=346 remain=102 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=387 remain=61 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=420 remain=28 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=448 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=448 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224326458148 [RESULT URL CHECK] https://blog.naver.com/pjy287/224326458148 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=325 blog_id=pjy287 blog_post_no=224326458148 url=https://blog.naver.com/pjy287/224326458148 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224326458148 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224326458148 [PUBLISH ELAPSED] queue_id=214 elapsed=511.6s avg=480.5s [SMART SLEEP CALC] remaining_seconds=9905 remaining_count=1 target_cycle=9905.0 avg_publish=480.5 base_sleep=9424.5 range=4712~4712 selected=4712 [SLEEP] 4712s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 6, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=0 [PIPELINE RUN FINISH] run_id=431, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 4 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-24 22:00:12] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-25 06:03:26] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:12408:20260625220002 [PIPELINE RUN START] run_id=492, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=241 realtor_id=7 article_no=2634200483 sort_at=2026-06-25 16:01:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=241, realtor_id=7, draft_id=354, article_no=2634200483 [DRAFT HTML CHECK] clipboard_len=20295, draft_len=20295, plain_len=566 ================================================================================ [INTEGRITY OK] queue_id=241, draft_id=354, article_no=2634200483 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2634200483_1782370925.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19918 plain_len= 566 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_241_2634200483_after_paste_20260625_220042.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_241_2634200483_after_paste_20260625_220042.txt [EDITOR DEBUG LEN] html= 207886 text= 4068 [EDITOR VALIDATE] html_len=207886 text_len=4068 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=452 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=36 remain=416 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=93 remain=359 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=126 remain=326 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=185 remain=267 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=242 remain=210 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=305 remain=147 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=352 remain=100 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=389 remain=63 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=433 remain=19 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=452 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=452 [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224327355751 [RESULT URL CHECK] https://blog.naver.com/e5221140/224327355751 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=354 blog_id=e5221140 blog_post_no=224327355751 url=https://blog.naver.com/e5221140/224327355751 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224327355751 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224327355751 [PUBLISH ELAPSED] queue_id=241 elapsed=511.1s avg=511.1s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=492, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-25 22:00:02] START 1/1 �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 07:30 --only-night-window --smart-sleep --per-realtor-daily-limit 1 [2026-06-25 22:08:34] END �꽕�씠踰� 釉붾줈洹� �빞媛� 諛쒗뻾 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:6296:20260627070017 [PIPELINE RUN START] run_id=595, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=284 realtor_id=8 article_no=2634487548 sort_at=2026-06-26 23:11:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=284, realtor_id=8, draft_id=398, article_no=2634487548 [DRAFT HTML CHECK] clipboard_len=16470, draft_len=16470, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=284, draft_id=398, article_no=2634487548 [BLOG ID] tjumji [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=8 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=tjumji&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 228, 'width': 62.09375, 'height': 43} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2634487548_1782483125.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16092 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_284_2634487548_after_paste_20260627_070104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_284_2634487548_after_paste_20260627_070104.txt [EDITOR DEBUG LEN] html= 178960 text= 3390 [EDITOR VALIDATE] html_len=178960 text_len=3390 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=324 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=36 remain=288 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=91 remain=233 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=133 remain=191 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=164 remain=160 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=228 remain=96 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=261 remain=63 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=301 remain=23 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=324 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=324 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 565, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/tjumji/224328622097 [RESULT URL CHECK] https://blog.naver.com/tjumji/224328622097 [PRIVATE QUEUE NONE] realtor_id=8 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=398 blog_id=tjumji blog_post_no=224328622097 url=https://blog.naver.com/tjumji/224328622097 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/tjumji/224328622097 [BLOG RESULT PARSED] blog_id=tjumji blog_post_no=224328622097 [PUBLISH ELAPSED] queue_id=284 elapsed=391.9s avg=391.9s [SMART SLEEP CALC] remaining_seconds=57190 remaining_count=4 target_cycle=14297.5 avg_publish=391.9 base_sleep=13905.6 range=6952~6952 selected=6952 [SLEEP] 6952s before next queue [PUBLISH TARGET SELECTED] queue_id=283 realtor_id=7 article_no=2634393122 sort_at=2026-06-26 23:11:25 today_published_count=0 ================================================================================ [QUEUE START] queue_id=283, realtor_id=7, draft_id=397, article_no=2634393122 [DRAFT HTML CHECK] clipboard_len=16918, draft_len=16918, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=283, draft_id=397, article_no=2634393122 [BLOG ID] q5921772 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/q5921772?Redirect=Write&categoryNo=2 [NAVER DIALOG DETECTED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [NAVER DIALOG DISMISSED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [WAIT EDITOR] 1/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WAIT EDITOR] 2/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_2 [WAIT EDITOR] 3/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_3 [WAIT EDITOR] 4/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_4 [WAIT EDITOR] 5/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_5 [WAIT EDITOR] 6/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_6 [WAIT EDITOR] 7/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_7 [WAIT EDITOR] 8/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_8 [WAIT EDITOR] 9/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_9 [WAIT EDITOR] 10/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_10 [WAIT EDITOR] 11/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_11 [WAIT EDITOR] 12/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_12 [WAIT EDITOR] 13/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_13 [WAIT EDITOR] 14/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_14 [WAIT EDITOR] 15/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_15 [WAIT EDITOR] 16/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_16 [WAIT EDITOR] 17/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_17 [WAIT EDITOR] 18/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_18 [WAIT EDITOR] 19/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_19 [WAIT EDITOR] 20/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_20 [WAIT EDITOR] 21/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_21 [WAIT EDITOR] 22/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_22 [WAIT EDITOR] 23/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_23 [WAIT EDITOR] 24/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_24 [WAIT EDITOR] 25/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_25 [WAIT EDITOR] 26/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_26 [WAIT EDITOR] 27/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_27 [WAIT EDITOR] 28/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_28 [WAIT EDITOR] 29/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_29 [WAIT EDITOR] 30/30 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [EXISTING DRAFT POPUP NONE] label=wait_editor_30 [WRITE FINAL URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [WRITE HOLD] [WRITE_HOLD] realtor_id=7 / 글쓰기 iframe 미발견 / 최종 URL: https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [PUBLISH ELAPSED] queue_id=283 elapsed=34.4s avg=213.1s [SMART SLEEP CALC] remaining_seconds=50203 remaining_count=4 target_cycle=12550.8 avg_publish=213.1 base_sleep=12337.6 range=6168~6168 selected=6168 [SLEEP] 6168s before next queue [PUBLISH TARGET SELECTED] queue_id=269 realtor_id=5 article_no=2634027836 sort_at=2026-06-26 08:01:12 today_published_count=0 ================================================================================ [QUEUE START] queue_id=269, realtor_id=5, draft_id=383, article_no=2634027836 [DRAFT HTML CHECK] clipboard_len=16534, draft_len=16534, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=269, draft_id=383, article_no=2634027836 [BLOG ID] boram8857 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_NOTE_CARD_PHOTO_LAYOUT_07_2634027836_1782429527.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16158 plain_len= 562 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_269_2634027836_after_paste_20260627_104650.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_269_2634027836_after_paste_20260627_104650.txt [EDITOR DEBUG LEN] html= 171706 text= 3663 [EDITOR VALIDATE] html_len=171706 text_len=3663 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=325 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=54 remain=271 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=87 remain=238 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=116 remain=209 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=177 remain=148 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=205 remain=120 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=236 remain=89 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=272 remain=53 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=325 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=325 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/boram8857/224328740685 [RESULT URL CHECK] https://blog.naver.com/boram8857/224328740685 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=383 blog_id=boram8857 blog_post_no=224328740685 url=https://blog.naver.com/boram8857/224328740685 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224328740685 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224328740685 [PUBLISH ELAPSED] queue_id=269 elapsed=401.3s avg=275.9s [SMART SLEEP CALC] remaining_seconds=43634 remaining_count=2 target_cycle=21817.0 avg_publish=275.9 base_sleep=21541.1 range=10770~10770 selected=10770 [SLEEP] 10770s before next queue [PUBLISH TARGET SELECTED] queue_id=240 realtor_id=6 article_no=2634209046 sort_at=2026-06-25 16:01:02 today_published_count=0 ================================================================================ [QUEUE START] queue_id=240, realtor_id=6, draft_id=353, article_no=2634209046 [DRAFT HTML CHECK] clipboard_len=16318, draft_len=16318, plain_len=539 ================================================================================ [INTEGRITY OK] queue_id=240, draft_id=353, article_no=2634209046 [BLOG ID] efg5254 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=6 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fefg5254%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fefg5254%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_6.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/efg5254?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=efg5254&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_07_2634209046_1782370922.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15940 plain_len= 539 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_240_2634209046_after_paste_20260627_135302.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_240_2634209046_after_paste_20260627_135302.txt [EDITOR DEBUG LEN] html= 171231 text= 3377 [EDITOR VALIDATE] html_len=171231 text_len=3377 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=315 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=64 remain=251 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=117 remain=198 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=144 remain=171 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=197 remain=118 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=247 remain=68 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=312 remain=3 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=315 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=315 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/efg5254/224328858648 [RESULT URL CHECK] https://blog.naver.com/efg5254/224328858648 [PRIVATE QUEUE NONE] realtor_id=6 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=353 blog_id=efg5254 blog_post_no=224328858648 url=https://blog.naver.com/efg5254/224328858648 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/efg5254/224328858648 [BLOG RESULT PARSED] blog_id=efg5254 blog_post_no=224328858648 [PUBLISH ELAPSED] queue_id=240 elapsed=381.9s avg=302.4s [SMART SLEEP CALC] remaining_seconds=32482 remaining_count=1 target_cycle=32482.0 avg_publish=302.4 base_sleep=32179.6 range=16089~16089 selected=16089 [SLEEP] 16089s before next queue [PUBLISH TARGET SELECTED] queue_id=190 realtor_id=4 article_no=2633636813 sort_at=2026-06-22 16:01:20 today_published_count=0 ================================================================================ [QUEUE START] queue_id=190, realtor_id=4, draft_id=289, article_no=2633636813 [DRAFT HTML CHECK] clipboard_len=19648, draft_len=19648, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=190, draft_id=289, article_no=2633636813 [BLOG ID] pjy287 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_GREEN_LABEL_PHOTO_LAYOUT_02_2633636813_1782111775.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19270 plain_len= 563 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_190_2633636813_after_paste_20260627_182730.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_190_2633636813_after_paste_20260627_182730.txt [EDITOR DEBUG LEN] html= 192855 text= 2889 [EDITOR VALIDATE] html_len=192855 text_len=2889 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=412 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=29 remain=383 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=76 remain=336 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=107 remain=305 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=147 remain=265 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=189 remain=223 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=255 remain=157 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=307 remain=105 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=363 remain=49 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=398 remain=14 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=412 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=412 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224329030988 [RESULT URL CHECK] https://blog.naver.com/pjy287/224329030988 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=289 blog_id=pjy287 blog_post_no=224329030988 url=https://blog.naver.com/pjy287/224329030988 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224329030988 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224329030988 [PUBLISH ELAPSED] queue_id=190 elapsed=476.6s avg=337.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 6, 7, 8] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=0 [PIPELINE RUN FINISH] run_id=595, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 4 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 [2026-06-27 07:00:17] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-27 18:34:43] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [2026-06-28 07:00:01] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-28 09:56:12] END 二쇨컙 諛쒗뻾 07:00~23:00 code=1 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1576:20260628104515 [PIPELINE RUN START] run_id=611, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=3 [PIPELINE RUN FINISH] run_id=611, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-28 10:45:15] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-28 10:45:16] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:8184:20260628105834 [PIPELINE RUN START] run_id=612, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=3 [PIPELINE RUN FINISH] run_id=612, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-28 10:58:34] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-28 10:58:35] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9460:20260628111005 [PIPELINE RUN START] run_id=613, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=3 [PIPELINE RUN FINISH] run_id=613, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-28 11:10:05] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-28 11:10:05] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [2026-06-29 07:00:17] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-29 08:48:41] END 二쇨컙 諛쒗뻾 07:00~23:00 code=1 [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-06-29 08:53:13] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-29 08:53:13] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-06-29 08:54:22] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-29 08:54:22] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:3744:20260629091714 [PIPELINE RUN START] run_id=626, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=290 realtor_id=4 article_no=2629171313 sort_at=2026-06-27 23:13:11 today_published_count=0 ================================================================================ [QUEUE START] queue_id=290, realtor_id=4, draft_id=404, article_no=2629171313 [DRAFT HTML CHECK] clipboard_len=13276, draft_len=13276, plain_len=524 ================================================================================ [INTEGRITY OK] queue_id=290, draft_id=404, article_no=2629171313 [BLOG ID] pjy287 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_08_2629171313_1782657283.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12898 plain_len= 524 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_290_2629171313_after_paste_20260629_091801.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_290_2629171313_after_paste_20260629_091801.txt [EDITOR DEBUG LEN] html= 147755 text= 2566 [EDITOR VALIDATE] html_len=147755 text_len=2566 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=371 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=39 remain=332 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=95 remain=276 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=151 remain=220 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=205 remain=166 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=246 remain=125 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=293 remain=78 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=319 remain=52 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=371 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=371 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224330272772 [RESULT URL CHECK] https://blog.naver.com/pjy287/224330272772 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=404 blog_id=pjy287 blog_post_no=224330272772 url=https://blog.naver.com/pjy287/224330272772 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224330272772 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224330272772 [PUBLISH ELAPSED] queue_id=290 elapsed=437.9s avg=437.9s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=2 [PIPELINE RUN FINISH] run_id=626, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-29 09:17:14] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-29 09:24:33] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14524:20260630070003 [PIPELINE RUN START] run_id=637, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=300 realtor_id=8 article_no=2634916373 sort_at=2026-06-29 23:12:01 today_published_count=0 ================================================================================ [QUEUE START] queue_id=300, realtor_id=8, draft_id=414, article_no=2634916373 [DRAFT HTML CHECK] clipboard_len=16722, draft_len=16722, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=300, draft_id=414, article_no=2634916373 [BLOG ID] tjumji [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=8 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=tjumji&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 228, 'width': 62.09375, 'height': 43} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_02_2634916373_1782744137.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16345 plain_len= 555 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_300_2634916373_after_paste_20260630_070048.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_300_2634916373_after_paste_20260630_070048.txt [EDITOR DEBUG LEN] html= 180002 text= 3592 [EDITOR VALIDATE] html_len=180002 text_len=3592 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=542 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=64 remain=478 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=113 remain=429 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=147 remain=395 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=185 remain=357 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=223 remain=319 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=291 remain=251 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=361 remain=181 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=414 remain=128 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=441 remain=101 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=491 remain=51 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=542 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=542 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 565, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/tjumji/224331361241 [RESULT URL CHECK] https://blog.naver.com/tjumji/224331361241 [PRIVATE QUEUE COUNT] realtor_id=8 count=1 [PRIVATE START] private_queue_id=46 realtor_id=8 article_no=2629047757 blog_id=tjumji blog_post_no=224330259893 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=tjumji&logNo=224330259893 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=46 article_no=2629047757 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=414 blog_id=tjumji blog_post_no=224331361241 url=https://blog.naver.com/tjumji/224331361241 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/tjumji/224331361241 [BLOG RESULT PARSED] blog_id=tjumji blog_post_no=224331361241 [PUBLISH ELAPSED] queue_id=300 elapsed=645.4s avg=645.4s [SMART SLEEP CALC] remaining_seconds=56951 remaining_count=2 target_cycle=28475.5 avg_publish=645.4 base_sleep=27830.1 range=13915~13915 selected=13915 [SLEEP] 13915s before next queue [PUBLISH TARGET SELECTED] queue_id=297 realtor_id=5 article_no=2634720389 sort_at=2026-06-29 23:11:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=297, realtor_id=5, draft_id=411, article_no=2634720389 [DRAFT HTML CHECK] clipboard_len=15369, draft_len=15369, plain_len=522 ================================================================================ [INTEGRITY OK] queue_id=297, draft_id=411, article_no=2634720389 [BLOG ID] boram8857 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_04_2634720389_1782744128.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14991 plain_len= 522 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_297_2634720389_after_paste_20260630_110329.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_297_2634720389_after_paste_20260630_110329.txt [EDITOR DEBUG LEN] html= 163250 text= 3170 [EDITOR VALIDATE] html_len=163250 text_len=3170 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=389 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=69 remain=320 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=126 remain=263 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=167 remain=222 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=193 remain=196 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=230 remain=159 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=261 remain=128 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=327 remain=62 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=382 remain=7 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=389 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=389 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224331564185 [RESULT URL CHECK] https://blog.naver.com/boram8857/224331564185 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=411 blog_id=boram8857 blog_post_no=224331564185 url=https://blog.naver.com/boram8857/224331564185 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224331564185 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224331564185 [PUBLISH ELAPSED] queue_id=297 elapsed=455.3s avg=550.4s [SMART SLEEP CALC] remaining_seconds=42580 remaining_count=1 target_cycle=42580.0 avg_publish=550.4 base_sleep=42029.6 range=21014~21014 selected=21014 [SLEEP] 21014s before next queue [PUBLISH TARGET SELECTED] queue_id=296 realtor_id=4 article_no=2634943845 sort_at=2026-06-29 23:11:08 today_published_count=0 ================================================================================ [QUEUE START] queue_id=296, realtor_id=4, draft_id=410, article_no=2634943845 [DRAFT HTML CHECK] clipboard_len=17865, draft_len=17865, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=296, draft_id=410, article_no=2634943845 [BLOG ID] pjy287 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_07_2634943845_1782744125.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17487 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_296_2634943845_after_paste_20260630_170118.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_296_2634943845_after_paste_20260630_170118.txt [EDITOR DEBUG LEN] html= 180089 text= 2955 [EDITOR VALIDATE] html_len=180089 text_len=2955 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=584 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=32 remain=552 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=81 remain=503 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=134 remain=450 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=175 remain=409 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=226 remain=358 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=277 remain=307 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=308 remain=276 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=372 remain=212 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=424 remain=160 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=451 remain=133 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=519 remain=65 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=546 remain=38 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=580 remain=4 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=584 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=584 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224331983675 [RESULT URL CHECK] https://blog.naver.com/pjy287/224331983675 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=410 blog_id=pjy287 blog_post_no=224331983675 url=https://blog.naver.com/pjy287/224331983675 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224331983675 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224331983675 [PUBLISH ELAPSED] queue_id=296 elapsed=649.6s avg=583.4s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[8, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=4 [PIPELINE RUN FINISH] run_id=637, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-06-30 07:00:03] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-06-30 17:11:23] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:13328:20260701070011 [PIPELINE RUN START] run_id=648, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=289 realtor_id=8 article_no=2629046308 sort_at=2026-06-27 23:18:30 today_published_count=0 ================================================================================ [QUEUE START] queue_id=289, realtor_id=8, draft_id=403, article_no=2629046308 [DRAFT HTML CHECK] clipboard_len=14816, draft_len=14816, plain_len=543 ================================================================================ [INTEGRITY OK] queue_id=289, draft_id=403, article_no=2629046308 [BLOG ID] tjumji [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=8 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Ftjumji%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_8.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/tjumji?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=tjumji&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 228, 'width': 62.09375, 'height': 43} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_RED_POSTER_PHOTO_LAYOUT_03_2629046308_1782614711.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14439 plain_len= 543 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_289_2629046308_after_paste_20260701_070056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_289_2629046308_after_paste_20260701_070056.txt [EDITOR DEBUG LEN] html= 164582 text= 3105 [EDITOR VALIDATE] html_len=164582 text_len=3105 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=587 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=67 remain=520 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=94 remain=493 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=162 remain=425 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=210 remain=377 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=258 remain=329 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=292 remain=295 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=335 remain=252 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=382 remain=205 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=415 remain=172 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=480 remain=107 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=538 remain=49 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=575 remain=12 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=587 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=587 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 565, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/tjumji/224332577668 [RESULT URL CHECK] https://blog.naver.com/tjumji/224332577668 [PRIVATE QUEUE NONE] realtor_id=8 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=403 blog_id=tjumji blog_post_no=224332577668 url=https://blog.naver.com/tjumji/224332577668 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/tjumji/224332577668 [BLOG RESULT PARSED] blog_id=tjumji blog_post_no=224332577668 [PUBLISH ELAPSED] queue_id=289 elapsed=652.8s avg=652.8s [SMART SLEEP CALC] remaining_seconds=56935 remaining_count=2 target_cycle=28467.5 avg_publish=652.8 base_sleep=27814.7 range=13907~13907 selected=13907 [SLEEP] 13907s before next queue [PUBLISH TARGET SELECTED] queue_id=286 realtor_id=5 article_no=2628803972 sort_at=2026-06-27 23:13:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=286, realtor_id=5, draft_id=400, article_no=2628803972 [DRAFT HTML CHECK] clipboard_len=16228, draft_len=16228, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=286, draft_id=400, article_no=2628803972 [BLOG ID] boram8857 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fboram8857%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_01_2628803972_1782614676.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15850 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_286_2628803972_after_paste_20260701_110336.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_286_2628803972_after_paste_20260701_110336.txt [EDITOR DEBUG LEN] html= 171108 text= 3393 [EDITOR VALIDATE] html_len=171108 text_len=3393 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=461 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=47 remain=414 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=83 remain=378 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=110 remain=351 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=161 remain=300 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=218 remain=243 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=250 remain=211 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=302 remain=159 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=333 remain=128 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=400 remain=61 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=453 remain=8 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=461 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=461 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224332791255 [RESULT URL CHECK] https://blog.naver.com/boram8857/224332791255 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=400 blog_id=boram8857 blog_post_no=224332791255 url=https://blog.naver.com/boram8857/224332791255 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224332791255 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224332791255 [PUBLISH ELAPSED] queue_id=286 elapsed=526.9s avg=589.8s [SMART SLEEP CALC] remaining_seconds=42501 remaining_count=1 target_cycle=42501.0 avg_publish=589.8 base_sleep=41911.2 range=20955~20955 selected=20955 [SLEEP] 20955s before next queue [PUBLISH TARGET SELECTED] queue_id=285 realtor_id=4 article_no=2629170313 sort_at=2026-06-27 23:13:11 today_published_count=0 ================================================================================ [QUEUE START] queue_id=285, realtor_id=4, draft_id=399, article_no=2629170313 [DRAFT HTML CHECK] clipboard_len=18495, draft_len=18495, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=285, draft_id=399, article_no=2629170313 [BLOG ID] pjy287 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [V15 STEP112 HOTFIX ACTIVE] existing_draft_popup/blog_id/session [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_write_goto [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 target_url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fblog.naver.com%2Fpjy287%3FRedirect=Write%26categoryNo=2 [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [SESSION RECOVERED] write redirect [WRITE DIRECT BLOG_ID GOTO] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=inside_click_write_blog_id_after_goto [EXISTING DRAFT POPUP NONE] label=after_relogin_write_goto [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [EXISTING DRAFT POPUP NONE] label=wait_editor_1 [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write&categoryNo=2 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&categoryNo=2&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [EXISTING DRAFT POPUP NONE] label=after_write_frame_found_before_title [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [EXISTING DRAFT POPUP NONE] label=before_representative_upload [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/06/header_APT_DARK_REC_PHOTO_LAYOUT_05_2629170313_1782614673.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [EXISTING DRAFT POPUP NONE] label=before_body_input [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18120 plain_len= 542 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_285_2629170313_after_paste_20260701_170140.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_285_2629170313_after_paste_20260701_170140.txt [EDITOR DEBUG LEN] html= 185632 text= 2931 [EDITOR VALIDATE] html_len=185632 text_len=2931 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [HUMAN WAIT BEFORE PUBLISH START] wait_seconds=308 range=300~600 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=27 remain=281 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=88 remain=220 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=125 remain=183 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=163 remain=145 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=193 remain=115 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=241 remain=67 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=287 remain=21 [HUMAN WAIT BEFORE PUBLISH PROGRESS] elapsed=308 remain=0 [HUMAN WAIT BEFORE PUBLISH DONE] elapsed=308 [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH CLICK START] [FINAL PUBLISH SELECTOR FOUND] root=frame_1 selector=button:has-text("발행") count=4 [FINAL PUBLISH CANDIDATE] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 box={'x': 1239, 'y': 536, 'width': 110, 'height': 40} [FINAL PUBLISH CLICK SUCCESS] root=frame_1 selector=button:has-text("발행") idx=3 text=발행 [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224333200684 [RESULT URL CHECK] https://blog.naver.com/pjy287/224333200684 [PRIVATE QUEUE COUNT] realtor_id=4 count=1 [PRIVATE START] private_queue_id=47 realtor_id=4 article_no=2629171313 blog_id=pjy287 blog_post_no=224330272772 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224330272772 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=47 article_no=2629171313 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=399 blog_id=pjy287 blog_post_no=224333200684 url=https://blog.naver.com/pjy287/224333200684 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224333200684 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224333200684 [PUBLISH ELAPSED] queue_id=285 elapsed=412.7s avg=530.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[8, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=4 [PIPELINE RUN FINISH] run_id=648, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-01 07:00:11] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-01 17:07:47] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [2026-07-02 07:00:18] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-02 08:51:00] END 二쇨컙 諛쒗뻾 07:00~23:00 code=3221225786 [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-07-03 07:00:19] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-03 07:00:19] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-07-04 07:00:11] START 1/1 二쇨컙 諛쒗뻾 07:00~23:00 CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-04 07:00:11] END 二쇨컙 諛쒗뻾 07:00~23:00 code=0 [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-07-04 12:25:32] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-04 12:25:33] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [2026-07-04 12:41:14] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-04 13:09:33] END �꽌踰� 諛쒗뻾 07:00~23:00 code=1 [PUBLISH WORKER ARGS] {'limit': 1000, 'realtor_id': None, 'sleep': 60, 'until_hour': None, 'until_time': '23:00', 'stale_minutes': 90, 'retry_session_hold': False, 'only_night_window': False, 'window_start_hour': 22, 'window_end_hour': 8, 'max_retry': 2, 'no_auto_reset_retry_failed': False, 'smart_sleep': True, 'min_sleep': 20, 'max_sleep': 900, 'sleep_jitter': 0.5, 'estimated_publish_seconds': 600, 'per_realtor_daily_limit': 1, 'lock_ttl_minutes': 720, 'no_db_lock': False, 'no_lock': False} [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=6644 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=6644 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 6608 [DB LOCK EXISTS] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:6644:20260704124114 pid=6644 alive=False insert_error=(1062, "Duplicate entry 'publish_worker' for key 'PRIMARY'") [DB STALE LOCK REMOVE] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:6644:20260704124114 [DB LOCK ACQUIRED AFTER STALE REMOVE] publish_worker owner=publish_worker:HONGHEE-IP:6608:20260704131412 [PIPELINE RUN START] run_id=698, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=358 realtor_id=9 article_no=2630072730 execution_target=server sort_at=2026-06-30 23:17:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=358, realtor_id=9, draft_id=470, article_no=2630072730 [DRAFT HTML CHECK] clipboard_len=19094, draft_len=19094, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=358, draft_id=470, article_no=2630072730 [BLOG ID] happy7gs77 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_9.json [STEP150 SERVER PUBLISH ACTIVE] session/write-frame recovery [NAVER DIALOG HANDLER INSTALLED] [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [C4 WRITE RECOVERY CYCLE START] cycle=1 blog_id=happy7gs77 [C4 WRITE GOTO TRY] cycle=1 https://blog.naver.com/happy7gs77?Redirect=Write&categoryNo=2 [NAVER DIALOG DETECTED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [NAVER DIALOG DISMISSED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [C4 WRITE GOTO URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_after_goto [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_after_goto_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=1 box={'x': 691.390625, 'y': 497, 'width': 18, 'height': 18} [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box={'x': 1107.0625, 'y': 117, 'width': 25, 'height': 25} [C4 WAIT WRITE FRAME] label=cycle_1 1/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_1 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_1_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 2/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_2 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_2_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 3/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_3 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_3_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 4/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_4 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_4_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 5/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_5 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_5_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 6/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_6 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_6_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 7/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_7 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_7_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 8/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_8 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_8_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 9/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_9 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_9_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 10/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_10 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_10_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 11/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_11 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_11_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 12/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_12 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_12_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 13/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_13 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_13_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 14/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_14 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_14_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 15/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_15 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_15_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 16/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_16 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_16_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 17/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_17 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_17_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 18/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_18 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_18_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=6404547225.421352&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WRITE FRAME MISS] iframe not found after url=https://blog.naver.com/happy7gs77?Redirect=Write&categoryNo=2, current_url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4 WRITE GOTO TRY] cycle=1 https://blog.naver.com/PostWriteForm.naver?blogId=happy7gs77 [NAVER DIALOG DETECTED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [NAVER DIALOG DISMISSED] 게시물이 삭제되었거나 다른 페이지로 변경되었습니다. [C4 WRITE GOTO URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_after_goto [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_after_goto_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [C4 WAIT WRITE FRAME] label=cycle_1 1/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_1 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_1_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 2/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_2 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_2_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 3/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_3 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_3_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 4/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_4 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_4_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 5/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_5 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_5_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 6/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_6 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_6_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 7/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_7 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_7_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 8/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_8 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_8_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 9/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_9 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_9_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 10/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_10 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_10_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 11/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_11 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_11_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 12/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_12 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_12_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 13/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_13 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_13_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}] [C4 WAIT WRITE FRAME] label=cycle_1 14/18 url=https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [C4-RECOVERY CLOSE LAYERS] cycle_1_14 [GUIDE CLOSE] button:has-text("닫기") / count=1 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [EXISTING DRAFT POPUP NONE] label=cycle_1_14_existing_draft [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('취소') idx=1 box=None [C4-RECOVERY LAYER CLICK] button:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=0 box=None [C4-RECOVERY LAYER CLICK] button:has-text('확인') idx=1 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=0 box=None [C4-RECOVERY LAYER CLICK] a:has-text('닫기') idx=1 box=None [WRITE FRAME NOT FOUND DEBUG] [{'idx': 0, 'name': '', 'url': 'https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0'}, {'idx': 1, 'name': 'blog_home_1_tgtLREC', 'url': 'https://siape.veta.naver.com/fxshow?su=SU10370#frameId=blog_home_1_tgtLREC&origin=https%3A%2F%2Fsection.blog.naver.com&msgToken=870229871.017812&isFluid=false&runtime=NDPSDK'}, {'idx': 2, 'name': 'padding', 'url': 'about:blank'}, {'idx': 3, 'name': 'padding', 'url': 'about:blank'}, {'idx': 4, 'name': 'padding', 'url': 'about:blank'}, {'idx': 5, 'name': 'padding', 'url': 'about:blank'}]D:\honghee\blog_api\workers\publish_worker.py:3557: SyntaxWarning: invalid escape sequence '\s' const norm = (s) => String(s || '').replace(/\s+/g, ' ').trim(); [PUBLISH WORKER ARGS] {'limit': 1000, 'realtor_id': None, 'sleep': 60, 'until_hour': None, 'until_time': '23:00', 'stale_minutes': 90, 'retry_session_hold': False, 'only_night_window': False, 'window_start_hour': 22, 'window_end_hour': 8, 'max_retry': 2, 'no_auto_reset_retry_failed': False, 'smart_sleep': True, 'min_sleep': 20, 'max_sleep': 900, 'sleep_jitter': 0.5, 'estimated_publish_seconds': 600, 'per_realtor_daily_limit': 1, 'lock_ttl_minutes': 720, 'no_db_lock': False, 'no_lock': False} [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=6608 alive=True [LOCKED] publish_worker already running [LOCK FILE] D:/honghee/blog_api/storage\publish_worker.lock [2026-07-04 13:36:13] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-04 13:36:14] END �꽌踰� 諛쒗뻾 07:00~23:00 code=2 D:\honghee\blog_api\workers\publish_worker.py:3557: SyntaxWarning: invalid escape sequence '\s' const norm = (s) => String(s || '').replace(/\s+/g, ' ').trim(); D:\honghee\blog_api\workers\publish_worker.py:3557: SyntaxWarning: invalid escape sequence '\s' const norm = (s) => String(s || '').replace(/\s+/g, ' ').trim(); [2026-07-04 13:59:21] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-04 14:24:19] END �꽌踰� 諛쒗뻾 07:00~23:00 code=1 [STEP154 SERVER PUBLISH ACTIVE] 20260618 backup baseline + smart sleep max 180s [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:8028:20260704142508 [PIPELINE RUN START] run_id=702, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=332 realtor_id=4 article_no=2635118599 sort_at=2026-06-30 23:12:55 today_published_count=0 ================================================================================ [QUEUE START] queue_id=332, realtor_id=4, draft_id=444, article_no=2635118599 [DRAFT HTML CHECK] clipboard_len=15672, draft_len=15672, plain_len=548 ================================================================================ [INTEGRITY OK] queue_id=332, draft_id=444, article_no=2635118599 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_01_2635118599_1783040150.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15294 plain_len= 548 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_332_2635118599_after_paste_20260704_142552.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_332_2635118599_after_paste_20260704_142552.txt [EDITOR DEBUG LEN] html= 168393 text= 2934 [EDITOR VALIDATE] html_len=168393 text_len=2934 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224336208498 [RESULT URL CHECK] https://blog.naver.com/pjy287/224336208498 [PRIVATE QUEUE COUNT] realtor_id=4 count=1 [PRIVATE START] private_queue_id=48 realtor_id=4 article_no=2629170313 blog_id=pjy287 blog_post_no=224333200684 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224333200684 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=48 article_no=2629170313 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=444 blog_id=pjy287 blog_post_no=224336208498 url=https://blog.naver.com/pjy287/224336208498 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224336208498 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224336208498 [PUBLISH ELAPSED] queue_id=332 elapsed=100.7s avg=100.7s [SMART SLEEP CALC] remaining_seconds=30789 remaining_count=1 target_cycle=30789.0 avg_publish=100.7 base_sleep=30688.3 range=15344~15344 selected=15344 [SLEEP] 15344s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=11 [PIPELINE RUN FINISH] run_id=702, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5824 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5824:20260705070013 [PIPELINE RUN START] run_id=708, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=358 realtor_id=9 article_no=2630072730 sort_at=2026-06-30 23:17:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=358, realtor_id=9, draft_id=470, article_no=2630072730 [DRAFT HTML CHECK] clipboard_len=19094, draft_len=19094, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=358, draft_id=470, article_no=2630072730 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_9.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=9 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_9.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/on_real_estate?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=on_real_estate&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_03_2630072730_1783040334.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18717 plain_len= 542 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_358_2630072730_after_paste_20260705_070059.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_358_2630072730_after_paste_20260705_070059.txt [EDITOR DEBUG LEN] html= 181636 text= 3349 [EDITOR VALIDATE] html_len=181636 text_len=3349 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224336724724 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224336724724 [PRIVATE QUEUE NONE] realtor_id=9 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=470 blog_id=on_real_estate blog_post_no=224336724724 url=https://blog.naver.com/on_real_estate/224336724724 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/on_real_estate/224336724724 [BLOG RESULT PARSED] blog_id=on_real_estate blog_post_no=224336724724 [PUBLISH ELAPSED] queue_id=358 elapsed=64.4s avg=64.4s [SMART SLEEP CALC] remaining_seconds=57521 remaining_count=2 target_cycle=28760.5 avg_publish=64.4 base_sleep=28696.1 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=331 realtor_id=4 article_no=2635118013 sort_at=2026-06-30 23:12:55 today_published_count=0 ================================================================================ [QUEUE START] queue_id=331, realtor_id=4, draft_id=443, article_no=2635118013 [DRAFT HTML CHECK] clipboard_len=18814, draft_len=18814, plain_len=521 ================================================================================ [INTEGRITY OK] queue_id=331, draft_id=443, article_no=2635118013 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2635118013_1783040147.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18437 plain_len= 521 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_331_2635118013_after_paste_20260705_110110.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_331_2635118013_after_paste_20260705_110110.txt [EDITOR DEBUG LEN] html= 184777 text= 2884 [EDITOR VALIDATE] html_len=184777 text_len=2884 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224336859493 [RESULT URL CHECK] https://blog.naver.com/pjy287/224336859493 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=443 blog_id=pjy287 blog_post_no=224336859493 url=https://blog.naver.com/pjy287/224336859493 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224336859493 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224336859493 [PUBLISH ELAPSED] queue_id=331 elapsed=62.3s avg=63.4s [SMART SLEEP CALC] remaining_seconds=43110 remaining_count=1 target_cycle=43110.0 avg_publish=63.4 base_sleep=43046.6 range=21523~21523 selected=21523 [SLEEP] 21523s before next queue [PUBLISH TARGET SELECTED] queue_id=338 realtor_id=5 article_no=2634722126 sort_at=2026-06-29 23:11:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=338, realtor_id=5, draft_id=450, article_no=2634722126 [DRAFT HTML CHECK] clipboard_len=15384, draft_len=15384, plain_len=570 ================================================================================ [INTEGRITY OK] queue_id=338, draft_id=450, article_no=2634722126 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_08_2634722126_1783040170.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15001 plain_len= 570 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_338_2634722126_after_paste_20260705_170057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_338_2634722126_after_paste_20260705_170057.txt [EDITOR DEBUG LEN] html= 167465 text= 2919 [EDITOR VALIDATE] html_len=167465 text_len=2919 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224337117134 [RESULT URL CHECK] https://blog.naver.com/boram8857/224337117134 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=450 blog_id=boram8857 blog_post_no=224337117134 url=https://blog.naver.com/boram8857/224337117134 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224337117134 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224337117134 [PUBLISH ELAPSED] queue_id=338 elapsed=64.5s avg=63.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[9, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=11 [PIPELINE RUN FINISH] run_id=708, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-05 07:00:13] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-05 17:01:17] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4080 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4080:20260706070020 [PIPELINE RUN START] run_id=714, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=375 realtor_id=9 article_no=2635246490 sort_at=2026-07-01 23:18:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=375, realtor_id=9, draft_id=497, article_no=2635246490 [DRAFT HTML CHECK] clipboard_len=18073, draft_len=18073, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=375, draft_id=497, article_no=2635246490 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_9.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=9 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_9.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/on_real_estate?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=on_real_estate&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_NOTE_CARD_PHOTO_LAYOUT_06_2635246490_1783263567.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17697 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_375_2635246490_after_paste_20260706_070104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_375_2635246490_after_paste_20260706_070104.txt [EDITOR DEBUG LEN] html= 177371 text= 3482 [EDITOR VALIDATE] html_len=177371 text_len=3482 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224337616977 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224337616977 [PRIVATE QUEUE COUNT] realtor_id=9 count=2 [PRIVATE START] private_queue_id=58 realtor_id=9 article_no=2630072730 blog_id=on_real_estate blog_post_no=224336724724 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336724724 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=58 article_no=2630072730 [PRIVATE START] private_queue_id=59 realtor_id=9 article_no=2630073311 blog_id=on_real_estate blog_post_no=224336191421 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=on_real_estate&logNo=224336191421[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 1900 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1900:20260707070002 [PIPELINE RUN START] run_id=720, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=378 realtor_id=4 article_no=2635530742 sort_at=2026-07-02 23:12:29 today_published_count=0 ================================================================================ [QUEUE START] queue_id=378, realtor_id=4, draft_id=500, article_no=2635530742 [DRAFT HTML CHECK] clipboard_len=20329, draft_len=20329, plain_len=558 ================================================================================ [INTEGRITY OK] queue_id=378, draft_id=500, article_no=2635530742 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_08_2635530742_1783349901.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19952 plain_len= 558 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_378_2635530742_after_paste_20260707_070047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_378_2635530742_after_paste_20260707_070047.txt [EDITOR DEBUG LEN] html= 193257 text= 2957 [EDITOR VALIDATE] html_len=193257 text_len=2957 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224338784873 [RESULT URL CHECK] https://blog.naver.com/pjy287/224338784873 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=500 blog_id=pjy287 blog_post_no=224338784873 url=https://blog.naver.com/pjy287/224338784873 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224338784873 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224338784873 [PUBLISH ELAPSED] queue_id=378 elapsed=63.2s avg=63.2s [SMART SLEEP CALC] remaining_seconds=57533 remaining_count=2 target_cycle=28766.5 avg_publish=63.2 base_sleep=28703.3 range=14351~14351 selected=14351 [SLEEP] 14351s before next queue [PUBLISH TARGET SELECTED] queue_id=379 realtor_id=5 article_no=2635361499 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=379, realtor_id=5, draft_id=501, article_no=2635361499 [DRAFT HTML CHECK] clipboard_len=16591, draft_len=16591, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=379, draft_id=501, article_no=2635361499 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_06_2635361499_1783349904.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16213 plain_len= 562 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_379_2635361499_after_paste_20260707_110108.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_379_2635361499_after_paste_20260707_110108.txt [EDITOR DEBUG LEN] html= 172391 text= 3594 [EDITOR VALIDATE] html_len=172391 text_len=3594 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224338979242 [RESULT URL CHECK] https://blog.naver.com/boram8857/224338979242 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=501 blog_id=boram8857 blog_post_no=224338979242 url=https://blog.naver.com/boram8857/224338979242 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224338979242 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224338979242 [PUBLISH ELAPSED] queue_id=379 elapsed=64.4s avg=63.8s [SMART SLEEP CALC] remaining_seconds=43111 remaining_count=1 target_cycle=43111.0 avg_publish=63.8 base_sleep=43047.2 range=21523~21523 selected=21523 [SLEEP] 21523s before next queue [PUBLISH TARGET SELECTED] queue_id=380 realtor_id=10 article_no=2630139881 sort_at=2026-06-30 23:18:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=380, realtor_id=10, draft_id=502, article_no=2630139881 [DRAFT HTML CHECK] clipboard_len=21711, draft_len=21711, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=380, draft_id=502, article_no=2630139881 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_05_2630139881_1783349906.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 21334 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 16 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_380_2630139881_after_paste_20260707_170056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_380_2630139881_after_paste_20260707_170056.txt [EDITOR DEBUG LEN] html= 203245 text= 3651 [EDITOR VALIDATE] html_len=203245 text_len=3651 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224339383459 [RESULT URL CHECK] https://blog.naver.com/8249686/224339383459 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=502 blog_id=8249686 blog_post_no=224339383459 url=https://blog.naver.com/8249686/224339383459 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224339383459 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224339383459 [PUBLISH ELAPSED] queue_id=380 elapsed=64.2s avg=64.0s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=13 [PIPELINE RUN FINISH] run_id=720, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-07 07:00:02] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-07 17:01:15] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 10248 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:10248:20260708070012 [PIPELINE RUN START] run_id=726, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=384 realtor_id=10 article_no=2635750019 sort_at=2026-07-06 23:13:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=384, realtor_id=10, draft_id=506, article_no=2635750019 [DRAFT HTML CHECK] clipboard_len=23539, draft_len=23539, plain_len=550 ================================================================================ [INTEGRITY OK] queue_id=384, draft_id=506, article_no=2635750019 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2635750019_1783436269.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 23162 plain_len= 550 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 21 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_384_2635750019_after_paste_20260708_070057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_384_2635750019_after_paste_20260708_070057.txt [EDITOR DEBUG LEN] html= 213491 text= 3657 [EDITOR VALIDATE] html_len=213491 text_len=3657 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224339912769 [RESULT URL CHECK] https://blog.naver.com/8249686/224339912769 [PRIVATE QUEUE COUNT] realtor_id=10 count=1 [PRIVATE START] private_queue_id=62 realtor_id=10 article_no=2630139881 blog_id=8249686 blog_post_no=224339383459 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=8249686&logNo=224339383459 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=62 article_no=2630139881 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=506 blog_id=8249686 blog_post_no=224339912769 url=https://blog.naver.com/8249686/224339912769 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224339912769 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224339912769 [PUBLISH ELAPSED] queue_id=384 elapsed=101.0s avg=101.0s [SMART SLEEP CALC] remaining_seconds=57485 remaining_count=1 target_cycle=57485.0 avg_publish=101.0 base_sleep=57384.0 range=28692~28692 selected=28692 [SLEEP] 28692s before next queue [PUBLISH TARGET SELECTED] queue_id=383 realtor_id=5 article_no=2636239907 sort_at=2026-07-06 23:12:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=383, realtor_id=5, draft_id=505, article_no=2636239907 [DRAFT HTML CHECK] clipboard_len=17443, draft_len=17443, plain_len=572 ================================================================================ [INTEGRITY OK] queue_id=383, draft_id=505, article_no=2636239907 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2636239907_1783436266.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17065 plain_len= 572 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_383_2636239907_after_paste_20260708_150055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_383_2636239907_after_paste_20260708_150055.txt [EDITOR DEBUG LEN] html= 174519 text= 3508 [EDITOR VALIDATE] html_len=174519 text_len=3508 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224340381657 [RESULT URL CHECK] https://blog.naver.com/boram8857/224340381657 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=505 blog_id=boram8857 blog_post_no=224340381657 url=https://blog.naver.com/boram8857/224340381657 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224340381657 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224340381657 [PUBLISH ELAPSED] queue_id=383 elapsed=64.5s avg=82.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=13 [PIPELINE RUN FINISH] run_id=726, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-08 07:00:12] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-08 15:01:15] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4448 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4448:20260709070002 [PIPELINE RUN START] run_id=732, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=388 realtor_id=10 article_no=2636656906 sort_at=2026-07-08 23:12:27 today_published_count=0 ================================================================================ [QUEUE START] queue_id=388, realtor_id=10, draft_id=510, article_no=2636656906 [DRAFT HTML CHECK] clipboard_len=23656, draft_len=23656, plain_len=527 ================================================================================ [INTEGRITY OK] queue_id=388, draft_id=510, article_no=2636656906 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2636656906_1783522675.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 23279 plain_len= 527 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 22 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_388_2636656906_after_paste_20260709_070046.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_388_2636656906_after_paste_20260709_070046.txt [EDITOR DEBUG LEN] html= 212619 text= 3434 [EDITOR VALIDATE] html_len=212619 text_len=3434 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224341041327 [RESULT URL CHECK] https://blog.naver.com/8249686/224341041327 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=510 blog_id=8249686 blog_post_no=224341041327 url=https://blog.naver.com/8249686/224341041327 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224341041327 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224341041327 [PUBLISH ELAPSED] queue_id=388 elapsed=63.0s avg=63.0s [SMART SLEEP CALC] remaining_seconds=57534 remaining_count=1 target_cycle=57534.0 avg_publish=63.0 base_sleep=57471.0 range=28735~28735 selected=28735 [SLEEP] 28735s before next queue [PUBLISH TARGET SELECTED] queue_id=387 realtor_id=5 article_no=2636251366 sort_at=2026-07-06 23:12:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=387, realtor_id=5, draft_id=509, article_no=2636251366 [DRAFT HTML CHECK] clipboard_len=16454, draft_len=16454, plain_len=504 ================================================================================ [INTEGRITY OK] queue_id=387, draft_id=509, article_no=2636251366 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_03_2636251366_1783522673.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16076 plain_len= 504 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_387_2636251366_after_paste_20260709_150044.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_387_2636251366_after_paste_20260709_150044.txt [EDITOR DEBUG LEN] html= 168506 text= 3007 [EDITOR VALIDATE] html_len=168506 text_len=3007 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224341487526 [RESULT URL CHECK] https://blog.naver.com/boram8857/224341487526 [PRIVATE QUEUE COUNT] realtor_id=5 count=1 [PRIVATE START] private_queue_id=63 realtor_id=5 article_no=2634722126 blog_id=boram8857 blog_post_no=224337117134 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224337117134 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=63 article_no=2634722126 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=509 blog_id=boram8857 blog_post_no=224341487526 url=https://blog.naver.com/boram8857/224341487526 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224341487526 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224341487526 [PUBLISH ELAPSED] queue_id=387 elapsed=100.9s avg=81.9s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=13 [PIPELINE RUN FINISH] run_id=732, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-09 07:00:02] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-09 15:01:41] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 2716 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2716:20260710070011 [PIPELINE RUN START] run_id=738, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=392 realtor_id=10 article_no=2636903622 sort_at=2026-07-09 23:12:31 today_published_count=0 ================================================================================ [QUEUE START] queue_id=392, realtor_id=10, draft_id=514, article_no=2636903622 [DRAFT HTML CHECK] clipboard_len=22529, draft_len=22529, plain_len=556 ================================================================================ [INTEGRITY OK] queue_id=392, draft_id=514, article_no=2636903622 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2636903622_1783609061.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 22151 plain_len= 556 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 19 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_392_2636903622_after_paste_20260710_070057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_392_2636903622_after_paste_20260710_070057.txt [EDITOR DEBUG LEN] html= 207479 text= 3390 [EDITOR VALIDATE] html_len=207479 text_len=3390 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224342112170 [RESULT URL CHECK] https://blog.naver.com/8249686/224342112170 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=514 blog_id=8249686 blog_post_no=224342112170 url=https://blog.naver.com/8249686/224342112170 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224342112170 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224342112170 [PUBLISH ELAPSED] queue_id=392 elapsed=64.2s avg=64.2s [SMART SLEEP CALC] remaining_seconds=57523 remaining_count=1 target_cycle=57523.0 avg_publish=64.2 base_sleep=57458.8 range=28729~28729 selected=28729 [SLEEP] 28729s before next queue [PUBLISH TARGET SELECTED] queue_id=391 realtor_id=5 article_no=2636935405 sort_at=2026-07-09 23:12:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=391, realtor_id=5, draft_id=513, article_no=2636935405 [DRAFT HTML CHECK] clipboard_len=16614, draft_len=16614, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=391, draft_id=513, article_no=2636935405 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2636935405_1783609058.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16237 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_391_2636935405_after_paste_20260710_150050.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_391_2636935405_after_paste_20260710_150050.txt [EDITOR DEBUG LEN] html= 173114 text= 3622 [EDITOR VALIDATE] html_len=173114 text_len=3622 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224342534036 [RESULT URL CHECK] https://blog.naver.com/boram8857/224342534036 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=513 blog_id=boram8857 blog_post_no=224342534036 url=https://blog.naver.com/boram8857/224342534036 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224342534036 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224342534036 [PUBLISH ELAPSED] queue_id=391 elapsed=64.2s avg=64.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=13 [PIPELINE RUN FINISH] run_id=738, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-10 07:00:11] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-10 15:01:10] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 10076 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:10076:20260711070018 [PIPELINE RUN START] run_id=744, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=396 realtor_id=10 article_no=2637234178 sort_at=2026-07-10 23:12:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=396, realtor_id=10, draft_id=518, article_no=2637234178 [DRAFT HTML CHECK] clipboard_len=24778, draft_len=24778, plain_len=569 ================================================================================ [INTEGRITY OK] queue_id=396, draft_id=518, article_no=2637234178 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_08_2637234178_1783695481.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 24400 plain_len= 569 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 25 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_396_2637234178_after_paste_20260711_070103.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_396_2637234178_after_paste_20260711_070103.txt [EDITOR DEBUG LEN] html= 218696 text= 3457 [EDITOR VALIDATE] html_len=218696 text_len=3457 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224343131795 [RESULT URL CHECK] https://blog.naver.com/8249686/224343131795 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=518 blog_id=8249686 blog_post_no=224343131795 url=https://blog.naver.com/8249686/224343131795 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224343131795 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224343131795 [PUBLISH ELAPSED] queue_id=396 elapsed=63.2s avg=63.2s [SMART SLEEP CALC] remaining_seconds=57517 remaining_count=1 target_cycle=57517.0 avg_publish=63.2 base_sleep=57453.8 range=28726~28726 selected=28726 [SLEEP] 28726s before next queue [PUBLISH TARGET SELECTED] queue_id=395 realtor_id=5 article_no=2637169349 sort_at=2026-07-10 23:12:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=395, realtor_id=5, draft_id=517, article_no=2637169349 [DRAFT HTML CHECK] clipboard_len=16774, draft_len=16774, plain_len=547 ================================================================================ [INTEGRITY OK] queue_id=395, draft_id=517, article_no=2637169349 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_06_2637169349_1783695478.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16396 plain_len= 547 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_395_2637169349_after_paste_20260711_150054.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_395_2637169349_after_paste_20260711_150054.txt [EDITOR DEBUG LEN] html= 173561 text= 3742 [EDITOR VALIDATE] html_len=173561 text_len=3742 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224343409645 [RESULT URL CHECK] https://blog.naver.com/boram8857/224343409645 [PRIVATE QUEUE COUNT] realtor_id=5 count=1 [PRIVATE START] private_queue_id=64 realtor_id=5 article_no=2636239907 blog_id=boram8857 blog_post_no=224340381657 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224340381657 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=64 article_no=2636239907 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=517 blog_id=boram8857 blog_post_no=224343409645 url=https://blog.naver.com/boram8857/224343409645 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224343409645 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224343409645 [PUBLISH ELAPSED] queue_id=395 elapsed=102.5s avg=82.9s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=13 [PIPELINE RUN FINISH] run_id=744, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-11 07:00:18] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-11 15:01:51] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 12948 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:12948:20260712070006 [PIPELINE RUN START] run_id=750, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=400 realtor_id=10 article_no=2637362501 sort_at=2026-07-11 23:12:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=400, realtor_id=10, draft_id=522, article_no=2637362501 [DRAFT HTML CHECK] clipboard_len=21216, draft_len=21216, plain_len=548 ================================================================================ [INTEGRITY OK] queue_id=400, draft_id=522, article_no=2637362501 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2637362501_1783781878.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20839 plain_len= 548 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_400_2637362501_after_paste_20260712_070052.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_400_2637362501_after_paste_20260712_070052.txt [EDITOR DEBUG LEN] html= 199122 text= 3564 [EDITOR VALIDATE] html_len=199122 text_len=3564 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224343883684 [RESULT URL CHECK] https://blog.naver.com/8249686/224343883684 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=522 blog_id=8249686 blog_post_no=224343883684 url=https://blog.naver.com/8249686/224343883684 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224343883684 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224343883684 [PUBLISH ELAPSED] queue_id=400 elapsed=64.1s avg=64.1s [SMART SLEEP CALC] remaining_seconds=57528 remaining_count=1 target_cycle=57528.0 avg_publish=64.1 base_sleep=57463.9 range=28731~28731 selected=28731 [SLEEP] 28731s before next queue [PUBLISH TARGET SELECTED] queue_id=399 realtor_id=5 article_no=2637176783 sort_at=2026-07-10 23:12:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=399, realtor_id=5, draft_id=521, article_no=2637176783 [DRAFT HTML CHECK] clipboard_len=15709, draft_len=15709, plain_len=573 ================================================================================ [INTEGRITY OK] queue_id=399, draft_id=521, article_no=2637176783 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_08_2637176783_1783781876.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15331 plain_len= 573 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_399_2637176783_after_paste_20260712_150047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_399_2637176783_after_paste_20260712_150047.txt [EDITOR DEBUG LEN] html= 164833 text= 3362 [EDITOR VALIDATE] html_len=164833 text_len=3362 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224344140136 [RESULT URL CHECK] https://blog.naver.com/boram8857/224344140136 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=521 blog_id=boram8857 blog_post_no=224344140136 url=https://blog.naver.com/boram8857/224344140136 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224344140136 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224344140136 [PUBLISH ELAPSED] queue_id=399 elapsed=64.3s avg=64.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=14 [PIPELINE RUN FINISH] run_id=750, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-12 07:00:06] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-12 15:01:07] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5412 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5412:20260713070014 [PIPELINE RUN START] run_id=756, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=403 realtor_id=5 article_no=2637508628 sort_at=2026-07-12 23:12:09 today_published_count=0 ================================================================================ [QUEUE START] queue_id=403, realtor_id=5, draft_id=525, article_no=2637508628 [DRAFT HTML CHECK] clipboard_len=19431, draft_len=19431, plain_len=514 ================================================================================ [INTEGRITY OK] queue_id=403, draft_id=525, article_no=2637508628 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_02_2637508628_1783868230.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19056 plain_len= 514 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_403_2637508628_after_paste_20260713_070058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_403_2637508628_after_paste_20260713_070058.txt [EDITOR DEBUG LEN] html= 189449 text= 3292 [EDITOR VALIDATE] html_len=189449 text_len=3292 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224344702390 [RESULT URL CHECK] https://blog.naver.com/boram8857/224344702390 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=525 blog_id=boram8857 blog_post_no=224344702390 url=https://blog.naver.com/boram8857/224344702390 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224344702390 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224344702390 [PUBLISH ELAPSED] queue_id=403 elapsed=62.5s avg=62.5s [SMART SLEEP CALC] remaining_seconds=57522 remaining_count=1 target_cycle=57522.0 avg_publish=62.5 base_sleep=57459.5 range=28729~28729 selected=28729 [SLEEP] 28729s before next queue [PUBLISH TARGET SELECTED] queue_id=404 realtor_id=10 article_no=2637351335 sort_at=2026-07-11 23:12:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=404, realtor_id=10, draft_id=526, article_no=2637351335 [DRAFT HTML CHECK] clipboard_len=21753, draft_len=21753, plain_len=539 ================================================================================ [INTEGRITY OK] queue_id=404, draft_id=526, article_no=2637351335 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_02_2637351335_1783868232.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 21375 plain_len= 539 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_404_2637351335_after_paste_20260713_150050.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_404_2637351335_after_paste_20260713_150050.txt [EDITOR DEBUG LEN] html= 203577 text= 3353 [EDITOR VALIDATE] html_len=203577 text_len=3353 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224345158633 [RESULT URL CHECK] https://blog.naver.com/8249686/224345158633 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=526 blog_id=8249686 blog_post_no=224345158633 url=https://blog.naver.com/8249686/224345158633 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224345158633 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224345158633 [PUBLISH ELAPSED] queue_id=404 elapsed=62.9s avg=62.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=14 [PIPELINE RUN FINISH] run_id=756, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-13 07:00:14] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-13 15:01:10] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5784 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5784:20260714070002 [PIPELINE RUN START] run_id=782, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=418 realtor_id=10 article_no=2637351574 sort_at=2026-07-11 23:12:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=418, realtor_id=10, draft_id=543, article_no=2637351574 [DRAFT HTML CHECK] clipboard_len=21454, draft_len=21454[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 7368 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:7368:20260714103224 [PIPELINE RUN START] run_id=785, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=421 realtor_id=13 article_no=2637489225 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=421, realtor_id=13, draft_id=546, article_no=2637489225 [DRAFT HTML CHECK] clipboard_len=20389, draft_len=20389, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=421, draft_id=546, article_no=2637489225 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=13 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/h9000082?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_04_2637489225_1783989918.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20011 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_421_2637489225_after_paste_20260714_103308.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_421_2637489225_after_paste_20260714_103308.txt [EDITOR DEBUG LEN] html= 192972 text= 3216 [EDITOR VALIDATE] html_len=192972 text_len=3216 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/h9000082/224346021424 [RESULT URL CHECK] https://blog.naver.com/h9000082/224346021424 [PRIVATE QUEUE NONE] realtor_id=13 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=546 blog_id=h9000082 blog_post_no=224346021424 url=https://blog.naver.com/h9000082/224346021424 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/h9000082/224346021424 [BLOG RESULT PARSED] blog_id=h9000082 blog_post_no=224346021424 [PUBLISH ELAPSED] queue_id=421 elapsed=62.3s avg=62.3s [SMART SLEEP CALC] remaining_seconds=44792 remaining_count=1 target_cycle=44792.0 avg_publish=62.3 base_sleep=44729.7 range=22364~22364 selected=22364 [SLEEP] 22364s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[13] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=15 [PIPELINE RUN FINISH] run_id=785, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 s\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-14 12:00:27] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 9276 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9276:20260714131202 [PIPELINE RUN START] run_id=793, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=15 [PIPELINE RUN FINISH] run_id=793, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-14 13:12:02] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-14 13:12:02] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 10276 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:10276:20260714131906 [PIPELINE RUN START] run_id=794, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=15 [PIPELINE RUN FINISH] run_id=794, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-14 13:19:05] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-14 13:19:06] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4980 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4980:20260715070011 [PIPELINE RUN START] run_id=800, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=435 realtor_id=10 article_no=2637362712 sort_at=2026-07-11 23:12:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=435, realtor_id=10, draft_id=560, article_no=2637362712 [DRAFT HTML CHECK] clipboard_len=20072, draft_len=20072, plain_len=546 ================================================================================ [INTEGRITY OK] queue_id=435, draft_id=560, article_no=2637362712 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=10 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_10.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/8249686?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/8249686?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/8249686?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=8249686&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_02_2637362712_1784041151.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19689 plain_len= 546 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_435_2637362712_after_paste_20260715_070056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_435_2637362712_after_paste_20260715_070056.txt [EDITOR DEBUG LEN] html= 194076 text= 2946 [EDITOR VALIDATE] html_len=194076 text_len=2946 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/8249686/224346995068 [RESULT URL CHECK] https://blog.naver.com/8249686/224346995068 [PRIVATE QUEUE NONE] realtor_id=10 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=560 blog_id=8249686 blog_post_no=224346995068 url=https://blog.naver.com/8249686/224346995068 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/8249686/224346995068 [BLOG RESULT PARSED] blog_id=8249686 blog_post_no=224346995068 [PUBLISH ELAPSED] queue_id=435 elapsed=64.2s avg=64.2s [SMART SLEEP CALC] remaining_seconds=57524 remaining_count=2 target_cycle=28762.0 avg_publish=64.2 base_sleep=28697.8 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=434 realtor_id=5 article_no=2636971662 sort_at=2026-07-09 23:12:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=434, realtor_id=5, draft_id=559, article_no=2636971662 [DRAFT HTML CHECK] clipboard_len=15758, draft_len=15758, plain_len=530 ================================================================================ [INTEGRITY OK] queue_id=434, draft_id=559, article_no=2636971662 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_01_2636971662_1784041148.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15380 plain_len= 530 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_434_2636971662_after_paste_20260715_110107.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_434_2636971662_after_paste_20260715_110107.txt [EDITOR DEBUG LEN] html= 161415 text= 3390 [EDITOR VALIDATE] html_len=161415 text_len=3390 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224347188492 [RESULT URL CHECK] https://blog.naver.com/boram8857/224347188492 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=559 blog_id=boram8857 blog_post_no=224347188492 url=https://blog.naver.com/boram8857/224347188492 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224347188492 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224347188492 [PUBLISH ELAPSED] queue_id=434 elapsed=62.5s avg=63.3s [SMART SLEEP CALC] remaining_seconds=43113 remaining_count=1 target_cycle=43113.0 avg_publish=63.3 base_sleep=43049.7 range=21524~21524 selected=21524 [SLEEP] 21524s before next queue [PUBLISH TARGET SELECTED] queue_id=441 realtor_id=17 article_no=2635776350 sort_at=2026-07-03 23:16:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=441, realtor_id=17, draft_id=566, article_no=2635776350 [DRAFT HTML CHECK] clipboard_len=15267, draft_len=15267, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=441, draft_id=566, article_no=2635776350 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=17 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/on_real_estate?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=on_real_estate&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_08_2635776350_1784041194.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14892 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_441_2635776350_after_paste_20260715_170054.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_441_2635776350_after_paste_20260715_170054.txt [EDITOR DEBUG LEN] html= 171033 text= 4237 [EDITOR VALIDATE] html_len=171033 text_len=4237 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224347584707 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224347584707 [PRIVATE QUEUE NONE] realtor_id=17 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=566 blog_id=on_real_estate blog_post_no=224347584707 url=https://blog.naver.com/on_real_estate/224347584707 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/on_real_estate/224347584707 [BLOG RESULT PARSED] blog_id=on_real_estate blog_post_no=224347584707 [PUBLISH ELAPSED] queue_id=441 elapsed=62.7s avg=63.1s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[17, 10, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=16 [PIPELINE RUN FINISH] run_id=800, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-15 07:00:10] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-15 17:01:13] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=3096 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=3096 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 14016 [DB LOCK EXISTS] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:3096:20260716070018 pid=3096 alive=False insert_error=(1062, "Duplicate entry 'publish_worker' for key 'PRIMARY'") [DB STALE LOCK REMOVE] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:3096:20260716070018 [DB LOCK ACQUIRED AFTER STALE REMOVE] publish_worker owner=publish_worker:HONGHEE-IP:14016:20260716141249 [PIPELINE RUN START] run_id=838, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=464 realtor_id=5 article_no=2636996083 sort_at=2026-07-09 23:12:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=464, realtor_id=5, draft_id=603, article_no=2636996083 [DRAFT HTML CHECK] clipboard_len=15734, draft_len=15734, plain_len=544 ================================================================================ [INTEGRITY OK] queue_id=464, draft_id=603, article_no=2636996083 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2636996083_1784127547.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15358 plain_len= 544 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_464_2636996083_after_paste_20260716_141334.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_464_2636996083_after_paste_20260716_141334.txt [EDITOR DEBUG LEN] html= 164569 text= 2880 [EDITOR VALIDATE] html_len=164569 text_len=2880 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224348461613 [RESULT URL CHECK] https://blog.naver.com/boram8857/224348461613 [PRIVATE QUEUE COUNT] realtor_id=5 count=1 [PRIVATE START] private_queue_id=69 realtor_id=5 article_no=2636971662 blog_id=boram8857 blog_post_no=224347188492 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224347188492 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=69 article_no=2636971662 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=603 blog_id=boram8857 blog_post_no=224348461613 url=https://blog.naver.com/boram8857/224348461613 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224348461613 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224348461613 [PUBLISH ELAPSED] queue_id=464 elapsed=101.3s avg=101.3s [SMART SLEEP CALC] remaining_seconds=31528 remaining_count=1 target_cycle=31528.0 avg_publish=101.3 base_sleep=31426.7 range=15713~15713 selected=15713 [SLEEP] 15713s before next queue [PUBLISH TARGET SELECTED] queue_id=348 realtor_id=7 article_no=2630366091 sort_at=2026-06-27 11:06:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=348, realtor_id=7, draft_id=460, article_no=2630366091 [DRAFT HTML CHECK] clipboard_len=17847, draft_len=17847, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=348, draft_id=460, article_no=2630366091 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2630366091_1783040204.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17469 plain_len= 532 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_348_2630366091_after_paste_20260716_183703.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_348_2630366091_after_paste_20260716_183703.txt [EDITOR DEBUG LEN] html= 176864 text= 3228 [EDITOR VALIDATE] html_len=176864 text_len=3228 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224348735730 [RESULT URL CHECK] https://blog.naver.com/e5221140/224348735730 [PRIVATE QUEUE NONE] realtor_id=7 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=460 blog_id=e5221140 blog_post_no=224348735730 url=https://blog.naver.com/e5221140/224348735730 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224348735730 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224348735730 [PUBLISH ELAPSED] queue_id=348 elapsed=57.7s avg=79.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=17 [PIPELINE RUN FINISH] run_id=838, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-16 14:12:49] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-16 18:37:22] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 13952 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:13952:20260717070001 [PIPELINE RUN START] run_id=845, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=473 realtor_id=5 article_no=2636265066 sort_at=2026-07-06 23:12:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=473, realtor_id=5, draft_id=612, article_no=2636265066 [DRAFT HTML CHECK] clipboard_len=14601, draft_len=14601, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=473, draft_id=612, article_no=2636265066 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2636265066_1784213950.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14223 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_473_2636265066_after_paste_20260717_070045.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_473_2636265066_after_paste_20260717_070045.txt [EDITOR DEBUG LEN] html= 155518 text= 2762 [EDITOR VALIDATE] html_len=155518 text_len=2762 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224349135018 [RESULT URL CHECK] https://blog.naver.com/boram8857/224349135018 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=612 blog_id=boram8857 blog_post_no=224349135018 url=https://blog.naver.com/boram8857/224349135018 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224349135018 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224349135018 [PUBLISH ELAPSED] queue_id=473 elapsed=62.8s avg=62.8s [SMART SLEEP CALC] remaining_seconds=57534 remaining_count=1 target_cycle=57534.0 avg_publish=62.8 base_sleep=57471.2 range=28735~28735 selected=28735 [SLEEP] 28735s before next queue [PUBLISH TARGET SELECTED] queue_id=474 realtor_id=7 article_no=2630561487 sort_at=2026-06-27 11:06:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=474, realtor_id=7, draft_id=613, article_no=2630561487 [DRAFT HTML CHECK] clipboard_len=17859, draft_len=17859, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=474, draft_id=613, article_no=2630561487 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=7 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_7.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/e5221140?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/e5221140?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/e5221140?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=e5221140&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_05_2630561487_1784213953.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17481 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_474_2630561487_after_paste_20260717_150043.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_474_2630561487_after_paste_20260717_150043.txt [EDITOR DEBUG LEN] html= 176655 text= 3251 [EDITOR VALIDATE] html_len=176655 text_len=3251 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/e5221140/224349443948 [RESULT URL CHECK] https://blog.naver.com/e5221140/224349443948 [PRIVATE QUEUE COUNT] realtor_id=7 count=3 [PRIVATE START] private_queue_id=73 realtor_id=7 article_no=2634200483 blog_id=e5221140 blog_post_no=224327355751 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224327355751 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=73 article_no=2634200483 [PRIVATE START] private_queue_id=74 realtor_id=7 article_no=2634393122 blog_id=e5221140 blog_post_no=224328690557 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224328690557 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=74 article_no=2634393122 [PRIVATE START] private_queue_id=75 realtor_id=7 article_no=2630366091 blog_id=e5221140 blog_post_no=224348735730 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=e5221140&logNo=224348735730 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=75 article_no=2630366091 [PRIVATE QUEUE RESULT] {'processed': 3, 'success': 3, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=613 blog_id=e5221140 blog_post_no=224349443948 url=https://blog.naver.com/e5221140/224349443948 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/e5221140/224349443948 [BLOG RESULT PARSED] blog_id=e5221140 blog_post_no=224349443948 [PUBLISH ELAPSED] queue_id=474 elapsed=175.6s avg=119.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 7] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=24 [PIPELINE RUN FINISH] run_id=845, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-17 07:00:01] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-17 15:02:56] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [2026-07-18 07:00:09] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-18 14:17:59] END �꽌踰� 諛쒗뻾 07:00~23:00 code=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 6420 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:6420:20260719063500 [PIPELINE RUN START] run_id=858, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=481 realtor_id=5 article_no=2636275695 sort_at=2026-07-06 23:12:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=481, realtor_id=5, draft_id=620, article_no=2636275695 [DRAFT HTML CHECK] clipboard_len=14617, draft_len=14617, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=481, draft_id=620, article_no=2636275695 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_08_2636275695_1784386749.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14239 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_481_2636275695_after_paste_20260719_063544.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_481_2636275695_after_paste_20260719_063544.txt [EDITOR DEBUG LEN] html= 156037 text= 2784 [EDITOR VALIDATE] html_len=156037 text_len=2784 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224350741737 [RESULT URL CHECK] https://blog.naver.com/boram8857/224350741737 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=620 blog_id=boram8857 blog_post_no=224350741737 url=https://blog.naver.com/boram8857/224350741737 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224350741737 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224350741737 [PUBLISH ELAPSED] queue_id=481 elapsed=63.5s avg=63.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=30 [PIPELINE RUN FINISH] run_id=858, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-19 06:35:00] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-19 06:36:04] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 1020 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1020:20260719070017 [PIPELINE RUN START] run_id=859, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=30 [PIPELINE RUN FINISH] run_id=859, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-19 07:00:17] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-19 07:00:18] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 9612 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9612:20260720094304 [PIPELINE RUN START] run_id=864, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=336 realtor_id=5 article_no=2634721678 sort_at=2026-06-29 23:11:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=336, realtor_id=5, draft_id=448, article_no=2634721678 [DRAFT HTML CHECK] clipboard_len=15349, draft_len=15349, plain_len=547 ================================================================================ [INTEGRITY OK] queue_id=336, draft_id=448, article_no=2634721678 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_04_2634721678_1783040163.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14974 plain_len= 547 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_336_2634721678_after_paste_20260720_094343.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_336_2634721678_after_paste_20260720_094343.txt [EDITOR DEBUG LEN] html= 163567 text= 2909 [EDITOR VALIDATE] html_len=163567 text_len=2909 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224351727109 [RESULT URL CHECK] https://blog.naver.com/boram8857/224351727109 [PRIVATE QUEUE COUNT] realtor_id=5 count=1 [PRIVATE START] private_queue_id=89 realtor_id=5 article_no=2633003518 blog_id=boram8857 blog_post_no=224322161551 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224322161551 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=89 article_no=2633003518 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=448 blog_id=boram8857 blog_post_no=224351727109 url=https://blog.naver.com/boram8857/224351727109 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224351727109 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224351727109 [PUBLISH ELAPSED] queue_id=336 elapsed=96.6s avg=96.6s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=34 [PIPELINE RUN FINISH] run_id=864, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-20 09:43:03] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-20 09:44:41] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 3508 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:3508:20260720104525 [PIPELINE RUN START] run_id=880, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=509 realtor_id=31 article_no=2636400791 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=509, realtor_id=31, draft_id=648, article_no=2636400791 [DRAFT HTML CHECK] clipboard_len=17581, draft_len=17581, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=509, draft_id=648, article_no=2636400791 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2636400791_1784511915.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17204 plain_len= 532 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_509_2636400791_after_paste_20260720_104604.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_509_2636400791_after_paste_20260720_104604.txt [EDITOR DEBUG LEN] html= 176718 text= 3214 [EDITOR VALIDATE] html_len=176718 text_len=3214 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 11/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 12/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 13/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 14/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 15/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 16/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 17/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 18/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 19/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 20/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 21/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 22/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 23/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 24/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 25/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 26/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 27/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 28/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 29/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 30/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [RESULT URL CHECK] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [PUBLISH ELAPSED] queue_id=509 elapsed=87.1s avg=87.1s [SMART SLEEP CALC] remaining_seconds=43987 remaining_count=3 target_cycle=14662.3 avg_publish=87.1 base_sleep=14575.3 range=7287~7287 selected=7287 [SLEEP] 7287s before next queue [PUBLISH TARGET SELECTED] queue_id=486 realtor_id=13 article_no=2636292688 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=486, realtor_id=13, draft_id=625, article_no=2636292688 [DRAFT HTML CHECK] clipboard_len=16345, draft_len=16345, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=486, draft_id=625, article_no=2636292688 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/jjin_1990 [WAIT EDITOR] 1/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 2/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 3/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 4/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 5/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 6/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 7/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 8/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 9/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 10/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 11/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 12/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 13/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 14/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 15/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 16/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 17/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 18/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 19/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 20/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 21/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 22/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 23/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 24/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 25/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 26/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 27/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 28/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 29/30 url=https://blog.naver.com/jjin_1990 [WAIT EDITOR] 30/30 url=https://blog.naver.com/jjin_1990 [WRITE FINAL URL] https://blog.naver.com/jjin_1990 [WRITE HOLD] [WRITE_HOLD] realtor_id=13 / 글쓰기 iframe 미발견 / 최종 URL: https://blog.naver.com/jjin_1990 [PUBLISH ELAPSED] queue_id=486 elapsed=33.8s avg=60.4s [SMART SLEEP CALC] remaining_seconds=36666 remaining_count=2 target_cycle=18333.0 avg_publish=60.4 base_sleep=18272.6 range=9136~9136 selected=9136 [SLEEP] 9136s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[13, 31] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=34 [PIPELINE RUN FINISH] run_id=880, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 0 [FAILED] 2 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-20 10:45:25] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-20 15:21:10] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 7224 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:7224:20260720162613 [PIPELINE RUN START] run_id=890, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=509 realtor_id=31 article_no=2636400791 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=509, realtor_id=31, draft_id=648, article_no=2636400791 [DRAFT HTML CHECK] clipboard_len=17581, draft_len=17581, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=509, draft_id=648, article_no=2636400791 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2636400791_1784511915.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17204 plain_len= 532 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_509_2636400791_after_paste_20260720_162652.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_509_2636400791_after_paste_20260720_162652.txt [EDITOR DEBUG LEN] html= 176717 text= 3214 [EDITOR VALIDATE] html_len=176717 text_len=3214 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 11/30 url=https://blog.naver.com/fpcltsk/224352177803 [RESULT URL CHECK] https://blog.naver.com/fpcltsk/224352177803 [PRIVATE QUEUE NONE] realtor_id=31 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=648 blog_id=fpcltsk blog_post_no=224352177803 url=https://blog.naver.com/fpcltsk/224352177803 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/fpcltsk/224352177803 [BLOG RESULT PARSED] blog_id=fpcltsk blog_post_no=224352177803 [PUBLISH ELAPSED] queue_id=509 elapsed=68.0s avg=68.0s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[31] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=34 [PIPELINE RUN FINISH] run_id=890, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-20 16:26:13] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-20 16:27:22] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 2648 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2648:20260720174555 [PIPELINE RUN START] run_id=891, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=34 [PIPELINE RUN FINISH] run_id=891, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-20 17:45:55] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-20 17:45:56] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 9516 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9516:20260721070005 [PIPELINE RUN START] run_id=892, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=508 realtor_id=31 article_no=2636399532 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=508, realtor_id=31, draft_id=647, article_no=2636399532 [DRAFT HTML CHECK] clipboard_len=18450, draft_len=18450, plain_len=531 ================================================================================ [INTEGRITY OK] queue_id=508, draft_id=647, article_no=2636399532 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=31 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_08_2636399532_1784511901.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18073 plain_len= 531 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_508_2636399532_after_paste_20260721_070048.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_508_2636399532_after_paste_20260721_070048.txt [EDITOR DEBUG LEN] html= 181055 text= 3315 [EDITOR VALIDATE] html_len=181055 text_len=3315 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 11/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 12/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 13/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 14/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 15/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 16/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 17/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 18/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 19/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 20/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 21/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 22/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 23/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 24/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 25/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 26/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 27/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 28/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 29/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 30/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [RESULT URL CHECK] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [PUBLISH ELAPSED] queue_id=508 elapsed=91.2s avg=91.2s [SMART SLEEP CALC] remaining_seconds=57503 remaining_count=4 target_cycle=14375.8 avg_publish=91.2 base_sleep=14284.6 range=7142~7142 selected=7142 [SLEEP] 7142s before next queue [PUBLISH TARGET SELECTED] queue_id=503 realtor_id=29 article_no=2636216567 sort_at=2026-07-16 23:34:59 today_published_count=0 ================================================================================ [QUEUE START] queue_id=503, realtor_id=29, draft_id=642, article_no=2636216567 [DRAFT HTML CHECK] clipboard_len=17210, draft_len=17210, plain_len=573 ================================================================================ [INTEGRITY OK] queue_id=503, draft_id=642, article_no=2636216567 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=29 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/wjdtnal20?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=wjdtnal20&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_04_2636216567_1784511662.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16832 plain_len= 573 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_503_2636216567_after_paste_20260721_090122.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_503_2636216567_after_paste_20260721_090122.txt [EDITOR DEBUG LEN] html= 174880 text= 3260 [EDITOR VALIDATE] html_len=174880 text_len=3260 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/wjdtnal20/224352856804 [RESULT URL CHECK] https://blog.naver.com/wjdtnal20/224352856804 [PRIVATE QUEUE NONE] realtor_id=29 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=642 blog_id=wjdtnal20 blog_post_no=224352856804 url=https://blog.naver.com/wjdtnal20/224352856804 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/wjdtnal20/224352856804 [BLOG RESULT PARSED] blog_id=wjdtnal20 blog_post_no=224352856804 [PUBLISH ELAPSED] queue_id=503 elapsed=62.6s avg=76.9s [SMART SLEEP CALC] remaining_seconds=50298 remaining_count=3 target_cycle=16766.0 avg_publish=76.9 base_sleep=16689.1 range=8344~8344 selected=8344 [SLEEP] 8344s before next queue [PUBLISH TARGET SELECTED] queue_id=516 realtor_id=13 article_no=2636295078 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=516, realtor_id=13, draft_id=655, article_no=2636295078 [DRAFT HTML CHECK] clipboard_len=16155, draft_len=16155, plain_len=526 ================================================================================ [INTEGRITY OK] queue_id=516, draft_id=655, article_no=2636295078 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_03_2636295078_1784598886.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15780 plain_len= 526 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_516_2636295078_after_paste_20260721_112123.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_516_2636295078_after_paste_20260721_112123.txt [EDITOR DEBUG LEN] html= 166120 text= 2868 [EDITOR VALIDATE] html_len=166120 text_len=2868 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/h9000082/224352996919 [RESULT URL CHECK] https://blog.naver.com/h9000082/224352996919 [PRIVATE QUEUE NONE] realtor_id=13 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=655 blog_id=h9000082 blog_post_no=224352996919 url=https://blog.naver.com/h9000082/224352996919 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/h9000082/224352996919 [BLOG RESULT PARSED] blog_id=h9000082 blog_post_no=224352996919 [PUBLISH ELAPSED] queue_id=516 elapsed=57.3s avg=70.4s [SMART SLEEP CALC] remaining_seconds=41897 remaining_count=3 target_cycle=13965.7 avg_publish=70.4 base_sleep=13895.3 range=6947~6947 selected=6947 [SLEEP] 6947s before next queue [PUBLISH TARGET SELECTED] queue_id=512 realtor_id=5 article_no=2637508151 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=512, realtor_id=5, draft_id=651, article_no=2637508151 [DRAFT HTML CHECK] clipboard_len=16656, draft_len=16656, plain_len=548 ================================================================================ [INTEGRITY OK] queue_id=512, draft_id=651, article_no=2637508151 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_04_2637508151_1784598852.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempt[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 3328 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:3328:20260721150348 [PIPELINE RUN START] run_id=971, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=525 realtor_id=31 article_no=2636405398 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=525, realtor_id=31, draft_id=664, article_no=2636405398 [DRAFT HTML CHECK] clipboard_len=15644, draft_len=15644, plain_len=556 ================================================================================ [INTEGRITY OK] queue_id=525, draft_id=664, article_no=2636405398 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_04_2636405398_1784599047.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15269 plain_len= 556 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_525_2636405398_after_paste_20260721_150427.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_525_2636405398_after_paste_20260721_150427.txt [EDITOR DEBUG LEN] html= 162781 text= 2849 [EDITOR VALIDATE] html_len=162781 text_len=2849 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 11/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 12/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 13/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 14/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 15/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 16/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 17/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 18/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 19/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 20/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 21/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 22/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 23/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 24/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WAIT PUBLISH RESULT] 25/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [FAILED] Page.wait_for_timeout: Target page, context or browser has been closed [PUBLISH ELAPSED] queue_id=525 elapsed=82.5s avg=82.5s [SMART SLEEP CALC] remaining_seconds=28488 remaining_count=2 target_cycle=14244.0 avg_publish=82.5 base_sleep=14161.5 range=7080~7080 selected=7080 [SLEEP] 7080s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[31] [INFO] pending Queue D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_07_2635777132_1784598948.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17092 plain_len= 588 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_519_2635777132_after_paste_20260721_154420.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_519_2635777132_after_paste_20260721_154420.txt [EDITOR DEBUG LEN] html= 184751 text= 4235 [EDITOR VALIDATE] html_len=184751 text_len=4235 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224353291706 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224353291706 [PRIVATE QUEUE NONE] realtor_id=17 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=658 blog_id=on_real_estate blog_post_no=224353291706 url=https://blog.naver.com/on_real_estate/224353291706 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/on_real_estate/224353291706 [BLOG RESULT PARSED] blog_id=on_real_estate blog_post_no=224353291706 [PUBLISH ELAPSED] queue_id=519 elapsed=58.9s avg=73.2s [SMART SLEEP CALC] remaining_seconds=26120 remaining_count=1 target_cycle=26120.0 avg_publish=73.2 base_sleep=26046.8 range=13023~13023 selected=13023 [SLEEP] 13023s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 13, 17, 29, 31] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=37 [PIPELINE RUN FINISH] run_id=892, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 4 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 een closed [REP POST CLICK ERROR] root=page, selector=[title*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=page, selector=.se-toolbar-item-image button, error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=page, selector=.se-toolbar-item-image, error=Locator.count: Target page, context or browser has been closed [REP UPLOAD FAIL] root=page, selector=.se-toolbar-item-image, error=Locator.count: Target page, context or browser has been closed [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16524 plain_len= 557 [BODY INPUT ERROR] Locator.count: Target page, context or browser has been closed [PUBLISH ELAPSED] queue_id=507 elapsed=21.0s avg=21.0s [SMART SLEEP CALC] remaining_seconds=26374 remaining_count=2 target_cycle=13187.0 avg_publish=21.0 base_sleep=13166.0 range=6582~6582 selected=6582 [SLEEP] 6582s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[31] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=37 [PIPELINE RUN FINISH] run_id=972, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 0 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-21 15:40:03] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-21 17:30:07] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 16720 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:16720:20260722070016 [PIPELINE RUN START] run_id=986, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=508 realtor_id=31 article_no=2636399532 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=508, realtor_id=31, draft_id=647, article_no=2636399532 [DRAFT HTML CHECK] clipboard_len=18450, draft_len=18450, plain_len=531 ================================================================================ [INTEGRITY OK] queue_id=508, draft_id=647, article_no=2636399532 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_08_2636399532_1784511901.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("첨부") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[title*="사진"] [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image button [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD FAIL] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18449 plain_len= 531 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=나를 돌아보는 회고, 뜻밖의 발견을 기다립니다. #모두의회고 box={'x': 525.265625, 'y': 355, 'width': 334.453125, 'height': 17} [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_508_2636399532_after_paste_20260722_070136.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_508_2636399532_after_paste_20260722_070136.txt [EDITOR DEBUG LEN] html= 53423 text= 602 [EDITOR VALIDATE] html_len=53423 text_len=602 hit_count=0 [EDITOR VALIDATE RESULT] False 에디터 본문 핵심문구 부족 hit_count=0, text_len=602 [BODY INPUT ERROR] 네이버 에디터 본문 검증 실패: 에디터 본문 핵심문구 부족 hit_count=0, text_len=602 [PUBLISH ELAPSED] queue_id=508 elapsed=77.9s avg=77.9s [SMART SLEEP CALC] remaining_seconds=57502 remaining_count=3 target_cycle=19167.3 avg_publish=77.9 base_sleep=19089.5 range=9544~9544 selected=9544 [SLEEP] 9544s before next queue [PUBLISH TARGET SELECTED] queue_id=524 realtor_id=29 article_no=2636732961 sort_at=2026-07-16 23:34:59 today_published_count=0 ================================================================================ [QUEUE START] queue_id=524, realtor_id=29, draft_id=663, article_no=2636732961 [DRAFT HTML CHECK] clipboard_len=17227, draft_len=17227, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=524, draft_id=663, article_no=2636732961 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=29 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/wjdtnal20?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=wjdtnal20&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_07_2636732961_1784599029.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [2026-07-22 07:00:16] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-22 09:53:04] END �꽌踰� 諛쒗뻾 07:00~23:00 code=4294967295 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 6956 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:6956:20260722100123 [PIPELINE RUN START] run_id=987, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=507 realtor_id=31 article_no=2636282242 sort_at=2026-07-16 23:35:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=507, realtor_id=31, draft_id=646, article_no=2636282242 [DRAFT HTML CHECK] clipboard_len=16525, draft_len=16525, plain_len=557 ================================================================================ [INTEGRITY OK] queue_id=507, draft_id=646, article_no=2636282242 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_31.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FINAL URL] https://blog.naver.com/fpcltsk?Redirect=Write&categoryNo=51 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=fpcltsk&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=51&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 664.875, 'y': 232, 'width': 55.234375, 'height': 36} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2636282242_1784511890.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Page.wait_for_timeout: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진 첨부"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=a:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=a:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=[aria-label*="사진"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=[aria-label*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=button:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=button:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=button:has-text("사진 첨부"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=button:has-text("첨부"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=a:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=a:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=span:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=span:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=[aria-label*="사진"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=[aria-label*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=[title*="사진"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=[title*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=.se-toolbar-item-image button, error=Locator.count: Target page, context or browser has been closed [REP IMAGE BUTTON ERROR] root=page, selector=.se-toolbar-item-image, error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=button:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=button:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=button:has-text("사진 첨부"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=button:has-text("첨부"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=a:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=a:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=span:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=span:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=[aria-label*="사진"], error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=[aria-label*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=[title*="사진"], error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=[title*="이미지"], error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=.se-toolbar-item-image button, error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=frame, selector=.se-toolbar-item-image, error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=page, selector=button:has-text("사진"), error=Locator.count: Target page, context or browser has been closed [REP POST CLICK ERROR] root=page, selector=button:has-text("이미지"), error=Locator.count: Target page, context or browser has been closed[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5356 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5356:20260723070006 [PIPELINE RUN START] run_id=1014, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=590 realtor_id=17 article_no=2639344422 sort_at=2026-07-22 23:16:27 today_published_count=0 ================================================================================ [QUEUE START] queue_id=590, realtor_id=17, draft_id=729, article_no=2639344422 [DRAFT HTML CHECK] clipboard_len=18104, draft_len=18104, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=590, draft_id=729, article_no=2639344422 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=17 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/on_real_estate?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=on_real_estate&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2639344422_1784733273.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17721 plain_len= 562 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_590_2639344422_after_paste_20260723_070051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_590_2639344422_after_paste_20260723_070051.txt [EDITOR DEBUG LEN] html= 173949 text= 3517 [EDITOR VALIDATE] html_len=173949 text_len=3517 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224355050012 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224355050012 [PRIVATE QUEUE NONE] realtor_id=17 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=729 blog_id=on_real_estate blog_post_no=224355050012 url=https://blog.naver.com/on_real_estate/224355050012 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/on_real_estate/224355050012 [BLOG RESULT PARSED] blog_id=on_real_estate blog_post_no=224355050012 [PUBLISH ELAPSED] queue_id=590 elapsed=63.4s avg=63.4s [SMART SLEEP CALC] remaining_seconds=57529 remaining_count=2 target_cycle=28764.5 avg_publish=63.4 base_sleep=28701.1 range=14350~14350 selected=14350 [SLEEP] 14350s before next queue [PUBLISH TARGET SELECTED] queue_id=581 realtor_id=5 article_no=2637508387 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=581, realtor_id=5, draft_id=720, article_no=2637508387 [DRAFT HTML CHECK] clipboard_len=15375, draft_len=15375, plain_len=566 ================================================================================ [INTEGRITY OK] queue_id=581, draft_id=720, article_no=2637508387 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2637508387_1784733196.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14998 plain_len= 566 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_581_2637508387_after_paste_20260723_110104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_581_2637508387_after_paste_20260723_110104.txt [EDITOR DEBUG LEN] html= 163594 text= 2929 [EDITOR VALIDATE] html_len=163594 text_len=2929 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224355236648 [RESULT URL CHECK] https://blog.naver.com/boram8857/224355236648 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=720 blog_id=boram8857 blog_post_no=224355236648 url=https://blog.naver.com/boram8857/224355236648 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224355236648 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224355236648 [PUBLISH ELAPSED] queue_id=581 elapsed=62.5s avg=63.0s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[17, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=40 [PIPELINE RUN FINISH] run_id=1014, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-23 07:00:06] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-23 11:01:23] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4668 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4668:20260724014527 [PIPELINE RUN START] run_id=1022, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=549 realtor_id=13 article_no=2638672266 sort_at=2026-07-18 23:18:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=549, realtor_id=13, draft_id=688, article_no=2638672266 [DRAFT HTML CHECK] clipboard_len=17113, draft_len=17113, plain_len=544 ================================================================================ [INTEGRITY OK] queue_id=549, draft_id=688, article_no=2638672266 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2638672266_1784644857.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16736 plain_len= 544 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_549_2638672266_after_paste_20260724_014605.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_549_2638672266_after_paste_20260724_014605.txt [EDITOR DEBUG LEN] html= 171957 text= 3181 [EDITOR VALIDATE] html_len=171957 text_len=3181 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/h9000082/224356058579 [RESULT URL CHECK] https://blog.naver.com/h9000082/224356058579 [PRIVATE QUEUE COUNT] realtor_id=13 count=1 [PRIVATE START] private_queue_id=96 realtor_id=13 article_no=2636295078 blog_id=h9000082 blog_post_no=224352996919 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=h9000082&logNo=224352996919 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=96 article_no=2636295078 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=688 blog_id=h9000082 blog_post_no=224356058579 url=https://blog.naver.com/h9000082/224356058579 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/h9000082/224356058579 [BLOG RESULT PARSED] blog_id=h9000082 blog_post_no=224356058579 [PUBLISH ELAPSED] queue_id=549 elapsed=94.7s avg=94.7s [SMART SLEEP CALC] remaining_seconds=76377 remaining_count=2 target_cycle=38188.5 avg_publish=94.7 base_sleep=38093.8 range=19046~19046 selected=19046 [SLEEP] 19046s before next queue [PUBLISH TARGET SELECTED] queue_id=502 realtor_id=29 article_no=2636213748 sort_at=2026-07-16 23:34:59 today_published_count=0 ================================================================================ [QUEUE START] queue_id=502, realtor_id=29, draft_id=641, article_no=2636213748 [DRAFT HTML CHECK] clipboard_len=17531, draft_len=17531, plain_len=532 ================================================================================ [INTEGRITY OK] queue_id=502, draft_id=641, article_no=2636213748 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=29 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/wjdtnal20?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=wjdtnal20&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_04_2636213748_1784511645.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17156 plain_len= 532 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_502_2636213748_after_paste_20260724_070512.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_502_2636213748_after_paste_20260724_070512.txt [EDITOR DEBUG LEN] html= 176835 text= 3219 [EDITOR VALIDATE] html_len=176835 text_len=3219 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/wjdtnal20/224356183159 [RESULT URL CHECK] https://blog.naver.com/wjdtnal20/224356183159 [PRIVATE QUEUE NONE] realtor_id=29 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=641 blog_id=wjdtnal20 blog_post_no=224356183159 url=https://blog.naver.com/wjdtnal20/224356183159 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/wjdtnal20/224356183159 [BLOG RESULT PARSED] blog_id=wjdtnal20 blog_post_no=224356183159 [PUBLISH ELAPSED] queue_id=502 elapsed=62.4s avg=78.6s [SMART SLEEP CALC] remaining_seconds=57268 remaining_count=1 target_cycle=57268.0 avg_publish=78.6 base_sleep=57189.4 range=28594~28594 selected=28594 [SLEEP] 28594s before next queue [PUBLISH TARGET SELECTED] queue_id=625 realtor_id=5 article_no=2637509308 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=625, realtor_id=5, draft_id=764, article_no=2637509308 [DRAFT HTML CHECK] clipboard_len=15369, draft_len=15369, plain_len=559 ================================================================================ [INTEGRITY OK] queue_id=625, draft_id=764, article_no=2637509308 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_06_2637509308_1784819973.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14991 plain_len= 559 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_625_2637509308_after_paste_20260724_150248.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_625_2637509308_after_paste_20260724_150248.txt [EDITOR DEBUG LEN] html= 163590 text= 2922 [EDITOR VALIDATE] html_len=163590 text_len=2922 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224356609319 [RESULT URL CHECK] https://blog.naver.com/boram8857/224356609319 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=764 blog_id=boram8857 blog_post_no=224356609319 url=https://blog.naver.com/boram8857/224356609319 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224356609319 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224356609319 [PUBLISH ELAPSED] queue_id=625 elapsed=62.5s avg=73.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[29, 5, 13] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=42 [PIPELINE RUN FINISH] run_id=1022, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-24 01:45:27] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-24 15:03:08] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [2026-07-25 07:00:03] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-25 10:44:23] END �꽌踰� 諛쒗뻾 07:00~23:00 code=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 3720 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:3720:20260728070012 [PIPELINE RUN START] run_id=1060, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=742 realtor_id=4 article_no=2640059409 sort_at=2026-07-27 23:15:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=742, realtor_id=4, draft_id=890, article_no=2640059409 [DRAFT HTML CHECK] clipboard_len=15220, draft_len=15220, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=742, draft_id=890, article_no=2640059409 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_DARK_REC_PHOTO_LAYOUT_02_2640059409_1785166169.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14845 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_742_2640059409_after_paste_20260728_070051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_742_2640059409_after_paste_20260728_070051.txt [EDITOR DEBUG LEN] html= 160920 text= 3066 [EDITOR VALIDATE] html_len=160920 text_len=3066 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224360047614 [RESULT URL CHECK] https://blog.naver.com/pjy287/224360047614 [PRIVATE QUEUE COUNT] realtor_id=4 count=3 [PRIVATE START] private_queue_id=122 realtor_id=4 article_no=2632992123 blog_id=pjy287 blog_post_no=224320452412 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224320452412 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=122 article_no=2632992123 [PRIVATE START] private_queue_id=123 realtor_id=4 article_no=2633391433 blog_id=pjy287 blog_post_no=224322179256 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322179256 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=123 article_no=2633391433 [PRIVATE START] private_queue_id=124 realtor_id=4 article_no=2633333928 blog_id=pjy287 blog_post_no=224322967234 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224322967234 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=124 article_no=2633333928 [PRIVATE QUEUE RESULT] {'processed': 3, 'success': 3, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=890 blog_id=pjy287 blog_post_no=224360047614 url=https://blog.naver.com/pjy287/224360047614 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224360047614 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224360047614 [PUBLISH ELAPSED] queue_id=742 elapsed=172.0s avg=172.0s [SMART SLEEP CALC] remaining_seconds=57415 remaining_count=3 target_cycle=19138.3 avg_publish=172.0 base_sleep=18966.4 range=9483~9483 selected=9483 [SLEEP] 9483s before next queue [PUBLISH TARGET SELECTED] queue_id=500 realtor_id=29 article_no=2635803059 sort_at=2026-07-16 23:34:59 today_published_count=0 ================================================================================ [QUEUE START] queue_id=500, realtor_id=29, draft_id=639, article_no=2635803059 [DRAFT HTML CHECK] clipboard_len=17789, draft_len=17789, plain_len=509 ================================================================================ [INTEGRITY OK] queue_id=500, draft_id=639, article_no=2635803059 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=29 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_29.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/wjdtnal20?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/wjdtnal20?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=wjdtnal20&Redirect=Write&redirect=Write&widgetTypeCall=true&parentCategoryNo=1&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2635803059_1784511613.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17412 plain_len= 509 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_500_2635803059_after_paste_20260728_094153.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_500_2635803059_after_paste_20260728_094153.txt [EDITOR DEBUG LEN] html= 178743 text= 3106 [EDITOR VALIDATE] html_len=178743 text_len=3106 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/wjdtnal20/224360165993 [RESULT URL CHECK] https://blog.naver.com/wjdtnal20/224360165993 [PRIVATE QUEUE NONE] realtor_id=29 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=639 blog_id=wjdtnal20 blog_post_no=224360165993 url=https://blog.naver.com/wjdtnal20/224360165993 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/wjdtnal20/224360165993 [BLOG RESULT PARSED] blog_id=wjdtnal20 blog_post_no=224360165993 [PUBLISH ELAPSED] queue_id=500 elapsed=64.7s avg=118.3s [SMART SLEEP CALC] remaining_seconds=47867 remaining_count=2 target_cycle=23933.5 avg_publish=118.3 base_sleep=23815.2 range=11907~11907 selected=11907 [SLEEP] 11907s before next queue [PUBLISH TARGET SELECTED] queue_id=678 realtor_id=5 article_no=2637510378 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=678, realtor_id=5, draft_id=817, article_no=2637510378 [DRAFT HTML CHECK] clipboard_len=14801, draft_len=14801, plain_len=515 ================================================================================ [INTEGRITY OK] queue_id=678, draft_id=817, article_no=2637510378 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_08_2637510378_1784906899.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14423 plain_len= 515 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_678_2637510378_after_paste_20260728_130122.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_678_2637510378_after_paste_20260728_130122.txt [EDITOR DEBUG LEN] html= 155094 text= 2543 [EDITOR VALIDATE] html_len=155094 text_len=2543 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224360394372 [RESULT URL CHECK] https://blog.naver.com/boram8857/224360394372 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=817 blog_id=boram8857 blog_post_no=224360394372 url=https://blog.naver.com/boram8857/224360394372 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224360394372 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224360394372 [PUBLISH ELAPSED] queue_id=678 elapsed=61.8s avg=99.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 4, 29] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=38 [PIPELINE RUN FINISH] run_id=1060, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-28 07:00:12] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-28 13:01:41] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 1776 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1776:20260728194701 [PIPELINE RUN START] run_id=1061, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=38 [PIPELINE RUN FINISH] run_id=1061, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-28 19:47:01] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-28 19:47:01] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4992 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4992:20260729070019 [PIPELINE RUN START] run_id=1068, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=806 realtor_id=4 article_no=2640478555 sort_at=2026-07-28 23:19:27 today_published_count=0 ================================================================================ [QUEUE START] queue_id=806, realtor_id=4, draft_id=954, article_no=2640478555 [DRAFT HTML CHECK] clipboard_len=14982, draft_len=14982, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=806, draft_id=954, article_no=2640478555 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2640478555_1785252966.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14605 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_806_2640478555_after_paste_20260729_070100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_806_2640478555_after_paste_20260729_070100.txt [EDITOR DEBUG LEN] html= 159765 text= 3002 [EDITOR VALIDATE] html_len=159765 text_len=3002 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224361264013 [RESULT URL CHECK] https://blog.naver.com/pjy287/224361264013 [PRIVATE QUEUE COUNT] realtor_id=4 count=2 [PRIVATE START] private_queue_id=128 realtor_id=4 article_no=2633878501 blog_id=pjy287 blog_post_no=224326458148 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224326458148 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=128 article_no=2633878501 [PRIVATE START] private_queue_id=129 realtor_id=4 article_no=2635530742 blog_id=pjy287 blog_post_no=224338784873 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=pjy287&logNo=224338784873[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=4992 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=4992 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 19784 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:19784:20260730070011 [PIPELINE RUN START] run_id=1109, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=877 realtor_id=4 article_no=2640714003 sort_at=2026-07-29 23:16:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=877, realtor_id=4, draft_id=1058, article_no=2640714003 [DRAFT HTML CHECK] clipboard_len=20286, draft_len=20286, plain_len=596 ================================================================================ [INTEGRITY OK] queue_id=877, draft_id=1058, article_no=2640714003 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2640714003_1785340553.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19909 plain_len= 596 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 16 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_877_2640714003_after_paste_20260730_070055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_877_2640714003_after_paste_20260730_070055.txt [EDITOR DEBUG LEN] html= 189744 text= 3238 [EDITOR VALIDATE] html_len=189744 text_len=3238 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224362416000 [RESULT URL CHECK] https://blog.naver.com/pjy287/224362416000 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1058 blog_id=pjy287 blog_post_no=224362416000 url=https://blog.naver.com/pjy287/224362416000 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224362416000 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224362416000 [PUBLISH ELAPSED] queue_id=877 elapsed=63.2s avg=63.2s [SMART SLEEP CALC] remaining_seconds=57525 remaining_count=2 target_cycle=28762.5 avg_publish=63.2 base_sleep=28699.3 range=14349~14349 selected=14349 [SLEEP] 14349s before next queue [PUBLISH TARGET SELECTED] queue_id=878 realtor_id=5 article_no=2637512299 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=878, realtor_id=5, draft_id=1059, article_no=2637512299 [DRAFT HTML CHECK] clipboard_len=14095, draft_len=14095, plain_len=567 ================================================================================ [INTEGRITY OK] queue_id=878, draft_id=1059, article_no=2637512299 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_NOTE_CARD_PHOTO_LAYOUT_07_2637512299_1785340570.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13719 plain_len= 567 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 2 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_878_2637512299_after_paste_20260730_110107.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_878_2637512299_after_paste_20260730_110107.txt [EDITOR DEBUG LEN] html= 154677 text= 2913 [EDITOR VALIDATE] html_len=154677 text_len=2913 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224362589859 [RESULT URL CHECK] https://blog.naver.com/boram8857/224362589859 [PRIVATE QUEUE COUNT] realtor_id=5 count=2 [PRIVATE START] private_queue_id=168 realtor_id=5 article_no=2635361499 blog_id=boram8857 blog_post_no=224338979242 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224338979242 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=168 article_no=2635361499 [PRIVATE START] private_queue_id=169 realtor_id=5 article_no=2636275695 blog_id=boram8857 blog_post_no=224350741737 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224350741737 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=169 article_no=2636275695 [PRIVATE QUEUE RESULT] {'processed': 2, 'success': 2, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1059 blog_id=boram8857 blog_post_no=224362589859 url=https://blog.naver.com/boram8857/224362589859 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224362589859 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224362589859 [PUBLISH ELAPSED] queue_id=878 elapsed=138.2s avg=100.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=35 [PIPELINE RUN FINISH] run_id=1109, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-07-30 07:00:11] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-07-30 11:02:42] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 21800 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:21800:20260731070019 [PIPELINE RUN START] run_id=1119, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=964 realtor_id=17 article_no=2640899154 sort_at=2026-07-30 23:26:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=964, realtor_id=17, draft_id=1148, article_no=2640899154 [DRAFT HTML CHECK] clipboard_len=17770, draft_len=17770, plain_len=640 ================================================================================ [INTEGRITY OK] queue_id=964, draft_id=1148, article_no=2640899154 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=17 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=6pAAbva5l14IYoF1 [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=6pAAbva5l14IYoF1 [AUTO RELOGIN WAIT] 30/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=6pAAbva5l14IYoF1 [AUTO RELOGIN WAIT] 60/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=6pAAbva5l14IYoF1 [AUTO RELOGIN FAIL] naver_block 새 기기 로그인 인증 필요 [SESSION HOLD] [SESSION_HOLD] realtor_id=17 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 새 기기 로그인 인증 필요 [PUBLISH ELAPSED] queue_id=964 elapsed=95.9s avg=95.9s [SMART SLEEP CALC] remaining_seconds=57484 remaining_count=3 target_cycle=19161.3 avg_publish=95.9 base_sleep=19065.4 range=9532~9532 selected=9532 [SLEEP] 9532s before next queue [PUBLISH TARGET SELECTED] queue_id=953 realtor_id=4 article_no=2640836710 sort_at=2026-07-30 23:14:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=953, realtor_id=4, draft_id=1137, article_no=2640836710 [DRAFT HTML CHECK] clipboard_len=15864, draft_len=15864, plain_len=576 ================================================================================ [INTEGRITY OK] queue_id=953, draft_id=1137, article_no=2640836710 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_03_2640836710_1785426970.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15486 plain_len= 576 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_953_2640836710_after_paste_20260731_094126.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_953_2640836710_after_paste_20260731_094126.txt [EDITOR DEBUG LEN] html= 165356 text= 3096 [EDITOR VALIDATE] html_len=165356 text_len=3096 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224363570407 [RESULT URL CHECK] https://blog.naver.com/pjy287/224363570407 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1137 blog_id=pjy287 blog_post_no=224363570407 url=https://blog.naver.com/pjy287/224363570407 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224363570407 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224363570407 [PUBLISH ELAPSED] queue_id=953 elapsed=57.7s avg=76.8s [SMART SLEEP CALC] remaining_seconds=47894 remaining_count=2 target_cycle=23947.0 avg_publish=76.8 base_sleep=23870.2 range=11935~11935 selected=11935 [SLEEP] 11935s before next queue [PUBLISH TARGET SELECTED] queue_id=468 realtor_id=13 article_no=2636291480 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=468, realtor_id=13, draft_id=607, article_no=2636291480 [DRAFT HTML CHECK] clipboard_len=16359, draft_len=16359, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=468, draft_id=607, article_no=2636291480 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=13 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/h9000082?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2636291480_1784127572.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15982 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_468_2636291480_after_paste_20260731_130123.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_468_2636291480_after_paste_20260731_130123.txt [EDITOR DEBUG LEN] html= 167801 text= 2898 [EDITOR VALIDATE] html_len=167801 text_len=2898 hit_count=5 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/h9000082/224363772813 [RESULT URL CHECK] https://blog.naver.com/h9000082/224363772813 [PRIVATE QUEUE NONE] realtor_id=13 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=607 blog_id=h9000082 blog_post_no=224363772813 url=https://blog.naver.com/h9000082/224363772813 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/h9000082/224363772813 [BLOG RESULT PARSED] blog_id=h9000082 blog_post_no=224363772813 [PUBLISH ELAPSED] queue_id=468 elapsed=62.0s avg=71.9s [SMART SLEEP CALC] remaining_seconds=35897 remaining_count=1 target_cycle=35897.0 avg_publish=71.9 base_sleep=35825.1 range=17912~17912 selected=17912 [SLEEP] 17912s before next queue [PUBLISH TARGET SELECTED] queue_id=954 realtor_id=5 article_no=2637512364 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=954, realtor_id=5, draft_id=1138, article_no=2637512364 [DRAFT HTML CHECK] clipboard_len=16804, draft_len=16804, plain_len=627 ================================================================================ [INTEGRITY OK] queue_id=954, draft_id=1138, article_no=2637512364 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2637512364_1785426973.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16427 plain_len= 627 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_954_2637512364_after_paste_20260731_180101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_954_2637512364_after_paste_20260731_180101.txt [EDITOR DEBUG LEN] html= 180974 text= 3035 [EDITOR VALIDATE] html_len=180974 text_len=3035 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224364090909 [RESULT URL CHECK] https://blog.naver.com/boram8857/224364090909 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1138 blog_id=boram8857 blog_post_no=224364090909 url=https://blog.naver.com/boram8857/224364090909 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224364090909 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224364090909 [PUBLISH ELAPSED] queue_id=954 elapsed=62.8s avg=69.6s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[17, 5, 4, 13] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=43 [PIPELINE RUN FINISH] run_id=1119, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 3 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 24236 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:24236:20260801070009 [PIPELINE RUN START] run_id=1176, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1034 realtor_id=4 article_no=2641212518 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1034, realtor_id=4, draft_id=1243, article_no=2641212518 [DRAFT HTML CHECK] clipboard_len=21029, draft_len=21029, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=1034, draft_id=1243, article_no=2641212518 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_05_2641212518_1785514335.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20654 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=12 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=7 two_col_tables=7 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=0 listing_banner_600x200=0 representative_images=0 images=7 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] FAIL [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [PREVIEW COPY ERROR] style_24 필수 레이아웃 검증 실패: 2_listing_banner, 10_facility_row_table [BODY INPUT ERROR] preview rendered copy failed [PUBLISH ELAPSED] queue_id=1034 elapsed=32.4s avg=32.4s [SMART SLEEP CALC] remaining_seconds=57558 remaining_count=1 target_cycle=57558.0 avg_publish=32.4 base_sleep=57525.6 range=28762~28762 selected=28762 [SLEEP] 28762s before next queue [PUBLISH TARGET SELECTED] queue_id=1035 realtor_id=5 article_no=2637513533 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1035, realtor_id=5, draft_id=1244, article_no=2637513533 [DRAFT HTML CHECK] clipboard_len=17833, draft_len=17833, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=1035, draft_id=1244, article_no=2637513533 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_08_2637513533_1785514339.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP UPLOAD OK] file chooser root=frame, selector=button:has-text("사진") [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17455 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=0 listing_banner_600x200=0 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] FAIL [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [PREVIEW COPY ERROR] style_24 필수 레이아웃 검증 실패: 2_listing_banner, 10_facility_row_table [BODY INPUT ERROR] preview rendered copy failed [PUBLISH ELAPSED] queue_id=1035 elapsed=37.6s avg=35.0s [SMART SLEEP CALC] remaining_seconds=28758 remaining_count=1 target_cycle=28758.0 avg_publish=35.0 base_sleep=28723.0 range=14361~14361 selected=14361 [SLEEP] 14361s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=57 [PIPELINE RUN FINISH] run_id=1176, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 0 [FAILED] 2 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-01 07:00:08] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-01 19:00:02] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 23996 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:23996:20260802070018 [PIPELINE RUN START] run_id=1183, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=2 [PUBLISH TARGET SELECTED] queue_id=1115 realtor_id=4 article_no=2641229853 sort_at=2026-08-01 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1115, realtor_id=4, draft_id=1324, article_no=2641229853 [DRAFT HTML CHECK] clipboard_len=16707, draft_len=16707, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=1115, draft_id=1324, article_no=2641229853 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_07_2641229853_1785600595.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("첨부") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[title*="사진"] [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image button [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD FAIL] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16706 plain_len= 562 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=나를 돌아보는 회고, 뜻밖의 발견을 기다립니다. #모두의회고 box={'x': 249.5, 'y': 357, 'width': 466.5, 'height': 19} [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=0 listing_banner_600x200=0 representative_images=1 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=FAIL preview_duplicate_count=1 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] FAIL [LAYOUT CHECK 2_listing_banner] FAIL [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [PREVIEW COPY ERROR] style_24 필수 레이아웃 검증 실패: 1_editor_representative_no_preview_duplicate, 2_listing_banner, 9_school_information, 10_facility_row_table [BODY INPUT ERROR] preview rendered copy failed [PUBLISH ELAPSED] queue_id=1115 elapsed=72.8s avg=72.8s [SMART SLEEP CALC] remaining_seconds=57508 remaining_count=2 target_cycle=28754.0 avg_publish=72.8 base_sleep=28681.2 range=14340~14340 selected=14340 [SLEEP] 14340s before next queue [PUBLISH TARGET SELECTED] queue_id=1035 realtor_id=5 article_no=2637513533 sort_at=2026-07-13 23:12:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1035, realtor_id=5, draft_id=1244, article_no=2637513533 [DRAFT HTML CHECK] clipboard_len=17833, draft_len=17833, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=1035, draft_id=1244, article_no=2637513533 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_08_2637513533_1785514339.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("첨부") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[title*="사진"] [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image button [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD FAIL] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17832 plain_len= 549 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=나를 돌아보는 회고, 뜻밖의 발견을 기다립니다. #모두의회고 box={'x': 249.5, 'y': 356, 'width': 368.28125, 'height': 15} [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=0 listing_banner_600x200=0 representative_images=1 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=FAIL preview_duplicate_count=1 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] FAIL [LAYOUT CHECK 2_listing_banner] FAIL [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [PREVIEW COPY ERROR] style_24 필수 레이아웃 검증 실패: 1_editor_representative_no_preview_duplicate, 2_listing_banner, 10_facility_row_table [BODY INPUT ERROR] preview rendered copy failed [PUBLISH ELAPSED] queue_id=1035 elapsed=72.3s avg=72.5s [SMART SLEEP CALC] remaining_seconds=43096 remaining_count=2 target_cycle=21548.0 avg_publish=72.5 base_sleep=21475.5 range=10737~10737 selected=10737 [SLEEP] 10737s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=2 private_pending=70 [PIPELINE RUN FINISH] run_id=1183, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 0 [FAILED] 2 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-02 07:00:18] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-02 14:00:40] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 17080 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:17080:20260803070004 [PIPELINE RUN START] run_id=1190, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=1115 realtor_id=4 article_no=2641229853 sort_at=2026-08-01 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1115, realtor_id=4, draft_id=1324, article_no=2641229853 [DRAFT HTML CHECK] clipboard_len=16707, draft_len=16707, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=1115, draft_id=1324, article_no=2641229853 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/jklovelike [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 2/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 3/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 4/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 5/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 6/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 7/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 8/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 9/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 10/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 11/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 12/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 13/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 14/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 15/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 16/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 17/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 18/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 19/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 20/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 21/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 22/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 23/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 24/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 25/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 26/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 27/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 28/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 29/30 url=https://blog.naver.com/jklovelike [WAIT EDITOR] 30/30 url=https://blog.naver.com/jklovelike [WRITE FINAL URL] https://blog.naver.com/jklovelike [WRITE HOLD] [WRITE_HOLD] realtor_id=4 / 글쓰기 iframe 미발견 / 최종 URL: https://blog.naver.com/jklovelike [PUBLISH ELAPSED] queue_id=1115 elapsed=36.7s avg=36.7s [SMART SLEEP CALC] remaining_seconds=57558 remaining_count=2 target_cycle=28779.0 avg_publish=36.7 base_sleep=28742.3 range=14371~14371 selected=14371 [SLEEP] 14371s before next queue [PUBLISH TARGET SELECTED] queue_id=1197 realtor_id=5 article_no=2636020509 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1197, realtor_id=5, draft_id=1406, article_no=2636020509 [DRAFT HTML CHECK] clipboard_len=17411, draft_len=17411, plain_len=543 ================================================================================ [INTEGRITY OK] queue_id=1197, draft_id=1406, article_no=2636020509 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2636020509_1785686378.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=button:has-text("첨부") [REP IMAGE BUTTON ERROR] root=frame, selector=button:has-text("첨부"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=span:has-text("사진") [REP IMAGE BUTTON ERROR] root=frame, selector=span:has-text("사진"), error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=[title*="사진"] [REP IMAGE BUTTON ERROR] root=frame, selector=[title*="사진"], error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image button [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image button, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP IMAGE BUTTON TRY] root=frame, selector=.se-toolbar-item-image [REP IMAGE BUTTON ERROR] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD FAIL] root=frame, selector=.se-toolbar-item-image, error=Timeout 7000ms exceeded while waiting for event "filechooser" =========================== logs =========================== waiting for event "filechooser" ============================================================ [REP UPLOAD RESULT] False [REP UPLOAD WARN] 대표이미지 직접 업로드 실패. CDN 본문 이미지를 유지합니다. [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17410 plain_len= 543 [BODY PLACEHOLDER COUNT] 2 [BODY PLACEHOLDER 1] text=나를 돌아보는 회고, 뜻밖의 발견을 기다립니다. #모두의회고 box={'x': 249.5, 'y': 356, 'width': 368.28125, 'height': 15} [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=0 listing_banner_600x200=0 representative_images=1 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=FAIL preview_duplicate_count=1 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] FAIL [LAYOUT CHECK 2_listing_banner] FAIL [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [PREVIEW COPY ERROR] style_24 필수 레이아웃 검증 실패: 1_editor_representative_no_preview_duplicate, 2_listing_banner, 10_facility_row_table [BODY INPUT ERROR] preview rendered copy failed [PUBLISH ELAPSED] queue_id=1197 elapsed=72.4s avg=54.5s [SMART SLEEP CALC] remaining_seconds=43114 remaining_count=1 target_cycle=43114.0 avg_publish=54.5 base_sleep=43059.5 range=21529~21529 selected=21529 [SLEEP] 21529s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=76 [PIPELINE RUN FINISH] run_id=1190, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 0 [FAILED] 2 ================================================================================ [DB LOCK RELEASED] publish_worker affected=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 16864 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:16864:20260804070013 [PIPELINE RUN START] run_id=1274, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1277 realtor_id=4 article_no=2641207863 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1277, realtor_id=4, draft_id=1555, article_no=2641207863 [DRAFT HTML CHECK] clipboard_len=19822, draft_len=19822, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=1277, draft_id=1555, article_no=2641207863 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2641207863_1785773207.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19444 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=12 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=7 two_col_tables=7 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=11 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1277_2641207863_naver_compatible_v16_20260804_070050.html [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1277_2641207863_after_paste_20260804_070101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1277_2641207863_after_paste_20260804_070101.txt [EDITOR DEBUG LEN] html= 245748 text= 3175 [EDITOR VALIDATE] html_len=245748 text_len=3175 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224367388975 [RESULT URL CHECK] https://blog.naver.com/pjy287/224367388975 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1555 blog_id=pjy287 blog_post_no=224367388975 url=https://blog.naver.com/pjy287/224367388975 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224367388975 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224367388975 [PUBLISH ELAPSED] queue_id=1277 elapsed=67.1s avg=67.1s [SMART SLEEP CALC] remaining_seconds=57519 remaining_count=1 target_cycle=57519.0 avg_publish=67.1 base_sleep=57451.9 range=28725~28725 selected=28725 [SLEEP] 28725s before next queue [PUBLISH TARGET SELECTED] queue_id=1278 realtor_id=5 article_no=2636021009 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1278, realtor_id=5, draft_id=1556, article_no=2636021009 [DRAFT HTML CHECK] clipboard_len=16768, draft_len=16768, plain_len=566 ================================================================================ [INTEGRITY OK] queue_id=1278, draft_id=1556, article_no=2636021009 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_02_2636021009_1785773209.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16385 plain_len= 566 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=7 two_col_tables=7 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] PASS [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1278_2636021009_naver_compatible_v16_20260804_150042.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1278_2636021009_after_paste_20260804_150053.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1278_2636021009_after_paste_20260804_150053.txt [EDITOR DEBUG LEN] html= 224404 text= 3108 [EDITOR VALIDATE] html_len=224404 text_len=3108 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224367834188 [RESULT URL CHECK] https://blog.naver.com/boram8857/224367834188 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1556 blog_id=boram8857 blog_post_no=224367834188 url=https://blog.naver.com/boram8857/224367834188 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224367834188 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224367834188 [PUBLISH ELAPSED] queue_id=1278 elapsed=66.8s avg=66.9s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=100 [PIPELINE RUN FINISH] run_id=1274, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 10724 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:10724:20260805070009 [PIPELINE RUN START] run_id=1292, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1359 realtor_id=4 article_no=2641207719 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1359, realtor_id=4, draft_id=1648, article_no=2641207719 [DRAFT HTML CHECK] clipboard_len=15207, draft_len=15207, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=1359, draft_id=1648, article_no=2641207719 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2641207719_1785859555.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14831 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1359_2641207719_naver_compatible_v16_20260805_070044.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1359_2641207719_after_paste_20260805_070056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1359_2641207719_after_paste_20260805_070056.txt [EDITOR DEBUG LEN] html= 203349 text= 2818 [EDITOR VALIDATE] html_len=203349 text_len=2818 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224368480079 [RESULT URL CHECK] https://blog.naver.com/pjy287/224368480079 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1648 blog_id=pjy287 blog_post_no=224368480079 url=https://blog.naver.com/pjy287/224368480079 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224368480079 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224368480079 [PUBLISH ELAPSED] queue_id=1359 elapsed=65.9s avg=65.9s [SMART SLEEP CALC] remaining_seconds=57524 remaining_count=1 target_cycle=57524.0 avg_publish=65.9 base_sleep=57458.1 range=28729~28729 selected=28729 [SLEEP] 28729s before next queue [PUBLISH TARGET SELECTED] queue_id=1370 realtor_id=17 article_no=2641787685 sort_at=2026-08-04 23:31:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1370, realtor_id=17, draft_id=1659, article_no=2641787685 [DRAFT HTML CHECK] clipboard_len=20031, draft_len=20031, plain_len=343 ================================================================================ [INTEGRITY OK] queue_id=1370, draft_id=1659, article_no=2641787685 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=17 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_17.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/on_real_estate?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/on_real_estate?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=on_real_estate&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_06_2641787685_1785859615.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19655 plain_len= 343 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=3 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=11 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1370_2641787685_naver_compatible_v16_20260805_150041.html [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1370_2641787685_after_paste_20260805_150052.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1370_2641787685_after_paste_20260805_150052.txt [EDITOR DEBUG LEN] html= 231653 text= 3473 [EDITOR VALIDATE] html_len=231653 text_len=3473 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 375.8, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/on_real_estate/224368921007 [RESULT URL CHECK] https://blog.naver.com/on_real_estate/224368921007 [PRIVATE QUEUE NONE] realtor_id=17 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1659 blog_id=on_real_estate blog_post_no=224368921007 url=https://blog.naver.com/on_real_estate/224368921007 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/on_real_estate/224368921007 [BLOG RESULT PARSED] blog_id=on_real_estate blog_post_no=224368921007 [PUBLISH ELAPSED] queue_id=1370 elapsed=67.1s avg=66.5s [SMART SLEEP CALC] remaining_seconds=28728 remaining_count=1 target_cycle=28728.0 avg_publish=66.5 base_sleep=28661.5 range=14330~14330 selected=14330 [SLEEP] 14330s before next queue [PUBLISH TARGET SELECTED] queue_id=1360 realtor_id=5 article_no=2636021584 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1360, realtor_id=5, draft_id=1649, article_no=2636021584 [DRAFT HTML CHECK] clipboard_len=16074, draft_len=16074, plain_len=577 ================================================================================ [INTEGRITY OK] queue_id=1360, draft_id=1649, article_no=2636021584 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2636021584_1785859557.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15697 plain_len= 577 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1360_2636021584_naver_compatible_v16_20260805_190038.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1360_2636021584_after_paste_20260805_190049.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1360_2636021584_after_paste_20260805_190049.txt [EDITOR DEBUG LEN] html= 205313 text= 3349 [EDITOR VALIDATE] html_len=205313 text_len=3349 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224369171702 [RESULT URL CHECK] https://blog.naver.com/boram8857/224369171702 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1649 blog_id=boram8857 blog_post_no=224369171702 url=https://blog.naver.com/boram8857/224369171702 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224369171702 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224369171702 [PUBLISH ELAPSED] queue_id=1360 elapsed=67.1s avg=66.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[17, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=110 [PIPELINE RUN FINISH] run_id=1292, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-05 07:00:09] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-05 19:01:09] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 17048 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:17048:20260806070012 [PIPELINE RUN START] run_id=1299, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1440 realtor_id=4 article_no=2641937607 sort_at=2026-08-05 23:17:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1440, realtor_id=4, draft_id=1729, article_no=2641937607 [DRAFT HTML CHECK] clipboard_len=20282, draft_len=20282, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=1440, draft_id=1729, article_no=2641937607 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_06_2641937607_1785946787.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19907 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=15 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1440_2641937607_naver_compatible_v16_20260806_070049.html [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1440_2641937607_after_paste_20260806_070100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1440_2641937607_after_paste_20260806_070100.txt [EDITOR DEBUG LEN] html= 241680 text= 2998 [EDITOR VALIDATE] html_len=241680 text_len=2998 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224369566834 [RESULT URL CHECK] https://blog.naver.com/pjy287/224369566834 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1729 blog_id=pjy287 blog_post_no=224369566834 url=https://blog.naver.com/pjy287/224369566834 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224369566834 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224369566834 [PUBLISH ELAPSED] queue_id=1440 elapsed=66.8s avg=66.8s [SMART SLEEP CALC] remaining_seconds=57520 remaining_count=2 target_cycle=28760.0 avg_publish=66.8 base_sleep=28693.2 range=14346~14346 selected=14346 [SLEEP] 14346s before next queue [PUBLISH TARGET SELECTED] queue_id=1441 realtor_id=5 article_no=2636022524 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1441, realtor_id=5, draft_id=1730, article_no=2636022524 [DRAFT HTML CHECK] clipboard_len=16995, draft_len=16995, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=1441, draft_id=1730, article_no=2636022524 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/nidlogin.login [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/nidlogin.login [AUTO RELOGIN WAIT] 30/90 url=https://nid.naver.com/nidlogin.login [AUTO RELOGIN WAIT] 60/90 url=https://nid.naver.com/nidlogin.login [AUTO RELOGIN FAIL] expired 로그인 미완료 / current_url=https://nid.naver.com/nidlogin.login [SESSION HOLD] [SESSION_HOLD] realtor_id=5 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 로그인 미완료 / current_url=https://nid.naver.com/nidlogin.login [PUBLISH ELAPSED] queue_id=1441 elapsed=97.3s avg=82.1s [SMART SLEEP CALC] remaining_seconds=43072 remaining_count=1 target_cycle=43072.0 avg_publish=82.1 base_sleep=42989.9 range=21494~21494 selected=21494 [SLEEP] 21494s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=128 [PIPELINE RUN FINISH] run_id=1299, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 1 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-06 07:00:12] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-06 17:00:22] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 21068 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:21068:20260807070003 [PIPELINE RUN START] run_id=1307, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1527 realtor_id=4 article_no=2642212388 sort_at=2026-08-06 23:16:00 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1527, realtor_id=4, draft_id=1816, article_no=2642212388 [DRAFT HTML CHECK] clipboard_len=15793, draft_len=15793, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=1527, draft_id=1816, article_no=2642212388 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_04_2642212388_1786033095.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15415 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1527_2642212388_naver_compatible_v16_20260807_070040.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1527_2642212388_after_paste_20260807_070051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1527_2642212388_after_paste_20260807_070051.txt [EDITOR DEBUG LEN] html= 205098 text= 2865 [EDITOR VALIDATE] html_len=205098 text_len=2865 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224370686151 [RESULT URL CHECK] https://blog.naver.com/pjy287/224370686151 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1816 blog_id=pjy287 blog_post_no=224370686151 url=https://blog.naver.com/pjy287/224370686151 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224370686151 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224370686151Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=1527 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=57528 remaining_count=2 target_cycle=28764.0 avg_publish=66.9 base_sleep=28697.1 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=438 realtor_id=13 article_no=2636289922 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=438, realtor_id=13, draft_id=563, article_no=2636289922 [DRAFT HTML CHECK] clipboard_len=16387, draft_len=16387, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=438, draft_id=563, article_no=2636289922 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=13 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/h9000082?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2636289922_1784041160.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=438 elapsed=17.0s avg=42.0s [SMART SLEEP CALC] remaining_seconds=43163 remaining_count=1 target_cycle=43163.0 avg_publish=42.0 base_sleep=43121.0 range=21560~21560 selected=21560 [SLEEP] 21560s before next queue [PUBLISH TARGET SELECTED] queue_id=1528 realtor_id=5 article_no=2636023006 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1528, realtor_id=5, draft_id=1817, article_no=2636023006 [DRAFT HTML CHECK] clipboard_len=15648, draft_len=15648, plain_len=524 ================================================================================ [INTEGRITY OK] queue_id=1528, draft_id=1817, article_no=2636023006 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_08_2636023006_1786033111.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15270 plain_len= 524 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1528_2636023006_naver_compatible_v16_20260807_170032.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1528_2636023006_after_paste_20260807_170044.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1528_2636023006_after_paste_20260807_170044.txt [EDITOR DEBUG LEN] html= 211495 text= 2822 [EDITOR VALIDATE] html_len=211495 text_len=2822 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224371265778 [RESULT URL CHECK] https://blog.naver.com/boram8857/224371265778 [PRIVATE QUEUE COUNT] realtor_id=5 count=2 [PRIVATE START] private_queue_id=291 realtor_id=5 article_no=2636265066 blog_id=boram8857 blog_post_no=224349135018 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224349135018 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=291 article_no=2636265066 [PRIVATE START] private_queue_id=292 realtor_id=5 article_no=2636020509 blog_id=boram8857 blog_post_no=224370202967 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224370202967 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=292 article_no=2636020509 [PRIVATE QUEUE RESULT] {'processed': 2, 'success': 2, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1817 blog_id=boram8857 blog_post_no=224371265778 url=https://blog.naver.com/boram8857/224371265778 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224371265778 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224371265778 [PUBLISH ELAPSED] queue_id=1528 elapsed=142.5s avg=75.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 4, 13] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=152 [PIPELINE RUN FINISH] run_id=1307, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-07 07:00:03] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-07 17:02:19] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 20176 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:20176:20260808070011 [PIPELINE RUN START] run_id=1318, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=1616 realtor_id=4 article_no=2642006368 sort_at=2026-08-06 23:16:00 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1616, realtor_id=4, draft_id=1905, article_no=2642006368 [DRAFT HTML CHECK] clipboard_len=20652, draft_len=20652, plain_len=561 ================================================================================ [INTEGRITY OK] queue_id=1616, draft_id=1905, article_no=2642006368 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_04_2642006368_1786119597.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20269 plain_len= 561 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=18 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1616_2642006368_naver_compatible_v16_20260808_070043.html [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1616_2642006368_after_paste_20260808_070054.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1616_2642006368_after_paste_20260808_070054.txt [EDITOR DEBUG LEN] html= 235415 text= 2897 [EDITOR VALIDATE] html_len=235415 text_len=2897 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]}Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224371771096 [RESULT URL CHECK] https://blog.naver.com/pjy287/224371771096 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1905 blog_id=pjy287 blog_post_no=224371771096 url=https://blog.naver.com/pjy287/224371771096 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224371771096 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224371771096 [PUBLISH ELAPSED] queue_id=1616 elapsed=62.1s avg=62.1s [SMART SLEEP CALC] remaining_seconds=57526 remaining_count=2 target_cycle=28763.0 avg_publish=62.1 base_sleep=28700.9 range=14350~14350 selected=14350 [SLEEP] 14350s before next queue [PUBLISH TARGET SELECTED] queue_id=438 realtor_id=13 article_no=2636289922 sort_at=2026-07-13 23:14:16 today_published_count=0 ================================================================================ [QUEUE START] queue_id=438, realtor_id=13, draft_id=563, article_no=2636289922 [DRAFT HTML CHECK] clipboard_len=16387, draft_len=16387, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=438, draft_id=563, article_no=2636289922 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=13 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_13.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/h9000082?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/h9000082?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/h9000082?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=h9000082&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/07/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2636289922_1784041160.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=438 elapsed=16.9s avg=39.5s [SMART SLEEP CALC] remaining_seconds=43159 remaining_count=1 target_cycle=43159.0 avg_publish=39.5 base_sleep=43119.5 range=21559~21559 selected=21559 [SLEEP] 21559s before next queue [PUBLISH TARGET SELECTED] queue_id=1617 realtor_id=5 article_no=2636025661 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1617, realtor_id=5, draft_id=1906, article_no=2636025661 [DRAFT HTML CHECK] clipboard_len=15676, draft_len=15676, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=1617, draft_id=1906, article_no=2636025661 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2636025661_1786119614.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15299 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1617_2636025661_naver_compatible_v16_20260808_170035.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1617_2636025661_after_paste_20260808_170047.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1617_2636025661_after_paste_20260808_170047.txt [EDITOR DEBUG LEN] html= 211455 text= 2853 [EDITOR VALIDATE] html_len=211455 text_len=2853 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224372193143 [RESULT URL CHECK] https://blog.naver.com/boram8857/224372193143 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1906 blog_id=boram8857 blog_post_no=224372193143 url=https://blog.naver.com/boram8857/224372193143 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224372193143 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224372193143 [PUBLISH ELAPSED] queue_id=1617 elapsed=66.5s avg=48.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 4, 13] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=174 [PIPELINE RUN FINISH] run_id=1318, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-08 07:00:11] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-08 17:01:06] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 21724 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:21724:20260809070017 [PIPELINE RUN START] run_id=1325, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1705 realtor_id=4 article_no=2641207678 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1705, realtor_id=4, draft_id=1994, article_no=2641207678 [DRAFT HTML CHECK] clipboard_len=19706, draft_len=19706, plain_len=530 ================================================================================ [INTEGRITY OK] queue_id=1705, draft_id=1994, article_no=2641207678 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_06_2641207678_1786206083.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19329 plain_len= 530 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=13 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1705_2641207678_naver_compatible_v16_20260809_070053.html [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1705_2641207678_after_paste_20260809_070104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1705_2641207678_after_paste_20260809_070104.txt [EDITOR DEBUG LEN] html= 235021 text= 2965 [EDITOR VALIDATE] html_len=235021 text_len=2965 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 663.3, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224372681412 [RESULT URL CHECK] https://blog.naver.com/pjy287/224372681412 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1994 blog_id=pjy287 blog_post_no=224372681412 url=https://blog.naver.com/pjy287/224372681412 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224372681412 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224372681412 [PUBLISH ELAPSED] queue_id=1705 elapsed=66.3s avg=66.3s [SMART SLEEP CALC] remaining_seconds=57516 remaining_count=1 target_cycle=57516.0 avg_publish=66.3 base_sleep=57449.7 range=28724~28724 selected=28724 [SLEEP] 28724s before next queue [PUBLISH TARGET SELECTED] queue_id=1706 realtor_id=5 article_no=2636041739 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1706, realtor_id=5, draft_id=1995, article_no=2636041739 [DRAFT HTML CHECK] clipboard_len=16844, draft_len=16844, plain_len=525 ================================================================================ [INTEGRITY OK] queue_id=1706, draft_id=1995, article_no=2636041739 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2636041739_1786206085.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16466 plain_len= 525 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=9 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1706_2636041739_naver_compatible_v16_20260809_150043.html [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1706_2636041739_after_paste_20260809_150055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1706_2636041739_after_paste_20260809_150055.txt [EDITOR DEBUG LEN] html= 214842 text= 2693 [EDITOR VALIDATE] html_len=214842 text_len=2693 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224372967097 [RESULT URL CHECK] https://blog.naver.com/boram8857/224372967097 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=1995 blog_id=boram8857 blog_post_no=224372967097 url=https://blog.naver.com/boram8857/224372967097 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224372967097 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224372967097 [PUBLISH ELAPSED] queue_id=1706 elapsed=66.7s avg=66.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=195 [PIPELINE RUN FINISH] run_id=1325, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-09 07:00:16] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-09 15:01:14] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 392 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:392:20260810070005 [PIPELINE RUN START] run_id=1332, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1795 realtor_id=4 article_no=2641207124 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1795, realtor_id=4, draft_id=2084, article_no=2641207124 [DRAFT HTML CHECK] clipboard_len=19578, draft_len=19578, plain_len=557 ================================================================================ [INTEGRITY OK] queue_id=1795, draft_id=2084, article_no=2641207124 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2641207124_1786292154.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19200 plain_len= 557 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=12 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1795_2641207124_naver_compatible_v16_20260810_070041.html [PREVIEW IMAGE COUNT] 12 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1795_2641207124_after_paste_20260810_070053.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1795_2641207124_after_paste_20260810_070053.txt [EDITOR DEBUG LEN] html= 237717 text= 3055 [EDITOR VALIDATE] html_len=237717 text_len=3055 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224373538921 [RESULT URL CHECK] https://blog.naver.com/pjy287/224373538921 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2084 blog_id=pjy287 blog_post_no=224373538921 url=https://blog.naver.com/pjy287/224373538921 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224373538921 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224373538921 [PUBLISH ELAPSED] queue_id=1795 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=57527 remaining_count=1 target_cycle=57527.0 avg_publish=66.9 base_sleep=57460.1 range=28730~28730 selected=28730 [SLEEP] 28730s before next queue [PUBLISH TARGET SELECTED] queue_id=1796 realtor_id=5 article_no=2636042297 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1796, realtor_id=5, draft_id=2085, article_no=2636042297 [DRAFT HTML CHECK] clipboard_len=17238, draft_len=17238, plain_len=557 ================================================================================ [INTEGRITY OK] queue_id=1796, draft_id=2085, article_no=2636042297 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_04_2636042297_1786292156.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16860 plain_len= 557 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=10 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1796_2636042297_naver_compatible_v16_20260810_150039.html [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1796_2636042297_after_paste_20260810_150051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1796_2636042297_after_paste_20260810_150051.txt [EDITOR DEBUG LEN] html= 217000 text= 2723 [EDITOR VALIDATE] html_len=217000 text_len=2723 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224374006148 [RESULT URL CHECK] https://blog.naver.com/boram8857/224374006148 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2085 blog_id=boram8857 blog_post_no=224374006148 url=https://blog.naver.com/boram8857/224374006148 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224374006148 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224374006148 [PUBLISH ELAPSED] queue_id=1796 elapsed=67.6s avg=67.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=179 [PIPELINE RUN FINISH] run_id=1332, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-10 07:00:05] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-10 15:01:10] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 20328 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:20328:20260811070008 [PIPELINE RUN START] run_id=1339, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1882 realtor_id=4 article_no=2641206959 sort_at=2026-07-31 23:15:54 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1882, realtor_id=4, draft_id=2171, article_no=2641206959 [DRAFT HTML CHECK] clipboard_len=14385, draft_len=14385, plain_len=329 ================================================================================ [INTEGRITY OK] queue_id=1882, draft_id=2171, article_no=2641206959 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_06_2641206959_1786378727.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14007 plain_len= 329 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=4 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] FAIL [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 4_broker_title, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1882_2641206959_naver_compatible_v16_20260811_070044.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1882_2641206959_after_paste_20260811_070055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1882_2641206959_after_paste_20260811_070055.txt [EDITOR DEBUG LEN] html= 186905 text= 2641 [EDITOR VALIDATE] html_len=186905 text_len=2641 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": null, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224374718295 [RESULT URL CHECK] https://blog.naver.com/pjy287/224374718295 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2171 blog_id=pjy287 blog_post_no=224374718295 url=https://blog.naver.com/pjy287/224374718295 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224374718295 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224374718295 [PUBLISH ELAPSED] queue_id=1882 elapsed=66.0s avg=66.0s [SMART SLEEP CALC] remaining_seconds=57525 remaining_count=1 target_cycle=57525.0 avg_publish=66.0 base_sleep=57459.0 range=28729~28729 selected=28729 [SLEEP] 28729s before next queue [PUBLISH TARGET SELECTED] queue_id=1883 realtor_id=5 article_no=2636047635 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1883, realtor_id=5, draft_id=2172, article_no=2636047635 [DRAFT HTML CHECK] clipboard_len=15703, draft_len=15703, plain_len=561 ================================================================================ [INTEGRITY OK] queue_id=1883, draft_id=2172, article_no=2636047635 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_06_2636047635_1786378729.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15320 plain_len= 561 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1883_2636047635_naver_compatible_v16_20260811_150046.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1883_2636047635_after_paste_20260811_150057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1883_2636047635_after_paste_20260811_150057.txt [EDITOR DEBUG LEN] html= 211502 text= 2860 [EDITOR VALIDATE] html_len=211502 text_len=2860 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224375178056 [RESULT URL CHECK] https://blog.naver.com/boram8857/224375178056 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2172 blog_id=boram8857 blog_post_no=224375178056 url=https://blog.naver.com/boram8857/224375178056 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224375178056 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224375178056 [PUBLISH ELAPSED] queue_id=1883 elapsed=67.2s avg=66.6s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=131 [PIPELINE RUN FINISH] run_id=1339, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-11 07:00:08] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-11 15:01:16] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 4788 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:4788:20260812070000 [PIPELINE RUN START] run_id=1347, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=1978 realtor_id=4 article_no=2643079927 sort_at=2026-08-11 23:18:03 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1978, realtor_id=4, draft_id=2262, article_no=2643079927 [DRAFT HTML CHECK] clipboard_len=16527, draft_len=16527, plain_len=570 ================================================================================ [INTEGRITY OK] queue_id=1978, draft_id=2262, article_no=2643079927 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_01_2643079927_1786464724.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16149 plain_len= 570 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1978_2643079927_naver_compatible_v16_20260812_070037.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1978_2643079927_after_paste_20260812_070048.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1978_2643079927_after_paste_20260812_070048.txt [EDITOR DEBUG LEN] html= 216295 text= 3005 [EDITOR VALIDATE] html_len=216295 text_len=3005 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224375836652 [RESULT URL CHECK] https://blog.naver.com/pjy287/224375836652 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2262 blog_id=pjy287 blog_post_no=224375836652 url=https://blog.naver.com/pjy287/224375836652 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224375836652 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224375836652 [PUBLISH ELAPSED] queue_id=1978 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=57532 remaining_count=1 target_cycle=57532.0 avg_publish=66.9 base_sleep=57465.1 range=28732~28732 selected=28732 [SLEEP] 28732s before next queue [PUBLISH TARGET SELECTED] queue_id=1979 realtor_id=5 article_no=2636069186 sort_at=2026-07-04 23:12:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=1979, realtor_id=5, draft_id=2263, article_no=2636069186 [DRAFT HTML CHECK] clipboard_len=14690, draft_len=14690, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=1979, draft_id=2263, article_no=2636069186 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2636069186_1786464739.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14314 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_1979_2636069186_naver_compatible_v16_20260812_150034.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1979_2636069186_after_paste_20260812_150046.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_1979_2636069186_after_paste_20260812_150046.txt [EDITOR DEBUG LEN] html= 193589 text= 2718 [EDITOR VALIDATE] html_len=193589 text_len=2718 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224376331022 [RESULT URL CHECK] https://blog.naver.com/boram8857/224376331022 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2263 blog_id=boram8857 blog_post_no=224376331022 url=https://blog.naver.com/boram8857/224376331022 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224376331022 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224376331022 [PUBLISH ELAPSED] queue_id=1979 elapsed=65.4s avg=66.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=101 [PIPELINE RUN FINISH] run_id=1347, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 2 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-12 07:00:00] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-12 15:01:05] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=12696 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=12696 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 1488 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1488:20260814070010 [PIPELINE RUN START] run_id=1367, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=2264 realtor_id=105 article_no=2643645367 sort_at=2026-08-14 00:37:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2264, realtor_id=105, draft_id=2540, article_no=2643645367 [DRAFT HTML CHECK] clipboard_len=22881, draft_len=22881, plain_len=533 ================================================================================ [INTEGRITY OK] queue_id=2264, draft_id=2540, article_no=2643645367 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2643645367_1786638986.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 22503 plain_len= 533 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=20 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2264_2643645367_naver_compatible_v16_20260814_070046.html [PREVIEW IMAGE COUNT] 20 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2264_2643645367_after_paste_20260814_070058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2264_2643645367_after_paste_20260814_070058.txt [EDITOR DEBUG LEN] html= 260665 text= 3644 [EDITOR VALIDATE] html_len=260665 text_len=3644 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 466.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 2/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 3/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 4/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 5/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 6/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 7/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 8/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 9/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 10/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 11/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 12/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 13/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 14/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 15/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 16/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 17/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 18/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 19/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 20/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 21/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 22/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 23/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 24/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 25/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 26/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 27/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 28/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 29/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WAIT PUBLISH RESULT] 30/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [RESULT URL CHECK] https://blog.naver.com/budongsanmatjip?Redirect=Write& [PUBLISH ELAPSED] queue_id=2264 elapsed=96.0s avg=96.0s [SMART SLEEP CALC] remaining_seconds=57493 remaining_count=2 target_cycle=28746.5 avg_publish=96.0 base_sleep=28650.5 range=14325~14325 selected=14325 [SLEEP] 14325s before next queue [PUBLISH TARGET SELECTED] queue_id=2182 realtor_id=4 article_no=2643627429 sort_at=2026-08-13 23:18:55 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2182, realtor_id=4, draft_id=2458, article_no=2643627429 [DRAFT HTML CHECK] clipboard_len=20977, draft_len=20977, plain_len=524 ================================================================================ [INTEGRITY OK] queue_id=2182, draft_id=2458, article_no=2643627429 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_03_2643627429_1786637921.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20599 plain_len= 524 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2182_2643627429_naver_compatible_v16_20260814_110107.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2182_2643627429_after_paste_20260814_110118.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2182_2643627429_after_paste_20260814_110118.txt [EDITOR DEBUG LEN] html= 245884 text= 2973 [EDITOR VALIDATE] html_len=245884 text_len=2973 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224378299429 [RESULT URL CHECK] https://blog.naver.com/pjy287/224378299429 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2458 blog_id=pjy287 blog_post_no=224378299429 url=https://blog.naver.com/pjy287/224378299429 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224378299429 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224378299429 [PUBLISH ELAPSED] queue_id=2182 elapsed=66.1s avg=81.1s [SMART SLEEP CALC] remaining_seconds=43102 remaining_count=1 target_cycle=43102.0 avg_publish=81.1 base_sleep=43020.9 range=21510~21510 selected=21510 [SLEEP] 21510s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=91 [PIPELINE RUN FINISH] run_id=1367, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 2 [SUCCESS] 1 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5424 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5424:20260815070009 [PIPELINE RUN START] run_id=1386, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=2375 realtor_id=105 article_no=2643889059 sort_at=2026-08-15 00:40:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2375, realtor_id=105, draft_id=2638, article_no=2643889059 [DRAFT HTML CHECK] clipboard_len=21371, draft_len=21371, plain_len=552 ================================================================================ [INTEGRITY OK] queue_id=2375, draft_id=2638, article_no=2643889059 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_02_2643889059_1786725311.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=2375 elapsed=17.7s avg=17.7s [SMART SLEEP CALC] remaining_seconds=57572 remaining_count=3 target_cycle=19190.7 avg_publish=17.7 base_sleep=19173.0 range=9586~9586 selected=9586 [SLEEP] 9586s before next queue [PUBLISH TARGET SELECTED] queue_id=2296 realtor_id=4 article_no=2643660496 sort_at=2026-08-14 23:18:19 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2296, realtor_id=4, draft_id=2559, article_no=2643660496 [DRAFT HTML CHECK] clipboard_len=16510, draft_len=16510, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=2296, draft_id=2559, article_no=2643660496 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2643660496_1786724650.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16132 plain_len= 542 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2296_2643660496_naver_compatible_v16_20260815_094049.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2296_2643660496_after_paste_20260815_094100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2296_2643660496_after_paste_20260815_094100.txt [EDITOR DEBUG LEN] html= 216325 text= 2987 [EDITOR VALIDATE] html_len=216325 text_len=2987 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224379277666 [RESULT URL CHECK] https://blog.naver.com/pjy287/224379277666 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2559 blog_id=pjy287 blog_post_no=224379277666 url=https://blog.naver.com/pjy287/224379277666 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224379277666 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224379277666 [PUBLISH ELAPSED] queue_id=2296 elapsed=66.5s avg=42.1s [SMART SLEEP CALC] remaining_seconds=47920 remaining_count=2 target_cycle=23960.0 avg_publish=42.1 base_sleep=23917.9 range=11958~11958 selected=11958 [SLEEP] 11958s before next queue [PUBLISH TARGET SELECTED] queue_id=2297 realtor_id=5 article_no=2635363466 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2297, realtor_id=5, draft_id=2560, article_no=2635363466 [DRAFT HTML CHECK] clipboard_len=15651, draft_len=15651, plain_len=525 ================================================================================ [INTEGRITY OK] queue_id=2297, draft_id=2560, article_no=2635363466 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_04_2635363466_1786724652.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15268 plain_len= 525 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2297_2635363466_naver_compatible_v16_20260815_130114.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2297_2635363466_after_paste_20260815_130125.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2297_2635363466_after_paste_20260815_130125.txt [EDITOR DEBUG LEN] html= 211585 text= 2822 [EDITOR VALIDATE] html_len=211585 text_len=2822 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224379410566 [RESULT URL CHECK] https://blog.naver.com/boram8857/224379410566 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2560 blog_id=boram8857 blog_post_no=224379410566 url=https://blog.naver.com/boram8857/224379410566 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224379410566 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224379410566 [PUBLISH ELAPSED] queue_id=2297 elapsed=66.9s avg=50.4s [SMART SLEEP CALC] remaining_seconds=35895 remaining_count=1 target_cycle=35895.0 avg_publish=50.4 base_sleep=35844.6 range=17922~17922 selected=17922 [SLEEP] 17922s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=92 [PIPELINE RUN FINISH] run_id=1386, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-15 07:00:08] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-15 18:00:27] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 13516 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:13516:20260816070017 [PIPELINE RUN START] run_id=1397, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=2400 realtor_id=4 article_no=2644008502 sort_at=2026-08-15 23:18:22 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2400, realtor_id=4, draft_id=2663, article_no=2644008502 [DRAFT HTML CHECK] clipboard_len=16557, draft_len=16557, plain_len=558 ================================================================================ [INTEGRITY OK] queue_id=2400, draft_id=2663, article_no=2644008502 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_05_2644008502_1786811020.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16179 plain_len= 558 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2400_2644008502_naver_compatible_v16_20260816_070049.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2400_2644008502_after_paste_20260816_070100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2400_2644008502_after_paste_20260816_070100.txt [EDITOR DEBUG LEN] html= 216469 text= 3016 [EDITOR VALIDATE] html_len=216469 text_len=3016 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224380001910 [RESULT URL CHECK] https://blog.naver.com/pjy287/224380001910 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2663 blog_id=pjy287 blog_post_no=224380001910 url=https://blog.naver.com/pjy287/224380001910 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224380001910 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224380001910 [PUBLISH ELAPSED] queue_id=2400 elapsed=62.1s avg=62.1s [SMART SLEEP CALC] remaining_seconds=57520 remaining_count=2 target_cycle=28760.0 avg_publish=62.1 base_sleep=28697.9 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=2581 realtor_id=105 article_no=2643847175 sort_at=2026-08-15 00:40:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2581, realtor_id=105, draft_id=2844, article_no=2643847175Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [DRAFT HTML CHECK] clipboard_len=21396, draft_len=21396, plain_len=544 ================================================================================ [INTEGRITY OK] queue_id=2581, draft_id=2844, article_no=2643847175 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2643847175_1786827935.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=2581 elapsed=17.5s avg=39.8s [SMART SLEEP CALC] remaining_seconds=43154 remaining_count=2 target_cycle=21577.0 avg_publish=39.8 base_sleep=21537.2 range=10768~10768 selected=10768 [SLEEP] 10768s before next queue [PUBLISH TARGET SELECTED] queue_id=2504 realtor_id=5 article_no=2635370625 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2504, realtor_id=5, draft_id=2767, article_no=2635370625 [DRAFT HTML CHECK] clipboard_len=16186, draft_len=16186, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=2504, draft_id=2767, article_no=2635370625 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_03_2635370625_1786826913.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15808 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2504_2635370625_naver_compatible_v16_20260816_140050.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2504_2635370625_after_paste_20260816_140101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2504_2635370625_after_paste_20260816_140101.txt [EDITOR DEBUG LEN] html= 205855 text= 3425 [EDITOR VALIDATE] html_len=205855 text_len=3425 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224380236186 [RESULT URL CHECK] https://blog.naver.com/boram8857/224380236186 [PRIVATE QUEUE COUNT] realtor_id=5 count=1 [PRIVATE START] private_queue_id=535 realtor_id=5 article_no=2635363466 blog_id=boram8857 blog_post_no=224379410566 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224379410566 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=535 article_no=2635363466 [PRIVATE QUEUE RESULT] {'processed': 1, 'success': 1, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2767 blog_id=boram8857 blog_post_no=224380236186 url=https://blog.naver.com/boram8857/224380236186 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224380236186 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224380236186 [PUBLISH ELAPSED] queue_id=2504 elapsed=105.1s avg=61.5s [SMART SLEEP CALC] remaining_seconds=32281 remaining_count=1 target_cycle=32281.0 avg_publish=61.5 base_sleep=32219.5 range=16109~16109 selected=16109 [SLEEP] 16109s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=108 [PIPELINE RUN FINISH] run_id=1397, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-16 07:00:17] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-16 18:30:27] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5320 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5320:20260817070004 [PIPELINE RUN START] run_id=1404, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=2683 realtor_id=105 article_no=2643840581 sort_at=2026-08-15 00:40:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2683, realtor_id=105, draft_id=2946, article_no=2643840581 [DRAFT HTML CHECK] clipboard_len=19963, draft_len=19963, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=2683, draft_id=2946, article_no=2643840581 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2643840581_1786897590.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=2683 elapsed=17.2s avg=17.2s [SMART SLEEP CALC] remaining_seconds=57577 remaining_count=3 target_cycle=19192.3 avg_publish=17.2 base_sleep=19175.2 range=9587~9587 selected=9587 [SLEEP] 9587s before next queue [PUBLISH TARGET SELECTED] queue_id=2606 realtor_id=4 article_no=2643625218 sort_at=2026-08-13 23:18:55 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2606, realtor_id=4, draft_id=2869, article_no=2643625218 [DRAFT HTML CHECK] clipboard_len=16525, draft_len=16525, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=2606, draft_id=2869, article_no=2643625218 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2643625218_1786896553.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16149 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2606_2643625218_naver_compatible_v16_20260817_094044.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2606_2643625218_after_paste_20260817_094056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2606_2643625218_after_paste_20260817_094056.txt [EDITOR DEBUG LEN] html= 216330 text= 2980 [EDITOR VALIDATE] html_len=216330 text_len=2980 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224380915480 [RESULT URL CHECK] https://blog.naver.com/pjy287/224380915480 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2869 blog_id=pjy287 blog_post_no=224380915480 url=https://blog.naver.com/pjy287/224380915480 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224380915480 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224380915480 [PUBLISH ELAPSED] queue_id=2606 elapsed=66.2s avg=41.7s [SMART SLEEP CALC] remaining_seconds=47924 remaining_count=2 target_cycle=23962.0 avg_publish=41.7 base_sleep=23920.3 range=11960~11960 selected=11960 [SLEEP] 11960s before next queue [PUBLISH TARGET SELECTED] queue_id=2607 realtor_id=5 article_no=2635371308 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2607, realtor_id=5, draft_id=2870, article_no=2635371308 [DRAFT HTML CHECK] clipboard_len=15689, draft_len=15689, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=2607, draft_id=2870, article_no=2635371308 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2635371308_1786896556.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15312 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2607_2635371308_naver_compatible_v16_20260817_130111.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2607_2635371308_after_paste_20260817_130123.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2607_2635371308_after_paste_20260817_130123.txt [EDITOR DEBUG LEN] html= 211522 text= 2853 [EDITOR VALIDATE] html_len=211522 text_len=2853 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224381059712 [RESULT URL CHECK] https://blog.naver.com/boram8857/224381059712 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2870 blog_id=boram8857 blog_post_no=224381059712 url=https://blog.naver.com/boram8857/224381059712 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224381059712 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224381059712 [PUBLISH ELAPSED] queue_id=2607 elapsed=66.8s avg=50.1s [SMART SLEEP CALC] remaining_seconds=35897 remaining_count=1 target_cycle=35897.0 avg_publish=50.1 base_sleep=35846.9 range=17923~17923 selected=17923 [SLEEP] 17923s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=98 [PIPELINE RUN FINISH] run_id=1404, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-17 07:00:04] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-17 18:00:25] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 18800 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:18800:20260818070012 [PIPELINE RUN START] run_id=1411, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=2708 realtor_id=4 article_no=2644126220 sort_at=2026-08-17 23:20:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2708, realtor_id=4, draft_id=2971, article_no=2644126220 [DRAFT HTML CHECK] clipboard_len=16907, draft_len=16907, plain_len=548 ================================================================================ [INTEGRITY OK] queue_id=2708, draft_id=2971, article_no=2644126220 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_03_2644126220_1786983517.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16529 plain_len= 548 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2708_2644126220_naver_compatible_v16_20260818_070049.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2708_2644126220_after_paste_20260818_070101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2708_2644126220_after_paste_20260818_070101.txt [EDITOR DEBUG LEN] html= 219663 text= 3036 [EDITOR VALIDATE] html_len=219663 text_len=3036 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224381759908 [RESULT URL CHECK] https://blog.naver.com/pjy287/224381759908 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2971 blog_id=pjy287 blog_post_no=224381759908 url=https://blog.naver.com/pjy287/224381759908 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224381759908Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224381759908 [PUBLISH ELAPSED] queue_id=2708 elapsed=67.3s avg=67.3s [SMART SLEEP CALC] remaining_seconds=57519 remaining_count=2 target_cycle=28759.5 avg_publish=67.3 base_sleep=28692.2 range=14346~14346 selected=14346 [SLEEP] 14346s before next queue [PUBLISH TARGET SELECTED] queue_id=2683 realtor_id=105 article_no=2643840581 sort_at=2026-08-15 00:40:47 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2683, realtor_id=105, draft_id=2946, article_no=2643840581 [DRAFT HTML CHECK] clipboard_len=19963, draft_len=19963, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=2683, draft_id=2946, article_no=2643840581 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2643840581_1786897590.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=2683 elapsed=17.2s avg=42.2s [SMART SLEEP CALC] remaining_seconds=43156 remaining_count=2 target_cycle=21578.0 avg_publish=42.2 base_sleep=21535.8 range=10767~10767 selected=10767 [SLEEP] 10767s before next queue [PUBLISH TARGET SELECTED] queue_id=2709 realtor_id=5 article_no=2635372043 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2709, realtor_id=5, draft_id=2972, article_no=2635372043 [DRAFT HTML CHECK] clipboard_len=16860, draft_len=16860, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=2709, draft_id=2972, article_no=2635372043 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2635372043_1786983533.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16484 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2709_2635372043_naver_compatible_v16_20260818_140047.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2709_2635372043_after_paste_20260818_140058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2709_2635372043_after_paste_20260818_140058.txt [EDITOR DEBUG LEN] html= 219957 text= 3342 [EDITOR VALIDATE] html_len=219957 text_len=3342 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224382150581 [RESULT URL CHECK] https://blog.naver.com/boram8857/224382150581 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=2972 blog_id=boram8857 blog_post_no=224382150581 url=https://blog.naver.com/boram8857/224382150581 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224382150581 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224382150581 [PUBLISH ELAPSED] queue_id=2709 elapsed=66.9s avg=50.4s [SMART SLEEP CALC] remaining_seconds=32322 remaining_count=1 target_cycle=32322.0 avg_publish=50.4 base_sleep=32271.6 range=16135~16135 selected=16135 [SLEEP] 16135s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=81 [PIPELINE RUN FINISH] run_id=1411, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-18 07:00:12] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-18 18:30:12] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 11352 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:11352:20260819070018 [PIPELINE RUN START] run_id=1498, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=2899 realtor_id=105 article_no=2644422720 sort_at=2026-08-19 00:31:30 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2899, realtor_id=105, draft_id=3203, article_no=2644422720 [DRAFT HTML CHECK] clipboard_len=22778, draft_len=22778, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=2899, draft_id=3203, article_no=2644422720 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_08_2644422720_1787070467.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=2899 elapsed=17.4s avg=17.4s [SMART SLEEP CALC] remaining_seconds=57563 remaining_count=3 target_cycle=19187.7 avg_publish=17.4 base_sleep=19170.3 range=9585~9585 selected=9585 [SLEEP] 9585s before next queue [PUBLISH TARGET SELECTED] queue_id=2820 realtor_id=4 article_no=2644414549 sort_at=2026-08-18 23:19:49 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2820, realtor_id=4, draft_id=3124, article_no=2644414549 [DRAFT HTML CHECK] clipboard_len=15787, draft_len=15787, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=2820, draft_id=3124, article_no=2644414549 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_04_2644414549_1787069717.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15409 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2820_2644414549_naver_compatible_v16_20260819_094057.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2820_2644414549_after_paste_20260819_094109.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2820_2644414549_after_paste_20260819_094109.txt [EDITOR DEBUG LEN] html= 205139 text= 2877 [EDITOR VALIDATE] html_len=205139 text_len=2877 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224383002742 [RESULT URL CHECK] https://blog.naver.com/pjy287/224383002742 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3124 blog_id=pjy287 blog_post_no=224383002742 url=https://blog.naver.com/pjy287/224383002742 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224383002742 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224383002742 [PUBLISH ELAPSED] queue_id=2820 elapsed=66.6s avg=42.0s [SMART SLEEP CALC] remaining_seconds=47911 remaining_count=2 target_cycle=23955.5 avg_publish=42.0 base_sleep=23913.5 range=11956~11956 selected=11956 [SLEEP] 11956s before next queue [PUBLISH TARGET SELECTED] queue_id=2821 realtor_id=5 article_no=2635372989 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2821, realtor_id=5, draft_id=3125, article_no=2635372989 [DRAFT HTML CHECK] clipboard_len=17114, draft_len=17114, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=2821, draft_id=3125, article_no=2635372989 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_01_2635372989_1787069720.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16736 plain_len= 563 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=6 two_col_tables=6 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] PASS [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2821_2635372989_naver_compatible_v16_20260819_130120.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2821_2635372989_after_paste_20260819_130132.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2821_2635372989_after_paste_20260819_130132.txt [EDITOR DEBUG LEN] html= 217441 text= 3704 [EDITOR VALIDATE] html_len=217441 text_len=3704 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224383216894 [RESULT URL CHECK] https://blog.naver.com/boram8857/224383216894 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3125 blog_id=boram8857 blog_post_no=224383216894 url=https://blog.naver.com/boram8857/224383216894 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224383216894 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224383216894 [PUBLISH ELAPSED] queue_id=2821 elapsed=67.0s avg=50.3s [SMART SLEEP CALC] remaining_seconds=35888 remaining_count=1 target_cycle=35888.0 avg_publish=50.3 base_sleep=35837.7 range=17918~17918 selected=17918 [SLEEP] 17918s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=84 [PIPELINE RUN FINISH] run_id=1498, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-19 07:00:18] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-19 18:00:29] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 9480 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:9480:20260820070005 [PIPELINE RUN START] run_id=1555, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=3022 realtor_id=105 article_no=2644633094 sort_at=2026-08-20 01:29:20 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3022, realtor_id=105, draft_id=3363, article_no=2644633094 [DRAFT HTML CHECK] clipboard_len=20073, draft_len=20073, plain_len=587 ================================================================================ [INTEGRITY OK] queue_id=3022, draft_id=3363, article_no=2644633094 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2644633094_1787162017.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=3022 elapsed=17.6s avg=17.6s [SMART SLEEP CALC] remaining_seconds=57576 remaining_count=3 target_cycle=19192.0 avg_publish=17.6 base_sleep=19174.4 range=9587~9587 selected=9587 [SLEEP] 9587s before next queue [PUBLISH TARGET SELECTED] queue_id=2941 realtor_id=4 article_no=2644631497 sort_at=2026-08-19 23:22:58 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2941, realtor_id=4, draft_id=3282, article_no=2644631497 [DRAFT HTML CHECK] clipboard_len=20132, draft_len=20132, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=2941, draft_id=3282, article_no=2644631497 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_RED_POSTER_PHOTO_LAYOUT_07_2644631497_1787161178.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19755 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=18 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2941_2644631497_naver_compatible_v16_20260820_094042.html [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2941_2644631497_after_paste_20260820_094054.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2941_2644631497_after_paste_20260820_094054.txt [EDITOR DEBUG LEN] html= 230380 text= 2851 [EDITOR VALIDATE] html_len=230380 text_len=2851 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224384143905 [RESULT URL CHECK] https://blog.naver.com/pjy287/224384143905 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3282 blog_id=pjy287 blog_post_no=224384143905 url=https://blog.naver.com/pjy287/224384143905 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224384143905 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224384143905 [PUBLISH ELAPSED] queue_id=2941 elapsed=62.4s avg=40.0s [SMART SLEEP CALC] remaining_seconds=47926 remaining_count=2 target_cycle=23963.0 avg_publish=40.0 base_sleep=23923.0 range=11961~11961 selected=11961 [SLEEP] 11961s before next queue [PUBLISH TARGET SELECTED] queue_id=2942 realtor_id=5 article_no=2635378067 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=2942, realtor_id=5, draft_id=3283, article_no=2635378067 [DRAFT HTML CHECK] clipboard_len=15178, draft_len=15178, plain_len=567 ================================================================================ [INTEGRITY OK] queue_id=2942, draft_id=3283, article_no=2635378067 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2635378067_1787161180.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14800 plain_len= 567 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_2942_2635378067_naver_compatible_v16_20260820_130110.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2942_2635378067_after_paste_20260820_130122.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_2942_2635378067_after_paste_20260820_130122.txt [EDITOR DEBUG LEN] html= 205127 text= 2813 [EDITOR VALIDATE] html_len=205127 text_len=2813 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224384357028 [RESULT URL CHECK] https://blog.naver.com/boram8857/224384357028 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3283 blog_id=boram8857 blog_post_no=224384357028 url=https://blog.naver.com/boram8857/224384357028 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224384357028 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224384357028 [PUBLISH ELAPSED] queue_id=2942 elapsed=67.0s avg=49.0s [SMART SLEEP CALC] remaining_seconds=35898 remaining_count=1 target_cycle=35898.0 avg_publish=49.0 base_sleep=35849.0 range=17924~17924 selected=17924 [SLEEP] 17924s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=119 [PIPELINE RUN FINISH] run_id=1555, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 1268 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:1268:20260821070010 [PIPELINE RUN START] run_id=1562, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=3174 realtor_id=144 article_no=2644816451 sort_at=2026-08-21 02:10:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3174, realtor_id=144, draft_id=3509, article_no=2644816451 [DRAFT HTML CHECK] clipboard_len=17118, draft_len=17118, plain_len=567 ================================================================================ [INTEGRITY OK] queue_id=3174, draft_id=3509, article_no=2644816451 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/w5345989?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/w5345989?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/w5345989?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=w5345989&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_07_2644816451_1787248632.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16743 plain_len= 567 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=6 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3174_2644816451_naver_compatible_v16_20260821_070046.html [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3174_2644816451_after_paste_20260821_070058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3174_2644816451_after_paste_20260821_070058.txt [EDITOR DEBUG LEN] html= 218751 text= 3278 [EDITOR VALIDATE] html_len=218751 text_len=3278 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/w5345989/224385199193 [RESULT URL CHECK] https://blog.naver.com/w5345989/224385199193 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} Traceback (most recent call last): File "D:\honghee\blog_api\workers\publish_worker.py", line 5343, in publish_one raise RuntimeError( "대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단" ) RuntimeError: 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [DRAFT PUBLISH RESULT SAVED] draft_id=3509 blog_id=w5345989 blog_post_no=224385199193 url=https://blog.naver.com/w5345989/224385199193 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/w5345989/224385199193 [BLOG RESULT PARSED] blog_id=w5345989 blog_post_no=224385199193 [PUBLISH ELAPSED] queue_id=3174 elapsed=67.0s avg=67.0s [SMART SLEEP CALC] remaining_seconds=57522 remaining_count=3 target_cycle=19174.0 avg_publish=67.0 base_sleep=19107.0 range=9553~9553 selected=9553 [SLEEP] 9553s before next queue [PUBLISH TARGET SELECTED] queue_id=3142 realtor_id=105 article_no=2644897150 sort_at=2026-08-21 01:24:28 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3142, realtor_id=105, draft_id=3477, article_no=2644897150 [DRAFT HTML CHECK] clipboard_len=22148, draft_len=22148, plain_len=538 ================================================================================ [INTEGRITY OK] queue_id=3142, draft_id=3477, article_no=2644897150 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=105 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_105.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/budongsanmatjip?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/budongsanmatjip?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=budongsanmatjip&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_06_2644897150_1787248281.png [REP UPLOAD BLOCKED] confirm popup remains root=frame, selector=[data-group="popupLayer"][data-name*="se-popup-alert-confirm"], index=0 [REP UPLOAD RESULT] False [FAILED] 대표이미지 직접 업로드 실패 - 안전을 위해 발행 중단 [PUBLISH ELAPSED] queue_id=3142 elapsed=17.5s avg=42.2s [SMART SLEEP CALC] remaining_seconds=47951 remaining_count=3 target_cycle=15983.7 avg_publish=42.2 base_sleep=15941.4 range=7970~7970 selected=7970 [SLEEP] 7970s before next queue [PUBLISH TARGET SELECTED] queue_id=3060 realtor_id=4 article_no=2644882626 sort_at=2026-08-20 23:21:37 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3060, realtor_id=4, draft_id=3395, article_no=2644882626 [DRAFT HTML CHECK] clipboard_len=18640, draft_len=18640, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=3060, draft_id=3395, article_no=2644882626 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_RED_POSTER_PHOTO_LAYOUT_05_2644882626_1787247431.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18263 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=14 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3060_2644882626_naver_compatible_v16_20260821_115414.html [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3060_2644882626_after_paste_20260821_115425.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3060_2644882626_after_paste_20260821_115425.txt [EDITOR DEBUG LEN] html= 221828 text= 2813 [EDITOR VALIDATE] html_len=221828 text_len=2813 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1421, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1421, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1421, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1421, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224385452899 [RESULT URL CHECK] https://blog.naver.com/pjy287/224385452899 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3395 blog_id=pjy287 blog_post_no=224385452899 url=https://blog.naver.com/pjy287/224385452899 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224385452899 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224385452899 [PUBLISH ELAPSED] queue_id=3060 elapsed=66.4s avg=50.3s [SMART SLEEP CALC] remaining_seconds=39915 remaining_count=2 target_cycle=19957.5 avg_publish=50.3 base_sleep=19907.2 range=9953~9953 selected=9953 [SLEEP] 9953s before next queue [PUBLISH TARGET SELECTED] queue_id=3061 realtor_id=5 article_no=2635378596 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3061, realtor_id=5, draft_id=3396, article_no=2635378596 [DRAFT HTML CHECK] clipboard_len=15176, draft_len=15176, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=3061, draft_id=3396, article_no=2635378596 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_03_2635378596_1787247433.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14799 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3061_2635378596_naver_compatible_v16_20260821_144114.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3061_2635378596_after_paste_20260821_144126.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3061_2635378596_after_paste_20260821_144126.txt [EDITOR DEBUG LEN] html= 205123 text= 2812 [EDITOR VALIDATE] html_len=205123 text_len=2812 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224385635315 [RESULT URL CHECK] https://blog.naver.com/boram8857/224385635315 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3396 blog_id=boram8857 blog_post_no=224385635315 url=https://blog.naver.com/boram8857/224385635315 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224385635315 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224385635315 [PUBLISH ELAPSED] queue_id=3061 elapsed=67.5s avg=54.6s [SMART SLEEP CALC] remaining_seconds=29894 remaining_count=1 target_cycle=29894.0 avg_publish=54.6 base_sleep=29839.4 range=14919~14919 selected=14919 [SLEEP] 14919s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[144, 105, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=123 [PIPELINE RUN FINISH] run_id=1562, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 3 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14220 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14220:20260822070009 [PIPELINE RUN START] run_id=1569, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=3297 realtor_id=148 article_no=2645004762 sort_at=2026-08-22 02:16:48 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3297, realtor_id=148, draft_id=3626, article_no=2645004762 [DRAFT HTML CHECK] clipboard_len=20503, draft_len=20503, plain_len=545 ================================================================================ [INTEGRITY OK] queue_id=3297, draft_id=3626, article_no=2645004762 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2645004762_1787335378.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20126 plain_len= 545 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=15 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3297_2645004762_naver_compatible_v16_20260822_070045.html [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3297_2645004762_after_paste_20260822_070057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3297_2645004762_after_paste_20260822_070057.txt [EDITOR DEBUG LEN] html= 238427 text= 3314 [EDITOR VALIDATE] html_len=238427 text_len=3314 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 646, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224386305385 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224386305385 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3626 blog_id=khshim0915 blog_post_no=224386305385 url=https://blog.naver.com/khshim0915/224386305385 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224386305385 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224386305385 [PUBLISH ELAPSED] queue_id=3297 elapsed=67.1s avg=67.1s [SMART SLEEP CALC] remaining_seconds=57523 remaining_count=2 target_cycle=28761.5 avg_publish=67.1 base_sleep=28694.4 range=14347~14347 selected=14347 [SLEEP] 14347s before next queue [PUBLISH TARGET SELECTED] queue_id=3182 realtor_id=4 article_no=2645122218 sort_at=2026-08-21 23:27:55 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3182, realtor_id=4, draft_id=3511, article_no=2645122218 [DRAFT HTML CHECK] clipboard_len=18632, draft_len=18632, plain_len=527 ================================================================================ [INTEGRITY OK] queue_id=3182, draft_id=3511, article_no=2645122218 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_02_2645122218_1787334293.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18256 plain_len= 527 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=12 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3182_2645122218_naver_compatible_v16_20260822_110059.html [PREVIEW IMAGE COUNT] 12 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3182_2645122218_after_paste_20260822_110110.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3182_2645122218_after_paste_20260822_110110.txt [EDITOR DEBUG LEN] html= 228501 text= 2924 [EDITOR VALIDATE] html_len=228501 text_len=2924 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224386432690 [RESULT URL CHECK] https://blog.naver.com/pjy287/224386432690 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3511 blog_id=pjy287 blog_post_no=224386432690 url=https://blog.naver.com/pjy287/224386432690 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224386432690 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224386432690 [PUBLISH ELAPSED] queue_id=3182 elapsed=66.0s avg=66.6s [SMART SLEEP CALC] remaining_seconds=43110 remaining_count=1 target_cycle=43110.0 avg_publish=66.6 base_sleep=43043.4 range=21521~21521 selected=21521 [SLEEP] 21521s before next queue [PUBLISH TARGET SELECTED] queue_id=3183 realtor_id=5 article_no=2635381479 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3183, realtor_id=5, draft_id=3512, article_no=2635381479 [DRAFT HTML CHECK] clipboard_len=15175, draft_len=15175, plain_len=558 ================================================================================ [INTEGRITY OK] queue_id=3183, draft_id=3512, article_no=2635381479 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_05_2635381479_1787334295.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14797 plain_len= 558 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3183_2635381479_naver_compatible_v16_20260822_170047.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3183_2635381479_after_paste_20260822_170058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3183_2635381479_after_paste_20260822_170058.txt [EDITOR DEBUG LEN] html= 205187 text= 2806 [EDITOR VALIDATE] html_len=205187 text_len=2806 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224386690039 [RESULT URL CHECK] https://blog.naver.com/boram8857/224386690039 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3512 blog_id=boram8857 blog_post_no=224386690039 url=https://blog.naver.com/boram8857/224386690039 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224386690039 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224386690039 [PUBLISH ELAPSED] queue_id=3183 elapsed=66.8s avg=66.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=141 [PIPELINE RUN FINISH] run_id=1569, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-22 07:00:08] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-22 17:01:17] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 12260 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:12260:20260823070015 [PIPELINE RUN START] run_id=1576, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=3415 realtor_id=148 article_no=2645281414 sort_at=2026-08-23 02:16:24 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3415, realtor_id=148, draft_id=3744, article_no=2645281414 [DRAFT HTML CHECK] clipboard_len=20524, draft_len=20524, plain_len=552 ================================================================================ [INTEGRITY OK] queue_id=3415, draft_id=3744, article_no=2645281414 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2645281414_1787421724.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20146 plain_len= 552 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=15 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3415_2645281414_naver_compatible_v16_20260823_070051.html [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3415_2645281414_after_paste_20260823_070103.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3415_2645281414_after_paste_20260823_070103.txt [EDITOR DEBUG LEN] html= 238443 text= 3326 [EDITOR VALIDATE] html_len=238443 text_len=3326 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224387152531 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224387152531 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3744 blog_id=khshim0915 blog_post_no=224387152531 url=https://blog.naver.com/khshim0915/224387152531 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224387152531 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224387152531 [PUBLISH ELAPSED] queue_id=3415 elapsed=66.2s avg=66.2s [SMART SLEEP CALC] remaining_seconds=57517 remaining_count=2 target_cycle=28758.5 avg_publish=66.2 base_sleep=28692.3 range=14346~14346 selected=14346 [SLEEP] 14346s before next queue [PUBLISH TARGET SELECTED] queue_id=3301 realtor_id=4 article_no=2645276639 sort_at=2026-08-22 23:23:29 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3301, realtor_id=4, draft_id=3630, article_no=2645276639 [DRAFT HTML CHECK] clipboard_len=14082, draft_len=14082, plain_len=568 ================================================================================ [INTEGRITY OK] queue_id=3301, draft_id=3630, article_no=2645276639 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_08_2645276639_1787420630.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13705 plain_len= 568 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3301_2645276639_naver_compatible_v16_20260823_110104.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3301_2645276639_after_paste_20260823_110115.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3301_2645276639_after_paste_20260823_110115.txt [EDITOR DEBUG LEN] html= 185995 text= 2775 [EDITOR VALIDATE] html_len=185995 text_len=2775 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224387281900 [RESULT URL CHECK] https://blog.naver.com/pjy287/224387281900 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3630 blog_id=pjy287 blog_post_no=224387281900 url=https://blog.naver.com/pjy287/224387281900 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224387281900 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224387281900 [PUBLISH ELAPSED] queue_id=3301 elapsed=66.3s avg=66.3s [SMART SLEEP CALC] remaining_seconds=43105 remaining_count=1 target_cycle=43105.0 avg_publish=66.3 base_sleep=43038.7 range=21519~21519 selected=21519 [SLEEP] 21519s before next queue [PUBLISH TARGET SELECTED] queue_id=3302 realtor_id=5 article_no=2635382017 sort_at=2026-07-01 23:13:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3302, realtor_id=5, draft_id=3631, article_no=2635382017 [DRAFT HTML CHECK] clipboard_len=17472, draft_len=17472, plain_len=544 ================================================================================ [INTEGRITY OK] queue_id=3302, draft_id=3631, article_no=2635382017 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_05_2635382017_1787420632.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17094 plain_len= 544 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=10 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3302_2635382017_naver_compatible_v16_20260823_170050.html [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3302_2635382017_after_paste_20260823_170101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3302_2635382017_after_paste_20260823_170101.txt [EDITOR DEBUG LEN] html= 221858 text= 2814 [EDITOR VALIDATE] html_len=221858 text_len=2814 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1422, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1422, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1422, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1423, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1423, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1422, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224387550145 [RESULT URL CHECK] https://blog.naver.com/boram8857/224387550145 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3631 blog_id=boram8857 blog_post_no=224387550145 url=https://blog.naver.com/boram8857/224387550145 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224387550145 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224387550145 [PUBLISH ELAPSED] queue_id=3302 elapsed=67.0s avg=66.5s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=182 [PIPELINE RUN FINISH] run_id=1576, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-23 07:00:15] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-23 17:01:21] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 17520 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:17520:20260824070003 [PIPELINE RUN START] run_id=1583, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=3533 realtor_id=148 article_no=2645280885 sort_at=2026-08-23 02:16:24 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3533, realtor_id=148, draft_id=3862, article_no=2645280885 [DRAFT HTML CHECK] clipboard_len=19280, draft_len=19280, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=3533, draft_id=3862, article_no=2645280885 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_01_2645280885_1787507985.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18905 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=13 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3533_2645280885_naver_compatible_v16_20260824_070040.html [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3533_2645280885_after_paste_20260824_070051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3533_2645280885_after_paste_20260824_070051.txt [EDITOR DEBUG LEN] html= 224874 text= 3252 [EDITOR VALIDATE] html_len=224874 text_len=3252 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224388061086 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224388061086 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3862 blog_id=khshim0915 blog_post_no=224388061086 url=https://blog.naver.com/khshim0915/224388061086 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224388061086 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224388061086 [PUBLISH ELAPSED] queue_id=3533 elapsed=66.8s avg=66.8s [SMART SLEEP CALC] remaining_seconds=57528 remaining_count=2 target_cycle=28764.0 avg_publish=66.8 base_sleep=28697.2 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=3419 realtor_id=4 article_no=2645224998 sort_at=2026-08-22 23:23:29 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3419, realtor_id=4, draft_id=3748, article_no=2645224998 [DRAFT HTML CHECK] clipboard_len=21150, draft_len=21150, plain_len=560 ================================================================================ [INTEGRITY OK] queue_id=3419, draft_id=3748, article_no=2645224998 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_06_2645224998_1787506787.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20772 plain_len= 560 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=21 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3419_2645224998_naver_compatible_v16_20260824_110055.html [PREVIEW IMAGE COUNT] 21 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3419_2645224998_after_paste_20260824_110107.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3419_2645224998_after_paste_20260824_110107.txt [EDITOR DEBUG LEN] html= 234899 text= 2834 [EDITOR VALIDATE] html_len=234899 text_len=2834 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224388259062 [RESULT URL CHECK] https://blog.naver.com/pjy287/224388259062 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3748 blog_id=pjy287 blog_post_no=224388259062 url=https://blog.naver.com/pjy287/224388259062 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224388259062 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224388259062 [PUBLISH ELAPSED] queue_id=3419 elapsed=66.9s avg=66.8s [SMART SLEEP CALC] remaining_seconds=43113 remaining_count=1 target_cycle=43113.0 avg_publish=66.8 base_sleep=43046.2 range=21523~21523 selected=21523 [SLEEP] 21523s before next queue [PUBLISH TARGET SELECTED] queue_id=3420 realtor_id=5 article_no=2634723611 sort_at=2026-06-29 23:11:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3420, realtor_id=5, draft_id=3749, article_no=2634723611 [DRAFT HTML CHECK] clipboard_len=15183, draft_len=15183, plain_len=539 ================================================================================ [INTEGRITY OK] queue_id=3420, draft_id=3749, article_no=2634723611 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_07_2634723611_1787506789.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14800 plain_len= 539 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3420_2634723611_naver_compatible_v16_20260824_170046.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3420_2634723611_after_paste_20260824_170057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3420_2634723611_after_paste_20260824_170057.txt [EDITOR DEBUG LEN] html= 205143 text= 2810 [EDITOR VALIDATE] html_len=205143 text_len=2810 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224388676154 [RESULT URL CHECK] https://blog.naver.com/boram8857/224388676154 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3749 blog_id=boram8857 blog_post_no=224388676154 url=https://blog.naver.com/boram8857/224388676154 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224388676154 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224388676154 [PUBLISH ELAPSED] queue_id=3420 elapsed=67.3s avg=67.0s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=160 [PIPELINE RUN FINISH] run_id=1583, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-24 07:00:03] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-24 17:01:16] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 18648 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:18648:20260825070010 [PIPELINE RUN START] run_id=1590, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=3656 realtor_id=148 article_no=2645571473 sort_at=2026-08-25 02:20:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3656, realtor_id=148, draft_id=3981, article_no=2645571473 [DRAFT HTML CHECK] clipboard_len=14704, draft_len=14704, plain_len=541 ================================================================================ [INTEGRITY OK] queue_id=3656, draft_id=3981, article_no=2645571473 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_PRICE_BAND_PHOTO_LAYOUT_03_2645571473_1787594807.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14327 plain_len= 541 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=4 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] FAIL [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 4_broker_title, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3656_2645571473_naver_compatible_v16_20260825_070045.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3656_2645571473_after_paste_20260825_070056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3656_2645571473_after_paste_20260825_070056.txt [EDITOR DEBUG LEN] html= 195678 text= 2767 [EDITOR VALIDATE] html_len=195678 text_len=2767 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": null, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224389240973 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224389240973 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3981 blog_id=khshim0915 blog_post_no=224389240973 url=https://blog.naver.com/khshim0915/224389240973 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224389240973 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224389240973 [PUBLISH ELAPSED] queue_id=3656 elapsed=65.0s avg=65.0s [SMART SLEEP CALC] remaining_seconds=57524 remaining_count=2 target_cycle=28762.0 avg_publish=65.0 base_sleep=28697.0 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=3542 realtor_id=4 article_no=2645591034 sort_at=2026-08-24 23:30:17 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3542, realtor_id=4, draft_id=3867, article_no=2645591034 [DRAFT HTML CHECK] clipboard_len=16316, draft_len=16316, plain_len=581 ================================================================================ [INTEGRITY OK] queue_id=3542, draft_id=3867, article_no=2645591034 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_03_2645591034_1787593691.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15938 plain_len= 581 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=1 broker_blocks=4 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] FAIL [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 4_broker_title, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3542_2645591034_naver_compatible_v16_20260825_110100.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3542_2645591034_after_paste_20260825_110111.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3542_2645591034_after_paste_20260825_110111.txt [EDITOR DEBUG LEN] html= 211070 text= 3083 [EDITOR VALIDATE] html_len=211070 text_len=3083 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": null, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224389446669 [RESULT URL CHECK] https://blog.naver.com/pjy287/224389446669 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3867 blog_id=pjy287 blog_post_no=224389446669 url=https://blog.naver.com/pjy287/224389446669 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224389446669 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224389446669 [PUBLISH ELAPSED] queue_id=3542 elapsed=66.8s avg=65.9s [SMART SLEEP CALC] remaining_seconds=43109 remaining_count=1 target_cycle=43109.0 avg_publish=65.9 base_sleep=43043.1 range=21521~21521 selected=21521 [SLEEP] 21521s before next queue [PUBLISH TARGET SELECTED] queue_id=3543 realtor_id=5 article_no=2628805398 sort_at=2026-06-27 23:13:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3543, realtor_id=5, draft_id=3868, article_no=2628805398 [DRAFT HTML CHECK] clipboard_len=16457, draft_len=16457, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=3543, draft_id=3868, article_no=2628805398 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2628805398_1787593694.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16079 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3543_2628805398_naver_compatible_v16_20260825_170048.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3543_2628805398_after_paste_20260825_170100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3543_2628805398_after_paste_20260825_170100.txt [EDITOR DEBUG LEN] html= 210602 text= 3546 [EDITOR VALIDATE] html_len=210602 text_len=3546 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224389858781 [RESULT URL CHECK] https://blog.naver.com/boram8857/224389858781 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3868 blog_id=boram8857 blog_post_no=224389858781 url=https://blog.naver.com/boram8857/224389858781 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224389858781 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224389858781 [PUBLISH ELAPSED] queue_id=3543 elapsed=67.2s avg=66.4s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=163 [PIPELINE RUN FINISH] run_id=1590, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-25 07:00:10] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-25 17:01:19] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 11160 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:11160:20260826070018 [PIPELINE RUN START] run_id=1599, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=3772 realtor_id=148 article_no=2645784243 sort_at=2026-08-26 02:13:21 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3772, realtor_id=148, draft_id=4096, article_no=2645784243 [DRAFT HTML CHECK] clipboard_len=18298, draft_len=18298, plain_len=547 ================================================================================ [INTEGRITY OK] queue_id=3772, draft_id=4096, article_no=2645784243 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2645784243_1787680997.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17920 plain_len= 547 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=9 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3772_2645784243_naver_compatible_v16_20260826_070055.html [PREVIEW IMAGE COUNT] 9 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3772_2645784243_after_paste_20260826_070106.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3772_2645784243_after_paste_20260826_070106.txt [EDITOR DEBUG LEN] html= 225427 text= 3297 [EDITOR VALIDATE] html_len=225427 text_len=3297 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224390413268 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224390413268 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4096 blog_id=khshim0915 blog_post_no=224390413268 url=https://blog.naver.com/khshim0915/224390413268 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224390413268 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224390413268 [PUBLISH ELAPSED] queue_id=3772 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=57514 remaining_count=2 target_cycle=28757.0 avg_publish=66.9 base_sleep=28690.1 range=14345~14345 selected=14345 [SLEEP] 14345s before next queue [PUBLISH TARGET SELECTED] queue_id=3662 realtor_id=4 article_no=2645809347 sort_at=2026-08-25 23:25:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3662, realtor_id=4, draft_id=3986, article_no=2645809347 [DRAFT HTML CHECK] clipboard_len=20793, draft_len=20793, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=3662, draft_id=3986, article_no=2645809347 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2645809347_1787679813.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20415 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=18 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3662_2645809347_naver_compatible_v16_20260826_110107.html [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3662_2645809347_after_paste_20260826_110118.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3662_2645809347_after_paste_20260826_110118.txt [EDITOR DEBUG LEN] html= 234862 text= 2980 [EDITOR VALIDATE] html_len=234862 text_len=2980 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224390622555 [RESULT URL CHECK] https://blog.naver.com/pjy287/224390622555 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3986 blog_id=pjy287 blog_post_no=224390622555 url=https://blog.naver.com/pjy287/224390622555 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224390622555 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224390622555 [PUBLISH ELAPSED] queue_id=3662 elapsed=67.1s avg=67.0s [SMART SLEEP CALC] remaining_seconds=43101 remaining_count=1 target_cycle=43101.0 avg_publish=67.0 base_sleep=43034.0 range=21516~21516 selected=21516 [SLEEP] 21516s before next queue [PUBLISH TARGET SELECTED] queue_id=3663 realtor_id=5 article_no=2628807536 sort_at=2026-06-27 23:13:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3663, realtor_id=5, draft_id=3987, article_no=2628807536 [DRAFT HTML CHECK] clipboard_len=18060, draft_len=18060, plain_len=534 ================================================================================ [INTEGRITY OK] queue_id=3663, draft_id=3987, article_no=2628807536 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_05_2628807536_1787679814.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17682 plain_len= 534 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=12 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=8 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3663_2628807536_naver_compatible_v16_20260826_170050.html [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3663_2628807536_after_paste_20260826_170101.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3663_2628807536_after_paste_20260826_170101.txt [EDITOR DEBUG LEN] html= 226966 text= 3151 [EDITOR VALIDATE] html_len=226966 text_len=3151 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224391037279 [RESULT URL CHECK] https://blog.naver.com/boram8857/224391037279 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=3987 blog_id=boram8857 blog_post_no=224391037279 url=https://blog.naver.com/boram8857/224391037279 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224391037279 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224391037279 [PUBLISH ELAPSED] queue_id=3663 elapsed=66.4s avg=66.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=164 [PIPELINE RUN FINISH] run_id=1599, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 18496 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:18496:20260827070008 [PIPELINE RUN START] run_id=1656, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=3892 realtor_id=148 article_no=2645972743 sort_at=2026-08-27 02:17:46 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3892, realtor_id=148, draft_id=4263, article_no=2645972743 [DRAFT HTML CHECK] clipboard_len=20867, draft_len=20867, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=3892, draft_id=4263, article_no=2645972743 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2645972743_1787768064.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 20484 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=11 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3892_2645972743_naver_compatible_v16_20260827_070045.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3892_2645972743_after_paste_20260827_070056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3892_2645972743_after_paste_20260827_070056.txt [EDITOR DEBUG LEN] html= 240323 text= 3318 [EDITOR VALIDATE] html_len=240323 text_len=3318 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224391585230 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224391585230 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4263 blog_id=khshim0915 blog_post_no=224391585230 url=https://blog.naver.com/khshim0915/224391585230 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224391585230 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224391585230 [PUBLISH ELAPSED] queue_id=3892 elapsed=66.7s avg=66.7s [SMART SLEEP CALC] remaining_seconds=57523 remaining_count=2 target_cycle=28761.5 avg_publish=66.7 base_sleep=28694.8 range=14347~14347 selected=14347 [SLEEP] 14347s before next queue [PUBLISH TARGET SELECTED] queue_id=3781 realtor_id=4 article_no=2645882990 sort_at=2026-08-26 23:30:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3781, realtor_id=4, draft_id=4152, article_no=2645882990 [DRAFT HTML CHECK] clipboard_len=15991, draft_len=15991, plain_len=550 ================================================================================ [INTEGRITY OK] queue_id=3781, draft_id=4152, article_no=2645882990 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2645882990_1787767040.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15615 plain_len= 550 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3781_2645882990_naver_compatible_v16_20260827_110059.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3781_2645882990_after_paste_20260827_110110.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3781_2645882990_after_paste_20260827_110110.txt [EDITOR DEBUG LEN] html= 209770 text= 2941 [EDITOR VALIDATE] html_len=209770 text_len=2941 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224391785707 [RESULT URL CHECK] https://blog.naver.com/pjy287/224391785707 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4152 blog_id=pjy287 blog_post_no=224391785707 url=https://blog.naver.com/pjy287/224391785707 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224391785707 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224391785707 [PUBLISH ELAPSED] queue_id=3781 elapsed=66.8s avg=66.8s [SMART SLEEP CALC] remaining_seconds=43109 remaining_count=1 target_cycle=43109.0 avg_publish=66.8 base_sleep=43042.2 range=21521~21521 selected=21521 [SLEEP] 21521s before next queue [PUBLISH TARGET SELECTED] queue_id=3782 realtor_id=5 article_no=2628813238 sort_at=2026-06-27 23:13:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3782, realtor_id=5, draft_id=4153, article_no=2628813238 [DRAFT HTML CHECK] clipboard_len=16379, draft_len=16379, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=3782, draft_id=4153, article_no=2628813238 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2628813238_1787767043.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16001 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=10 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=1 consultation_tables=2 cost_tables=2 broker_blocks=5 legal_blocks=6 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] PASS [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3782_2628813238_naver_compatible_v16_20260827_170047.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3782_2628813238_after_paste_20260827_170059.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3782_2628813238_after_paste_20260827_170059.txt [EDITOR DEBUG LEN] html= 210380 text= 3470 [EDITOR VALIDATE] html_len=210380 text_len=3470 hit_count=4 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": {"tag": "B", "cls": "", "width": 274.5, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224392212177 [RESULT URL CHECK] https://blog.naver.com/boram8857/224392212177 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4153 blog_id=boram8857 blog_post_no=224392212177 url=https://blog.naver.com/boram8857/224392212177 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224392212177 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224392212177 [PUBLISH ELAPSED] queue_id=3782 elapsed=67.1s avg=66.9s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=172 [PIPELINE RUN FINISH] run_id=1656, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-27 07:00:08] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-27 17:01:18] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 5904 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:5904:20260828070016 [PIPELINE RUN START] run_id=1664, run_type=publish_worker [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=181 [PIPELINE RUN FINISH] run_id=1664, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 0 [SUCCESS] 0 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-28 07:00:16] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-28 07:00:16] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14700 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14700:20260829070002 [PIPELINE RUN START] run_id=1803, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4109 realtor_id=148 article_no=2646457388 sort_at=2026-08-29 02:11:49 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4109, realtor_id=148, draft_id=4466, article_no=2646457388 [DRAFT HTML CHECK] clipboard_len=15379, draft_len=15379, plain_len=575 ================================================================================ [INTEGRITY OK] queue_id=4109, draft_id=4466, article_no=2646457388 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2646457388_1787941865.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15003 plain_len= 575 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4109_2646457388_naver_compatible_v16_20260829_070039.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4109_2646457388_after_paste_20260829_070050.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4109_2646457388_after_paste_20260829_070050.txt [EDITOR DEBUG LEN] html= 196400 text= 3132 [EDITOR VALIDATE] html_len=196400 text_len=3132 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224393883704 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224393883704 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4466 blog_id=khshim0915 blog_post_no=224393883704 url=https://blog.naver.com/khshim0915/224393883704 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224393883704 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224393883704 [PUBLISH ELAPSED] queue_id=4109 elapsed=66.7s avg=66.7s [SMART SLEEP CALC] remaining_seconds=57530 remaining_count=2 target_cycle=28765.0 avg_publish=66.7 base_sleep=28698.3 range=14349~14349 selected=14349 [SLEEP] 14349s before next queue [PUBLISH TARGET SELECTED] queue_id=3997 realtor_id=4 article_no=2646438559 sort_at=2026-08-28 23:29:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3997, realtor_id=4, draft_id=4354, article_no=2646438559 [DRAFT HTML CHECK] clipboard_len=16289, draft_len=16289, plain_len=561 ================================================================================ [INTEGRITY OK] queue_id=3997, draft_id=4354, article_no=2646438559 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_06_2646438559_1787940723.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15911 plain_len= 561 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=6 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3997_2646438559_naver_compatible_v16_20260829_110054.html [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3997_2646438559_after_paste_20260829_110106.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3997_2646438559_after_paste_20260829_110106.txt [EDITOR DEBUG LEN] html= 205680 text= 2874 [EDITOR VALIDATE] html_len=205680 text_len=2874 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224394023325 [RESULT URL CHECK] https://blog.naver.com/pjy287/224394023325 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4354 blog_id=pjy287 blog_post_no=224394023325 url=https://blog.naver.com/pjy287/224394023325 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224394023325 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224394023325 [PUBLISH ELAPSED] queue_id=3997 elapsed=66.7s avg=66.7s [SMART SLEEP CALC] remaining_seconds=43114 remaining_count=1 target_cycle=43114.0 avg_publish=66.7 base_sleep=43047.3 range=21523~21523 selected=21523 [SLEEP] 21523s before next queue [PUBLISH TARGET SELECTED] queue_id=3998 realtor_id=5 article_no=2645135824 sort_at=2026-08-22 23:23:56 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3998, realtor_id=5, draft_id=4355, article_no=2645135824 [DRAFT HTML CHECK] clipboard_len=15960, draft_len=15960, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=3998, draft_id=4355, article_no=2645135824 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2645135824_1787940726.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15582 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3998_2645135824_naver_compatible_v16_20260829_170044.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3998_2645135824_after_paste_20260829_170056.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3998_2645135824_after_paste_20260829_170056.txt [EDITOR DEBUG LEN] html= 197405 text= 3479 [EDITOR VALIDATE] html_len=197405 text_len=3479 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224394279756 [RESULT URL CHECK] https://blog.naver.com/boram8857/224394279756 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4355 blog_id=boram8857 blog_post_no=224394279756 url=https://blog.naver.com/boram8857/224394279756 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224394279756 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224394279756 [PUBLISH ELAPSED] queue_id=3998 elapsed=67.0s avg=66.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 148, 4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=171 [PIPELINE RUN FINISH] run_id=1803, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-29 07:00:02] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-29 17:01:15] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 17152 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:17152:20260830070005 [PIPELINE RUN START] run_id=1810, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4240 realtor_id=148 article_no=2646575715 sort_at=2026-08-30 02:13:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4240, realtor_id=148, draft_id=4597, article_no=2646575715 [DRAFT HTML CHECK] clipboard_len=16194, draft_len=16194, plain_len=522 ================================================================================ [INTEGRITY OK] queue_id=4240, draft_id=4597, article_no=2646575715 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_08_2646575715_1788028312.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15819 plain_len= 522 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=6 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4240_2646575715_naver_compatible_v16_20260830_070042.html [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4240_2646575715_after_paste_20260830_070053.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4240_2646575715_after_paste_20260830_070053.txt [EDITOR DEBUG LEN] html= 197089 text= 3138 [EDITOR VALIDATE] html_len=197089 text_len=3138 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224394718131 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224394718131 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4597 blog_id=khshim0915 blog_post_no=224394718131 url=https://blog.naver.com/khshim0915/224394718131 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224394718131 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224394718131 [PUBLISH ELAPSED] queue_id=4240 elapsed=66.8s avg=66.8s [SMART SLEEP CALC] remaining_seconds=57527 remaining_count=2 target_cycle=28763.5 avg_publish=66.8 base_sleep=28696.7 range=14348~14348 selected=14348 [SLEEP] 14348s before next queue [PUBLISH TARGET SELECTED] queue_id=4131 realtor_id=5 article_no=2646489657 sort_at=2026-08-29 23:25:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4131, realtor_id=5, draft_id=4488, article_no=2646489657 [DRAFT HTML CHECK] clipboard_len=15950, draft_len=15950, plain_len=550 ================================================================================ [INTEGRITY OK] queue_id=4131, draft_id=4488, article_no=2646489657 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_DARK_REC_PHOTO_LAYOUT_02_2646489657_1788027183.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15575 plain_len= 550 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4131_2646489657_naver_compatible_v16_20260830_110057.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4131_2646489657_after_paste_20260830_110108.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4131_2646489657_after_paste_20260830_110108.txt [EDITOR DEBUG LEN] html= 197439 text= 3457 [EDITOR VALIDATE] html_len=197439 text_len=3457 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224394834420 [RESULT URL CHECK] https://blog.naver.com/boram8857/224394834420 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4488 blog_id=boram8857 blog_post_no=224394834420 url=https://blog.naver.com/boram8857/224394834420 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224394834420 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224394834420 [PUBLISH ELAPSED] queue_id=4131 elapsed=66.7s avg=66.8s [SMART SLEEP CALC] remaining_seconds=43112 remaining_count=1 target_cycle=43112.0 avg_publish=66.8 base_sleep=43045.2 range=21522~21522 selected=21522 [SLEEP] 21522s before next queue [PUBLISH TARGET SELECTED] queue_id=4130 realtor_id=4 article_no=2646531738 sort_at=2026-08-29 23:25:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4130, realtor_id=4, draft_id=4487, article_no=2646531738 [DRAFT HTML CHECK] clipboard_len=15883, draft_len=15883, plain_len=546 ================================================================================ [INTEGRITY OK] queue_id=4130, draft_id=4487, article_no=2646531738 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2646531738_1788027180.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15500 plain_len= 546 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4130_2646531738_naver_compatible_v16_20260830_170052.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4130_2646531738_after_paste_20260830_170104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4130_2646531738_after_paste_20260830_170104.txt [EDITOR DEBUG LEN] html= 199336 text= 3186 [EDITOR VALIDATE] html_len=199336 text_len=3186 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 365, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224395100456 [RESULT URL CHECK] https://blog.naver.com/pjy287/224395100456 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4487 blog_id=pjy287 blog_post_no=224395100456 url=https://blog.naver.com/pjy287/224395100456 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224395100456 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224395100456 [PUBLISH ELAPSED] queue_id=4130 elapsed=66.9s avg=66.8s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 148, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=171 [PIPELINE RUN FINISH] run_id=1810, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 3 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-30 07:00:05] START 1/1 �꽌踰� 諛쒗뻾 07:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 07:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-30 17:01:23] END �꽌踰� 諛쒗뻾 07:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14080 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14080:20260831070015 [PIPELINE RUN START] run_id=1817, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4262 realtor_id=5 article_no=2646489275 sort_at=2026-08-29 23:25:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4262, realtor_id=5, draft_id=4619, article_no=2646489275 [DRAFT HTML CHECK] clipboard_len=15783, draft_len=15783, plain_len=537 ================================================================================ [INTEGRITY OK] queue_id=4262, draft_id=4619, article_no=2646489275 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_08_2646489275_1788113405.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15400 plain_len= 537 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4262_2646489275_naver_compatible_v16_20260831_070052.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4262_2646489275_after_paste_20260831_070103.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4262_2646489275_after_paste_20260831_070103.txt [EDITOR DEBUG LEN] html= 196942 text= 3325 [EDITOR VALIDATE] html_len=196942 text_len=3325 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224395609745 [RESULT URL CHECK] https://blog.naver.com/boram8857/224395609745 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4619 blog_id=boram8857 blog_post_no=224395609745 url=https://blog.naver.com/boram8857/224395609745 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224395609745 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224395609745 [PUBLISH ELAPSED] queue_id=4262 elapsed=67.0s avg=67.0s [SMART SLEEP CALC] remaining_seconds=57517 remaining_count=2 target_cycle=28758.5 avg_publish=67.0 base_sleep=28691.5 range=14345~14345 selected=14345 [SLEEP] 14345s before next queue [PUBLISH TARGET SELECTED] queue_id=4368 realtor_id=148 article_no=2646455229 sort_at=2026-08-29 02:11:49 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4368, realtor_id=148, draft_id=4725, article_no=2646455229 [DRAFT HTML CHECK] clipboard_len=18794, draft_len=18794, plain_len=529 ================================================================================ [INTEGRITY OK] queue_id=4368, draft_id=4725, article_no=2646455229 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE PLACEHOLDER BOX] {'x': 249.5, 'y': 233, 'width': 58.25, 'height': 33} [TITLE INPUT SUCCESS] [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_05_2646455229_1788114469.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18416 plain_len= 529 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=14 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4368_2646455229_naver_compatible_v16_20260831_110104.html [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4368_2646455229_after_paste_20260831_110115.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4368_2646455229_after_paste_20260831_110115.txt [EDITOR DEBUG LEN] html= 213124 text= 3150 [EDITOR VALIDATE] html_len=213124 text_len=3150 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]}[STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=14080 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=14080 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 2520 [DB LOCK EXISTS] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:14080:20260831070015 pid=14080 alive=False insert_error=(1062, "Duplicate entry 'publish_worker' for key 'PRIMARY'") [DB STALE LOCK REMOVE] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:14080:20260831070015 [DB LOCK ACQUIRED AFTER STALE REMOVE] publish_worker owner=publish_worker:HONGHEE-IP:2520:20260831120003 [PIPELINE RUN START] run_id=1826, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4261 realtor_id=4 article_no=2646438320 sort_at=2026-08-28 23:29:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4261, realtor_id=4, draft_id=4618, article_no=2646438320 [DRAFT HTML CHECK] clipboard_len=18072, draft_len=18072, plain_len=559 ================================================================================ [INTEGRITY OK] queue_id=4261, draft_id=4618, article_no=2646438320 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정포레힐즈스위첸 112동 · 아파트 · 매매 · 7억 8,000' actual='양정포레힐즈스위첸 112동 · 아파트 · 매매 · 7억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='양정포레힐즈스위첸 112동 · 아파트 · 매매 · 7억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_06_2646438320_1788113403.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17689 plain_len= 559 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=11 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4261_2646438320_naver_compatible_v16_20260831_120034.html [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4261_2646438320_after_paste_20260831_120046.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4261_2646438320_after_paste_20260831_120046.txt [EDITOR DEBUG LEN] html= 215628 text= 2830 [EDITOR VALIDATE] html_len=215628 text_len=2830 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정포레힐즈스위첸 112동 · 아파트 · 매매 · 7억 8,000' actual='양정포레힐즈스위첸 112동 · 아파트 · 매매 · 7억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224395878583 [RESULT URL CHECK] https://blog.naver.com/pjy287/224395878583 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4618 blog_id=pjy287 blog_post_no=224395878583 url=https://blog.naver.com/pjy287/224395878583 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224395878583 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224395878583 [PUBLISH ELAPSED] queue_id=4261 elapsed=61.1s avg=61.1s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=169 [PIPELINE RUN FINISH] run_id=1826, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 1 [SUCCESS] 1 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-08-31 12:00:03] START 1/1 �꽌踰� 諛쒗뻾 12:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 12:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-08-31 12:01:05] END �꽌踰� 諛쒗뻾 12:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 17564 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:17564:20260901120013 [PIPELINE RUN START] run_id=1849, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4533 realtor_id=171 article_no=2646927530 sort_at=2026-09-01 02:39:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4533, realtor_id=171, draft_id=4889, article_no=2646927530 [DRAFT HTML CHECK] clipboard_len=17217, draft_len=17217, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=4533, draft_id=4889, article_no=2646927530 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_171.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/k5342201?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/k5342201?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k5342201&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='천안아산역이지더원 105동 · 오피스텔 · 전세 · 2억 8,000' actual='천안아산역이지더원 105동 · 오피스텔 · 전세 · 2억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='천안아산역이지더원 105동 · 오피스텔 · 전세 · 2억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_08_2646927530_1788201921.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16839 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=10 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4533_2646927530_naver_compatible_v16_20260901_120044.html [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4533_2646927530_after_paste_20260901_120055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4533_2646927530_after_paste_20260901_120055.txt [EDITOR DEBUG LEN] html= 198818 text= 3267 [EDITOR VALIDATE] html_len=198818 text_len=3267 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 371.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 451, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='천안아산역이지더원 105동 · 오피스텔 · 전세 · 2억 8,000' actual='천안아산역이지더원 105동 · 오피스텔 · 전세 · 2억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k5342201/224397137572 [RESULT URL CHECK] https://blog.naver.com/k5342201/224397137572 [PRIVATE QUEUE NONE] realtor_id=171 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4889 blog_id=k5342201 blog_post_no=224397137572 url=https://blog.naver.com/k5342201/224397137572 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k5342201/224397137572 [BLOG RESULT PARSED] blog_id=k5342201 blog_post_no=224397137572 [PUBLISH ELAPSED] queue_id=4533 elapsed=61.3s avg=61.3s [SMART SLEEP CALC] remaining_seconds=39524 remaining_count=6 target_cycle=6587.3 avg_publish=61.3 base_sleep=6526.1 range=3263~3263 selected=3263 [SLEEP] 3263s before next queue [PUBLISH TARGET SELECTED] queue_id=4531 realtor_id=169 article_no=2646807978 sort_at=2026-09-01 02:38:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4531, realtor_id=169, draft_id=4887, article_no=2646807978 [DRAFT HTML CHECK] clipboard_len=18843, draft_len=18843, plain_len=524 ================================================================================ [INTEGRITY OK] queue_id=4531, draft_id=4887, article_no=2646807978 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 509동 · 아파트 · 매매 · 8억 5,000' actual='반석5단지예미지 509동 · 아파트 · 매매 · 8억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 509동 · 아파트 · 매매 · 8억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2646807978_1788201889.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18465 plain_len= 524 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=13 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4531_2646807978_naver_compatible_v16_20260901_125608.html [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4531_2646807978_after_paste_20260901_125620.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4531_2646807978_after_paste_20260901_125620.txt [EDITOR DEBUG LEN] html= 213475 text= 3263 [EDITOR VALIDATE] html_len=213475 text_len=3263 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 477, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 518, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 507, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 648.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 509동 · 아파트 · 매매 · 8억 5,000' actual='반석5단지예미지 509동 · 아파트 · 매매 · 8억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224397196045 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224397196045 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4887 blog_id=goskh1010 blog_post_no=224397196045 url=https://blog.naver.com/goskh1010/224397196045 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224397196045 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224397196045 [PUBLISH ELAPSED] queue_id=4531 elapsed=61.2s avg=61.2s [SMART SLEEP CALC] remaining_seconds=36200 remaining_count=5 target_cycle=7240.0 avg_publish=61.2 base_sleep=7178.8 range=3589~3589 selected=3589 [SLEEP] 3589s before next queue [PUBLISH TARGET SELECTED] queue_id=4511 realtor_id=148 article_no=2646924128 sort_at=2026-09-01 02:12:04 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4511, realtor_id=148, draft_id=4867, article_no=2646924128 [DRAFT HTML CHECK] clipboard_len=18977, draft_len=18977, plain_len=583 ================================================================================ [INTEGRITY OK] queue_id=4511, draft_id=4867, article_no=2646924128 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='대전도안센트럴아이파크1단지 102동 · 오피스텔 · 매매 · 4억 5,000' actual='대전도안센트럴아이파크1단지 102동 · 오피스텔 · 매매 · 4억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='대전도안센트럴아이파크1단지 102동 · 오피스텔 · 매매 · 4억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_06_2646924128_1788201670.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18599 plain_len= 583 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=14 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4511_2646924128_naver_compatible_v16_20260901_135659.html [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4511_2646924128_after_paste_20260901_135711.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4511_2646924128_after_paste_20260901_135711.txt [EDITOR DEBUG LEN] html= 216872 text= 3055 [EDITOR VALIDATE] html_len=216872 text_len=3055 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='대전도안센트럴아이파크1단지 102동 · 오피스텔 · 매매 · 4억 5,000' actual='대전도안센트럴아이파크1단지 102동 · 오피스텔 · 매매 · 4억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224397265467 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224397265467 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4867 blog_id=khshim0915 blog_post_no=224397265467 url=https://blog.naver.com/khshim0915/224397265467 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224397265467 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224397265467 [PUBLISH ELAPSED] queue_id=4511 elapsed=61.5s avg=61.3s [SMART SLEEP CALC] remaining_seconds=32549 remaining_count=4 target_cycle=8137.2 avg_publish=61.3 base_sleep=8075.9 range=4037~4037 selected=4037 [SLEEP] 4037s before next queue [PUBLISH TARGET SELECTED] queue_id=4508 realtor_id=144 article_no=2646935975 sort_at=2026-09-01 02:07:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4508, realtor_id=144, draft_id=4864, article_no=2646935975 [DRAFT HTML CHECK] clipboard_len=17280, draft_len=17280, plain_len=536 ================================================================================ [INTEGRITY OK] queue_id=4508, draft_id=4864, article_no=2646935975 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 346, 'y': 226, 'width': 693, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='아산배방5차한성필하우스 504동 · 아파트 · 매매 · 3억 4,500' actual='아산배방5차한성필하우스 504동 · 아파트 · 매매 · 3억 4,500' [TITLE INPUT SUCCESS] attempt=1 title='아산배방5차한성필하우스 504동 · 아파트 · 매매 · 3억 4,500' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2646935975_1788201628.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16902 plain_len= 536 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=8 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4508_2646935975_naver_compatible_v16_20260901_150518.html [PREVIEW IMAGE COUNT] 8 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4508_2646935975_after_paste_20260901_150529.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4508_2646935975_after_paste_20260901_150529.txt [EDITOR DEBUG LEN] html= 208914 text= 3158 [EDITOR VALIDATE] html_len=208914 text_len=3158 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 108.7, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 444.7, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 693, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 671, "height": 491.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 924.3, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 924.3, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 924.3, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 924.3, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 693, "height": 415.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 87.7, "height": 87.7, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='아산배방5차한성필하우스 504동 · 아파트 · 매매 · 3억 4,500' actual='아산배방5차한성필하우스 504동 · 아파트 · 매매 · 3억 4,500' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224397352056 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224397352056 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4864 blog_id=rjsep11 blog_post_no=224397352056 url=https://blog.naver.com/rjsep11/224397352056 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224397352056 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224397352056 [PUBLISH ELAPSED] queue_id=4508 elapsed=61.5s avg=61.4s [SMART SLEEP CALC] remaining_seconds=28451 remaining_count=3 target_cycle=9483.7 avg_publish=61.4 base_sleep=9422.3 range=4711~4711 selected=4711 [SLEEP] 4711s before next queue [PUBLISH TARGET SELECTED] queue_id=4401 realtor_id=5 article_no=2646960462 sort_at=2026-08-31 23:28:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4401, realtor_id=5, draft_id=4757, article_no=2646960462 [DRAFT HTML CHECK] clipboard_len=13945, draft_len=13945, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=4401, draft_id=4757, article_no=2646960462 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='다가구 · 단독/다가구 · 월세 · 500/45' actual='다가구 · 단독/다가구 · 월세 · 500/45' [TITLE INPUT SUCCESS] attempt=1 title='다가구 · 단독/다가구 · 월세 · 500/45' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_07_2646960462_1788200621.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13562 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4401_2646960462_naver_compatible_v16_20260901_162454.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4401_2646960462_after_paste_20260901_162506.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4401_2646960462_after_paste_20260901_162506.txt [EDITOR DEBUG LEN] html= 178242 text= 2831 [EDITOR VALIDATE] html_len=178242 text_len=2831 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='다가구 · 단독/다가구 · 월세 · 500/45' actual='다가구 · 단독/다가구 · 월세 · 500/45' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224397454753 [RESULT URL CHECK] https://blog.naver.com/boram8857/224397454753 [PRIVATE QUEUE COUNT] realtor_id=5 count=2 [PRIVATE START] private_queue_id=1514 realtor_id=5 article_no=2633822844 blog_id=boram8857 blog_post_no=224393098747 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224393098747 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=1514 article_no=2633822844 [PRIVATE START] private_queue_id=1515 realtor_id=5 article_no=2646489657 blog_id=boram8857 blog_post_no=224394834420 [PRIVATE EDIT OPEN] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE EDIT CURRENT URL] https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 1/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 2/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 3/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 4/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 5/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 6/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 7/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 8/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 9/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 10/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 11/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 12/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 13/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 14/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 15/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 16/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 17/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 18/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 19/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WAIT EDITOR] 20/20 url=https://blog.naver.com/PostUpdateForm.naver?blogId=boram8857&logNo=224394834420 [PRIVATE WRITE FRAME NOT FOUND] continue with page selectors [PUBLISH TOP SELECTOR CLICK] button:has-text("발행") [PUBLISH TOP SELECTOR CLICK SUCCESS] [PRIVATE OPTION CLICKED] label:has-text('비공개') idx= 0 [PRIVATE FINAL CLICKED] .confirm_btn__WEaBq idx= 0 [PRIVATE DONE] private_queue_id=1515 article_no=2646489657 [PRIVATE QUEUE RESULT] {'processed': 2, 'success': 2, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4757 blog_id=boram8857 blog_post_no=224397454753 url=https://blog.naver.com/boram8857/224397454753 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224397454753 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224397454753 [PUBLISH ELAPSED] queue_id=4401 elapsed=140.6s avg=77.2s [SMART SLEEP CALC] remaining_seconds=23599 remaining_count=1 target_cycle=23599.0 avg_publish=77.2 base_sleep=23521.8 range=11760~11760 selected=11760 [SLEEP] 11760s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 169, 171, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=220 [PIPELINE RUN FINISH] run_id=1849, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-01 12:00:13] START 1/1 �꽌踰� 諛쒗뻾 12:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 12:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-01 19:42:41] END �꽌踰� 諛쒗뻾 12:00~23:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14676 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14676:20260902120000 [PIPELINE RUN START] run_id=1866, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4676 realtor_id=171 article_no=2647065230 sort_at=2026-09-02 02:41:02 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4676, realtor_id=171, draft_id=5044, article_no=2647065230 [DRAFT HTML CHECK] clipboard_len=15844, draft_len=15844, plain_len=559 ================================================================================ [INTEGRITY OK] queue_id=4676, draft_id=5044, article_no=2647065230 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_171.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=171 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_171.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/k5342201?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/k5342201?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/k5342201?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=k5342201&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나천안아산역(생활숙박시설) A동 · 오피스텔분양권 · 매매 · 8억 900' actual='한화포레나천안아산역(생활숙박시설) A동 · 오피스텔분양권 · 매매 · 8억 900' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나천안아산역(생활숙박시설) A동 · 오피스텔분양권 · 매매 · 8억 900' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_05_2647065230_1788289480.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15466 plain_len= 559 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4676_2647065230_naver_compatible_v16_20260902_120037.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4676_2647065230_after_paste_20260902_120048.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4676_2647065230_after_paste_20260902_120048.txt [EDITOR DEBUG LEN] html= 194522 text= 3546 [EDITOR VALIDATE] html_len=194522 text_len=3546 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 371.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나천안아산역(생활숙박시설) A동 · 오피스텔분양권 · 매매 · 8억 900' actual='한화포레나천안아산역(생활숙박시설) A동 · 오피스텔분양권 · 매매 · 8억 900' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/k5342201/224398335713 [RESULT URL CHECK] https://blog.naver.com/k5342201/224398335713 [PRIVATE QUEUE NONE] realtor_id=171 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5044 blog_id=k5342201 blog_post_no=224398335713 url=https://blog.naver.com/k5342201/224398335713 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/k5342201/224398335713 [BLOG RESULT PARSED] blog_id=k5342201 blog_post_no=224398335713 [PUBLISH ELAPSED] queue_id=4676 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=39532 remaining_count=5 target_cycle=7906.4 avg_publish=66.9 base_sleep=7839.5 range=3919~3919 selected=3919 [SLEEP] 3919s before next queue [PUBLISH TARGET SELECTED] queue_id=4654 realtor_id=148 article_no=2647170800 sort_at=2026-09-02 02:12:58 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4654, realtor_id=148, draft_id=5022, article_no=2647170800 [DRAFT HTML CHECK] clipboard_len=15741, draft_len=15741, plain_len=560 ================================================================================ [INTEGRITY OK] queue_id=4654, draft_id=5022, article_no=2647170800 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 9억 2,884' actual='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 9억 2,884' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 9억 2,884' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_03_2647170800_1788289241.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15363 plain_len= 560 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4654_2647170800_naver_compatible_v16_20260902_130702.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4654_2647170800_after_paste_20260902_130714.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4654_2647170800_after_paste_20260902_130714.txt [EDITOR DEBUG LEN] html= 196244 text= 3104 [EDITOR VALIDATE] html_len=196244 text_len=3104 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [2026-09-02 12:00:00] START 1/1 �꽌踰� 諛쒗뻾 12:00~23:00 JOB: night_publish / �꽌踰� 諛쒗뻾 12:00~23:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 60 --until-time 23:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-02 13:33:07] END �꽌踰� 諛쒗뻾 12:00~23:00 code=1 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK EXISTS] D:/honghee/blog_api/storage\publish_worker.lock pid=14676 alive=False [FILE STALE LOCK REMOVED] D:/honghee/blog_api/storage\publish_worker.lock pid=14676 [FILE LOCK ACQUIRED AFTER STALE REMOVE] D:/honghee/blog_api/storage\publish_worker.lock pid= 4484 [DB LOCK EXISTS] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:14676:20260902120000 pid=14676 alive=False insert_error=(1062, "Duplicate entry 'publish_worker' for key 'PRIMARY'") [DB STALE LOCK REMOVE] lock_name=publish_worker owner=publish_worker:HONGHEE-IP:14676:20260902120000 [DB LOCK ACQUIRED AFTER STALE REMOVE] publish_worker owner=publish_worker:HONGHEE-IP:4484:20260902133855 [PIPELINE RUN START] run_id=1867, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4674 realtor_id=169 article_no=2646806369 sort_at=2026-09-01 02:38:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4674, realtor_id=169, draft_id=5042, article_no=2646806369 [DRAFT HTML CHECK] clipboard_len=15026, draft_len=15026, plain_len=552 ================================================================================ [INTEGRITY OK] queue_id=4674, draft_id=5042, article_no=2646806369 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 8억 5,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 8억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 502동 · 아파트 · 매매 · 8억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2646806369_1788289448.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14649 plain_len= 552 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4674_2646806369_naver_compatible_v16_20260902_133930.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4674_2646806369_after_paste_20260902_133942.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4674_2646806369_after_paste_20260902_133942.txt [EDITOR DEBUG LEN] html= 192152 text= 2849 [EDITOR VALIDATE] html_len=192152 text_len=2849 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 8억 5,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 8억 5,000' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224398439076 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224398439076 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5042 blog_id=goskh1010 blog_post_no=224398439076 url=https://blog.naver.com/goskh1010/224398439076 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224398439076 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224398439076 [PUBLISH ELAPSED] queue_id=4674 elapsed=65.6s avg=65.6s [SMART SLEEP CALC] remaining_seconds=15598 remaining_count=3 target_cycle=5199.3 avg_publish=65.6 base_sleep=5133.7 range=2566~2566 selected=2566 [SLEEP] 2566s before next queue [PUBLISH TARGET SELECTED] queue_id=4651 realtor_id=144 article_no=2646764819 sort_at=2026-09-01 02:07:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4651, realtor_id=144, draft_id=5019, article_no=2646764819 [DRAFT HTML CHECK] clipboard_len=15707, draft_len=15707, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=4651, draft_id=5019, article_no=2646764819 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=1&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='배방한성필하우스2단지 203동 · 아파트 · 매매 · 2억 1,500' actual='배방한성필하우스2단지 203동 · 아파트 · 매매 · 2억 1,500' [TITLE INPUT SUCCESS] attempt=1 title='배방한성필하우스2단지 203동 · 아파트 · 매매 · 2억 1,500' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_07_2646764819_1788289183.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15330 plain_len= 542 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4651_2646764819_naver_compatible_v16_20260902_142323.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4651_2646764819_after_paste_20260902_142334.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4651_2646764819_after_paste_20260902_142334.txt [EDITOR DEBUG LEN] html= 196996 text= 3138 [EDITOR VALIDATE] html_len=196996 text_len=3138 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='배방한성필하우스2단지 203동 · 아파트 · 매매 · 2억 1,500' actual='배방한성필하우스2단지 203동 · 아파트 · 매매 · 2억 1,500' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224398489081 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224398489081 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5019 blog_id=rjsep11 blog_post_no=224398489081 url=https://blog.naver.com/rjsep11/224398489081 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224398489081 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224398489081 [PUBLISH ELAPSED] queue_id=4651 elapsed=66.2s avg=65.9s [SMART SLEEP CALC] remaining_seconds=12966 remaining_count=2 target_cycle=6483.0 avg_publish=65.9 base_sleep=6417.1 range=3208~3208 selected=3208 [SLEEP] 3208s before next queue [PUBLISH TARGET SELECTED] queue_id=4544 realtor_id=5 article_no=2646959082 sort_at=2026-08-31 23:28:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4544, realtor_id=5, draft_id=4912, article_no=2646959082 [DRAFT HTML CHECK] clipboard_len=14382, draft_len=14382, plain_len=527 ================================================================================ [INTEGRITY OK] queue_id=4544, draft_id=4912, article_no=2646959082 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='포도힐(58-3,도시형) 1동 · 아파트 · 월세 · 200/30' actual='포도힐(58-3,도시형) 1동 · 아파트 · 월세 · 200/30' [TITLE INPUT SUCCESS] attempt=1 title='포도힐(58-3,도시형) 1동 · 아파트 · 월세 · 200/30' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2646959082_1788288160.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14004 plain_len= 527 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=2 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4544_2646959082_naver_compatible_v16_20260902_151757.html [PREVIEW IMAGE COUNT] 2 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4544_2646959082_after_paste_20260902_151808.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4544_2646959082_after_paste_20260902_151808.txt [EDITOR DEBUG LEN] html= 184761 text= 3005 [EDITOR VALIDATE] html_len=184761 text_len=3005 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='포도힐(58-3,도시형) 1동 · 아파트 · 월세 · 200/30' actual='포도힐(58-3,도시형) 1동 · 아파트 · 월세 · 200/30' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224398558821 [RESULT URL CHECK] https://blog.naver.com/boram8857/224398558821 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4912 blog_id=boram8857 blog_post_no=224398558821 url=https://blog.naver.com/boram8857/224398558821 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224398558821 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224398558821 [PUBLISH ELAPSED] queue_id=4544 elapsed=66.0s avg=66.0s [SMART SLEEP CALC] remaining_seconds=9691 remaining_count=1 target_cycle=9691.0 avg_publish=66.0 base_sleep=9625.0 range=4812~4812 selected=4812 [SLEEP] 4812s before next queue [PUBLISH TARGET SELECTED] queue_id=4543 realtor_id=4 article_no=2646705938 sort_at=2026-08-31 11:17:33 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4543, realtor_id=4, draft_id=4911, article_no=2646705938 [DRAFT HTML CHECK] clipboard_len=18434, draft_len=18434, plain_len=542 ================================================================================ [INTEGRITY OK] queue_id=4543, draft_id=4911, article_no=2646705938 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/laquint [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 2/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 3/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 4/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 5/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 6/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 7/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 8/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 9/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 10/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 11/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 12/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 13/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 14/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 15/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 16/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 17/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 18/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 19/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 20/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 21/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 22/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 23/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 24/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 25/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 26/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 27/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 28/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 29/30 url=https://blog.naver.com/laquint [WAIT EDITOR] 30/30 url=https://blog.naver.com/laquint [WRITE FINAL URL] https://blog.naver.com/laquint [WRITE HOLD] [WRITE_HOLD] realtor_id=4 / 글쓰기 iframe 미발견 / 최종 URL: https://blog.naver.com/laquint [PUBLISH ELAPSED] queue_id=4543 elapsed=35.8s avg=58.4s [SMART SLEEP CALC] remaining_seconds=4843 remaining_count=1 target_cycle=4843.0 avg_publish=58.4 base_sleep=4784.6 range=2392~2392 selected=2392 [SLEEP] 2392s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[144, 169, 4, 5] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=210 [PIPELINE RUN FINISH] run_id=1867, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 4 [SUCCESS] 3 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-02 13:38:55] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-02 17:19:08] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 936 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:936:20260903100011 [PIPELINE RUN START] run_id=1875, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4811 realtor_id=169 article_no=2647357339 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4811, realtor_id=169, draft_id=5178, article_no=2647357339 [DRAFT HTML CHECK] clipboard_len=14283, draft_len=14283, plain_len=544 ================================================================================ [INTEGRITY OK] queue_id=4811, draft_id=5178, article_no=2647357339 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 8억 2,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 8억 2,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 502동 · 아파트 · 매매 · 8억 2,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2647357339_1788360208.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13906 plain_len= 544 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4811_2647357339_naver_compatible_v16_20260903_100047.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4811_2647357339_after_paste_20260903_100058.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4811_2647357339_after_paste_20260903_100058.txt [EDITOR DEBUG LEN] html= 183988 text= 2817 [EDITOR VALIDATE] html_len=183988 text_len=2817 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 8억 2,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 8억 2,000' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224399383711 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224399383711 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5178 blog_id=goskh1010 blog_post_no=224399383711 url=https://blog.naver.com/goskh1010/224399383711 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224399383711 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224399383711 [PUBLISH ELAPSED] queue_id=4811 elapsed=65.9s avg=65.9s [SMART SLEEP CALC] remaining_seconds=28721 remaining_count=5 target_cycle=5744.2 avg_publish=65.9 base_sleep=5678.3 range=2839~2839 selected=2839 [SLEEP] 2839s before next queue [PUBLISH TARGET SELECTED] queue_id=4817 realtor_id=175 article_no=2647111815 sort_at=2026-09-03 10:06:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4817, realtor_id=175, draft_id=5184, article_no=2647111815 [DRAFT HTML CHECK] clipboard_len=16613, draft_len=16613, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=4817, draft_id=5184, article_no=2647111815 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_175.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=3 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=3 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [WAIT EDITOR] 1/30 url=https://blog.naver.com/ghghgh0123?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/ghghgh0123?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=ghghgh0123&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트천안역스카이움(주) 102동 · 아파트분양권 · 매매 · 5억 1,694' actual='힐스테이트천안역스카이움(주) 102동 · 아파트분양권 · 매매 · 5억 1,694' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트천안역스카이움(주) 102동 · 아파트분양권 · 매매 · 5억 1,694' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_01_2647111815_1788397678.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16236 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=6 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4817_2647111815_naver_compatible_v16_20260903_104910.html [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4817_2647111815_after_paste_20260903_104921.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4817_2647111815_after_paste_20260903_104921.txt [EDITOR DEBUG LEN] html= 210715 text= 3428 [EDITOR VALIDATE] html_len=210715 text_len=3428 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 371.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 508, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트천안역스카이움(주) 102동 · 아파트분양권 · 매매 · 5억 1,694' actual='힐스테이트천안역스카이움(주) 102동 · 아파트분양권 · 매매 · 5억 1,694' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/ghghgh0123/224399439740 [RESULT URL CHECK] https://blog.naver.com/ghghgh0123/224399439740 [PRIVATE QUEUE NONE] realtor_id=175 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5184 blog_id=ghghgh0123 blog_post_no=224399439740 url=https://blog.naver.com/ghghgh0123/224399439740 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/ghghgh0123/224399439740 [BLOG RESULT PARSED] blog_id=ghghgh0123 blog_post_no=224399439740 [PUBLISH ELAPSED] queue_id=4817 elapsed=63.7s avg=64.8s [SMART SLEEP CALC] remaining_seconds=25818 remaining_count=5 target_cycle=5163.6 avg_publish=64.8 base_sleep=5098.8 range=2549~2549 selected=2549 [SLEEP] 2549s before next queue [PUBLISH TARGET SELECTED] queue_id=4791 realtor_id=148 article_no=2647395743 sort_at=2026-09-02 21:51:52 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4791, realtor_id=148, draft_id=5158, article_no=2647395743 [DRAFT HTML CHECK] clipboard_len=19903, draft_len=19903, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=4791, draft_id=5158, article_no=2647395743 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='대전아이파크시티1단지 113동 · 아파트 · 매매 · 8억' actual='대전아이파크시티1단지 113동 · 아파트 · 매매 · 8억' [TITLE INPUT SUCCESS] attempt=1 title='대전아이파크시티1단지 113동 · 아파트 · 매매 · 8억' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_DARK_REC_PHOTO_LAYOUT_02_2647395743_1788359982.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19528 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=15 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4791_2647395743_naver_compatible_v16_20260903_113244.html [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4791_2647395743_after_paste_20260903_113256.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4791_2647395743_after_paste_20260903_113256.txt [EDITOR DEBUG LEN] html= 223934 text= 3164 [EDITOR VALIDATE] html_len=223934 text_len=3164 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='대전아이파크시티1단지 113동 · 아파트 · 매매 · 8억' actual='대전아이파크시티1단지 113동 · 아파트 · 매매 · 8억' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224399495567 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224399495567 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5158 blog_id=khshim0915 blog_post_no=224399495567 url=https://blog.naver.com/khshim0915/224399495567 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224399495567 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224399495567 [PUBLISH ELAPSED] queue_id=4791 elapsed=65.6s avg=65.1s [SMART SLEEP CALC] remaining_seconds=23204 remaining_count=4 target_cycle=5801.0 avg_publish=65.1 base_sleep=5735.9 range=2867~2867 selected=2867 [SLEEP] 2867s before next queue [PUBLISH TARGET SELECTED] queue_id=4813 realtor_id=171 article_no=2646927435 sort_at=2026-09-01 02:39:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4813, realtor_id=171, draft_id=5180, article_no=2646927435 [DRAFT HTML CHECK] clipboard_len=17582, draft_len=17582, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=4813, draft_id=5180, article_no=2646927435 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_171.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=171 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ee965ad4314f405ab41b654a2a6536 [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ee965ad4314f405ab41b654a2a6536 [AUTO RELOGIN WAIT] 30/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ee965ad4314f405ab41b654a2a6536 [AUTO RELOGIN WAIT] 60/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ee965ad4314f405ab41b654a2a6536 [AUTO RELOGIN FAIL] naver_block 새 기기 로그인 인증 필요 [SESSION HOLD] [SESSION_HOLD] realtor_id=171 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 새 기기 로그인 인증 필요 [PUBLISH ELAPSED] queue_id=4813 elapsed=97.3s avg=73.1s [SMART SLEEP CALC] remaining_seconds=20239 remaining_count=3 target_cycle=6746.3 avg_publish=73.1 base_sleep=6673.2 range=3336~3336 selected=3336 [SLEEP] 3336s before next queue [PUBLISH TARGET SELECTED] queue_id=4788 realtor_id=144 article_no=2646732364 sort_at=2026-09-01 02:07:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4788, realtor_id=144, draft_id=5155, article_no=2646732364 [DRAFT HTML CHECK] clipboard_len=17993, draft_len=17993, plain_len=560 ================================================================================ [INTEGRITY OK] queue_id=4788, draft_id=5155, article_no=2646732364 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=1&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='아산배방5차한성필하우스 505동 · 아파트 · 매매 · 5억' actual='아산배방5차한성필하우스 505동 · 아파트 · 매매 · 5억' [TITLE INPUT SUCCESS] attempt=1 title='아산배방5차한성필하우스 505동 · 아파트 · 매매 · 5억' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2646732364_1788359947.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17615 plain_len= 560 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=10 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4788_2646732364_naver_compatible_v16_20260903_131851.html [PREVIEW IMAGE COUNT] 10 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4788_2646732364_after_paste_20260903_131902.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4788_2646732364_after_paste_20260903_131902.txt [EDITOR DEBUG LEN] html= 213587 text= 3124 [EDITOR VALIDATE] html_len=213587 text_len=3124 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1777, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1733, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 370, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1733, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1733, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1733, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='아산배방5차한성필하우스 505동 · 아파트 · 매매 · 5억' actual='아산배방5차한성필하우스 505동 · 아파트 · 매매 · 5억' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224399609665 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224399609665 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5155 blog_id=rjsep11 blog_post_no=224399609665 url=https://blog.naver.com/rjsep11/224399609665 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224399609665 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224399609665 [PUBLISH ELAPSED] queue_id=4788 elapsed=65.7s avg=71.6s [SMART SLEEP CALC] remaining_seconds=16837 remaining_count=2 target_cycle=8418.5 avg_publish=71.6 base_sleep=8346.9 range=4173~4173 selected=4173 [SLEEP] 4173s before next queue [PUBLISH TARGET SELECTED] queue_id=4683 realtor_id=5 article_no=2646738591 sort_at=2026-08-31 11:17:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4683, realtor_id=5, draft_id=5050, article_no=2646738591 [DRAFT HTML CHECK] clipboard_len=17102, draft_len=17102, plain_len=561 ================================================================================ [INTEGRITY OK] queue_id=4683, draft_id=5050, article_no=2646738591 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원2단지 206동 · 아파트 · 매매 · 4억 8,530' actual='한화포레나대전월평공원2단지 206동 · 아파트 · 매매 · 4억 8,530' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원2단지 206동 · 아파트 · 매매 · 4억 8,530' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2646738591_1788358904.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 16726 plain_len= 561 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=7 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4683_2646738591_naver_compatible_v16_20260903_142931.html [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4683_2646738591_after_paste_20260903_142942.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4683_2646738591_after_paste_20260903_142942.txt [EDITOR DEBUG LEN] html= 207675 text= 3424 [EDITOR VALIDATE] html_len=207675 text_len=3424 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원2단지 206동 · 아파트 · 매매 · 4억 8,530' actual='한화포레나대전월평공원2단지 206동 · 아파트 · 매매 · 4억 8,530' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224399693637 [RESULT URL CHECK] https://blog.naver.com/boram8857/224399693637 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5050 blog_id=boram8857 blog_post_no=224399693637 url=https://blog.naver.com/boram8857/224399693637 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224399693637 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224399693637 [PUBLISH ELAPSED] queue_id=4683 elapsed=66.7s avg=70.8s [SMART SLEEP CALC] remaining_seconds=12597 remaining_count=1 target_cycle=12597.0 avg_publish=70.8 base_sleep=12526.2 range=6263~6263 selected=6263 [SLEEP] 6263s before next queue [PUBLISH TARGET SELECTED] queue_id=4682 realtor_id=4 article_no=2646705716 sort_at=2026-08-31 11:17:33 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4682, realtor_id=4, draft_id=5049, article_no=2646705716 [DRAFT HTML CHECK] clipboard_len=17703, draft_len=17703, plain_len=543 ================================================================================ [INTEGRITY OK] queue_id=4682, draft_id=5049, article_no=2646705716 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 204동 · 아파트 · 매매 · 8억 7,000' actual='양정자이더샵SK뷰 204동 · 아파트 · 매매 · 8억 7,000' [TITLE INPUT SUCCESS] attempt=1 title='양정자이더샵SK뷰 204동 · 아파트 · 매매 · 8억 7,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_01_2646705716_1788358902.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17325 plain_len= 543 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=11 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4682_2646705716_naver_compatible_v16_20260903_161500.html [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4682_2646705716_after_paste_20260903_161511.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4682_2646705716_after_paste_20260903_161511.txt [EDITOR DEBUG LEN] html= 212502 text= 2798 [EDITOR VALIDATE] html_len=212502 text_len=2798 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 204동 · 아파트 · 매매 · 8억 7,000' actual='양정자이더샵SK뷰 204동 · 아파트 · 매매 · 8억 7,000' [PUBLISH TOP CANDIDATE COUNT] 3 [PUBLISH TOP SELECTOR CLICK] root=frame[1] selector=button.publish_btn__m9KHH index=0 text='발행' score=290 [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [PUBLISH TOP CLICK VERIFIED] confirm panel opened [PUBLISH CONFIRM PANEL FOUND] root=frame[1] selector=[class*="confirm_btn"] index=0 text='발행' [FINAL PUBLISH CANDIDATE COUNT] 6 [FINAL PUBLISH SELECTOR CLICK] root=frame[1] selector=[class*="confirm_btn"]:has-text("발행") index=0 text='발행' score=310 [FINAL PUBLISH SELECTOR CLICK SENT] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224399834956 [RESULT URL CHECK] https://blog.naver.com/pjy287/224399834956 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5049 blog_id=pjy287 blog_post_no=224399834956 url=https://blog.naver.com/pjy287/224399834956 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224399834956 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224399834956 [PUBLISH ELAPSED] queue_id=4682 elapsed=66.0s avg=70.1s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 171, 175, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=208 [PIPELINE RUN FINISH] run_id=1875, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 7 [SUCCESS] 6 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-03 10:00:11] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-03 16:15:31] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 15092 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:15092:20260904100019 [PIPELINE RUN START] run_id=1897, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4868 realtor_id=148 article_no=2647643184 sort_at=2026-09-03 21:01:44 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4868, realtor_id=148, draft_id=5240, article_no=2647643184 [DRAFT HTML CHECK] clipboard_len=19824, draft_len=19824, plain_len=531 ================================================================================ [INTEGRITY OK] queue_id=4868, draft_id=5240, article_no=2647643184 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 102동 · 아파트분양권 · 매매 · 6억 3,570' actual='둔산엘리프더센트럴 102동 · 아파트분양권 · 매매 · 6억 3,570' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 102동 · 아파트분양권 · 매매 · 6억 3,570' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_01_2647643184_1788439968.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19446 plain_len= 531 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4868_2647643184_naver_compatible_v16_20260904_100057.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4868_2647643184_after_paste_20260904_100109.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4868_2647643184_after_paste_20260904_100109.txt [EDITOR DEBUG LEN] html= 219327 text= 3090 [EDITOR VALIDATE] html_len=219327 text_len=3090 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 102동 · 아파트분양권 · 매매 · 6억 3,570' actual='둔산엘리프더센트럴 102동 · 아파트분양권 · 매매 · 6억 3,570' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224400562544 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224400562544 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5240 blog_id=khshim0915 blog_post_no=224400562544 url=https://blog.naver.com/khshim0915/224400562544 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224400562544 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224400562544 [PUBLISH ELAPSED] queue_id=4868 elapsed=68.0s avg=68.0s [SMART SLEEP CALC] remaining_seconds=28711 remaining_count=5 target_cycle=5742.2 avg_publish=68.0 base_sleep=5674.2 range=2837~2837 selected=2837 [SLEEP] 2837s before next queue [PUBLISH TARGET SELECTED] queue_id=4865 realtor_id=144 article_no=2647572735 sort_at=2026-09-03 20:57:37 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4865, realtor_id=144, draft_id=5237, article_no=2647572735 [DRAFT HTML CHECK] clipboard_len=18755, draft_len=18755, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=4865, draft_id=5237, article_no=2647572735 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=1&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='아산배방우방아이유쉘2단지 208동 · 아파트 · 매매 · 3억 4,500' actual='아산배방우방아이유쉘2단지 208동 · 아파트 · 매매 · 3억 4,500' [TITLE INPUT SUCCESS] attempt=1 title='아산배방우방아이유쉘2단지 208동 · 아파트 · 매매 · 3억 4,500' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_04_2647572735_1788439910.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18377 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=12 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4865_2647572735_naver_compatible_v16_20260904_104920.html [PREVIEW IMAGE COUNT] 12 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4865_2647572735_after_paste_20260904_104932.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4865_2647572735_after_paste_20260904_104932.txt [EDITOR DEBUG LEN] html= 217663 text= 3165 [EDITOR VALIDATE] html_len=217663 text_len=3165 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 601, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 601, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 601, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 601, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 601, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='아산배방우방아이유쉘2단지 208동 · 아파트 · 매매 · 3억 4,500' actual='아산배방우방아이유쉘2단지 208동 · 아파트 · 매매 · 3억 4,500' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224400619997 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224400619997 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5237 blog_id=rjsep11 blog_post_no=224400619997 url=https://blog.naver.com/rjsep11/224400619997 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224400619997 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224400619997 [PUBLISH ELAPSED] queue_id=4865 elapsed=66.2s avg=67.1s [SMART SLEEP CALC] remaining_seconds=25808 remaining_count=3 target_cycle=8602.7 avg_publish=67.1 base_sleep=8535.6 range=4267~4267 selected=4267 [SLEEP] 4267s before next queue [PUBLISH TARGET SELECTED] queue_id=4837 realtor_id=77 article_no=2646666209 sort_at=2026-09-03 17:30:30 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4837, realtor_id=77, draft_id=5209, article_no=2646666209 [DRAFT HTML CHECK] clipboard_len=15456, draft_len=15456, plain_len=334 ================================================================================ [INTEGRITY OK] queue_id=4837, draft_id=5209, article_no=2646666209 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='복합상가 골드타워 · 상가 · 월세 · 6,000/265' actual='복합상가 골드타워 · 상가 · 월세 · 6,000/265' [TITLE INPUT SUCCESS] attempt=1 title='복합상가 골드타워 · 상가 · 월세 · 6,000/265' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_01_2646666209_1788439580.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15073 plain_len= 334 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=7 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4837_2646666209_naver_compatible_v16_20260904_120133.html [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4837_2646666209_after_paste_20260904_120144.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4837_2646666209_after_paste_20260904_120144.txt [EDITOR DEBUG LEN] html= 188731 text= 2538 [EDITOR VALIDATE] html_len=188731 text_len=2538 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 772, "height": 580, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 450, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 420, "height": 560, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 420, "height": 560, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='복합상가 골드타워 · 상가 · 월세 · 6,000/265' actual='복합상가 골드타워 · 상가 · 월세 · 6,000/265' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224400706159 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224400706159 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5209 blog_id=crystal1154 blog_post_no=224400706159 url=https://blog.naver.com/crystal1154/224400706159 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224400706159 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224400706159 [PUBLISH ELAPSED] queue_id=4837 elapsed=65.1s avg=66.4s [SMART SLEEP CALC] remaining_seconds=21476 remaining_count=2 target_cycle=10738.0 avg_publish=66.4 base_sleep=10671.6 range=5335~5335 selected=5335 [SLEEP] 5335s before next queue [PUBLISH TARGET SELECTED] queue_id=4881 realtor_id=169 article_no=2647357152 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4881, realtor_id=169, draft_id=5253, article_no=2647357152 [DRAFT HTML CHECK] clipboard_len=15543, draft_len=15543, plain_len=553 ================================================================================ [INTEGRITY OK] queue_id=4881, draft_id=5253, article_no=2647357152 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 507동 · 아파트 · 매매 · 7억 5,000' actual='반석5단지예미지 507동 · 아파트 · 매매 · 7억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 507동 · 아파트 · 매매 · 7억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_03_2647357152_1788440111.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15166 plain_len= 553 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4881_2647357152_naver_compatible_v16_20260904_133133.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4881_2647357152_after_paste_20260904_133145.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4881_2647357152_after_paste_20260904_133145.txt [EDITOR DEBUG LEN] html= 193641 text= 3270 [EDITOR VALIDATE] html_len=193641 text_len=3270 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 507동 · 아파트 · 매매 · 7억 5,000' actual='반석5단지예미지 507동 · 아파트 · 매매 · 7억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224400801243 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224400801243 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5253 blog_id=goskh1010 blog_post_no=224400801243 url=https://blog.naver.com/goskh1010/224400801243 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224400801243 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224400801243 [PUBLISH ELAPSED] queue_id=4881 elapsed=65.5s avg=66.2s [SMART SLEEP CALC] remaining_seconds=16075 remaining_count=1 target_cycle=16075.0 avg_publish=66.2 base_sleep=16008.8 range=8004~8004 selected=8004 [SLEEP] 8004s before next queue [PUBLISH TARGET SELECTED] queue_id=4821 realtor_id=5 article_no=2646748213 sort_at=2026-08-31 11:17:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4821, realtor_id=5, draft_id=5193, article_no=2646748213 [DRAFT HTML CHECK] clipboard_len=15038, draft_len=15038, plain_len=522 ================================================================================ [INTEGRITY OK] queue_id=4821, draft_id=5193, article_no=2646748213 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='스위트빌(주상복합) 1동 · 아파트 · 매매 · 1억 1,000' actual='스위트빌(주상복합) 1동 · 아파트 · 매매 · 1억 1,000' [TITLE INPUT SUCCESS] attempt=1 title='스위트빌(주상복합) 1동 · 아파트 · 매매 · 1억 1,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2646748213_1788439428.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14662 plain_len= 522 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4821_2646748213_naver_compatible_v16_20260904_154603.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4821_2646748213_after_paste_20260904_154615.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4821_2646748213_after_paste_20260904_154615.txt [EDITOR DEBUG LEN] html= 192367 text= 3065 [EDITOR VALIDATE] html_len=192367 text_len=3065 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='스위트빌(주상복합) 1동 · 아파트 · 매매 · 1억 1,000' actual='스위트빌(주상복합) 1동 · 아파트 · 매매 · 1억 1,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224400967137 [RESULT URL CHECK] https://blog.naver.com/boram8857/224400967137 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5193 blog_id=boram8857 blog_post_no=224400967137 url=https://blog.naver.com/boram8857/224400967137 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224400967137 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224400967137 [PUBLISH ELAPSED] queue_id=4821 elapsed=65.7s avg=66.1s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[5, 169, 77, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=201 [PIPELINE RUN FINISH] run_id=1897, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-04 10:00:19] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-04 15:46:34] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14864 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14864:20260905100003 [PIPELINE RUN START] run_id=1917, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4936 realtor_id=171 article_no=2647799182 sort_at=2026-09-04 20:22:12 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4936, realtor_id=171, draft_id=5307, article_no=2647799182 [DRAFT HTML CHECK] clipboard_len=17192, draft_len=17192, plain_len=565 ================================================================================ [INTEGRITY OK] queue_id=4936, draft_id=5307, article_no=2647799182 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_171.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=171 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=76668ebf5e6f4322b4ba29cbc74364 [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=76668ebf5e6f4322b4ba29cbc74364 [AUTO RELOGIN WAIT] 30/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=76668ebf5e6f4322b4ba29cbc74364 [AUTO RELOGIN WAIT] 60/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=76668ebf5e6f4322b4ba29cbc74364 [AUTO RELOGIN FAIL] naver_block 새 기기 로그인 인증 필요 [SESSION HOLD] [SESSION_HOLD] realtor_id=171 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 새 기기 로그인 인증 필요 [PUBLISH ELAPSED] queue_id=4936 elapsed=97.6s avg=97.6s [SMART SLEEP CALC] remaining_seconds=28698 remaining_count=6 target_cycle=4783.0 avg_publish=97.6 base_sleep=4685.4 range=2342~2342 selected=2342 [SLEEP] 2342s before next queue [PUBLISH TARGET SELECTED] queue_id=4934 realtor_id=169 article_no=2647857811 sort_at=2026-09-04 20:21:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4934, realtor_id=169, draft_id=5305, article_no=2647857811 [DRAFT HTML CHECK] clipboard_len=13363, draft_len=13363, plain_len=510 ================================================================================ [INTEGRITY OK] queue_id=4934, draft_id=5305, article_no=2647857811 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='단독 · 단독/다가구 · 월세 · 700/70' actual='단독 · 단독/다가구 · 월세 · 700/70' [TITLE INPUT SUCCESS] attempt=1 title='단독 · 단독/다가구 · 월세 · 700/70' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_02_2647857811_1788522543.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12985 plain_len= 510 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=5 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4934_2647857811_naver_compatible_v16_20260905_104117.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4934_2647857811_after_paste_20260905_104128.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4934_2647857811_after_paste_20260905_104128.txt [EDITOR DEBUG LEN] html= 171989 text= 2497 [EDITOR VALIDATE] html_len=171989 text_len=2497 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='단독 · 단독/다가구 · 월세 · 700/70' actual='단독 · 단독/다가구 · 월세 · 700/70' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224401660624 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224401660624 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5305 blog_id=goskh1010 blog_post_no=224401660624 url=https://blog.naver.com/goskh1010/224401660624 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224401660624 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224401660624 [PUBLISH ELAPSED] queue_id=4934 elapsed=64.4s avg=81.0s [SMART SLEEP CALC] remaining_seconds=26292 remaining_count=5 target_cycle=5258.4 avg_publish=81.0 base_sleep=5177.4 range=2588~2588 selected=2588 [SLEEP] 2588s before next queue [PUBLISH TARGET SELECTED] queue_id=4891 realtor_id=4 article_no=2647878881 sort_at=2026-09-04 19:28:24 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4891, realtor_id=4, draft_id=5262, article_no=2647878881 [DRAFT HTML CHECK] clipboard_len=18057, draft_len=18057, plain_len=561 ================================================================================ [INTEGRITY OK] queue_id=4891, draft_id=5262, article_no=2647878881 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='서면4차봄여름가을겨울(주상복합) 101동 · 아파트분양권 · 전세 · 2억 5,000' actual='서면4차봄여름가을겨울(주상복합) 101동 · 아파트분양권 · 전세 · 2억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='서면4차봄여름가을겨울(주상복합) 101동 · 아파트분양권 · 전세 · 2억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2647878881_1788522086.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17679 plain_len= 561 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=14 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4891_2647878881_naver_compatible_v16_20260905_112532.html [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4891_2647878881_after_paste_20260905_112543.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4891_2647878881_after_paste_20260905_112543.txt [EDITOR DEBUG LEN] html= 205557 text= 2759 [EDITOR VALIDATE] html_len=205557 text_len=2759 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='서면4차봄여름가을겨울(주상복합) 101동 · 아파트분양권 · 전세 · 2억 5,000' actual='서면4차봄여름가을겨울(주상복합) 101동 · 아파트분양권 · 전세 · 2억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224401693542 [RESULT URL CHECK] https://blog.naver.com/pjy287/224401693542 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5262 blog_id=pjy287 blog_post_no=224401693542 url=https://blog.naver.com/pjy287/224401693542 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224401693542 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224401693542 [PUBLISH ELAPSED] queue_id=4891 elapsed=67.1s avg=76.4s [SMART SLEEP CALC] remaining_seconds=23636 remaining_count=4 target_cycle=5909.0 avg_publish=76.4 base_sleep=5832.6 range=2916~2916 selected=2916 [SLEEP] 2916s before next queue [PUBLISH TARGET SELECTED] queue_id=4921 realtor_id=148 article_no=2647642237 sort_at=2026-09-03 21:01:45 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4921, realtor_id=148, draft_id=5292, article_no=2647642237 [DRAFT HTML CHECK] clipboard_len=19150, draft_len=19150, plain_len=563 ================================================================================ [INTEGRITY OK] queue_id=4921, draft_id=5292, article_no=2647642237 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 160' actual='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 160' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 160' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2647642237_1788522390.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18772 plain_len= 563 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=14 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4921_2647642237_naver_compatible_v16_20260905_121520.html [PREVIEW IMAGE COUNT] 14 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4921_2647642237_after_paste_20260905_121532.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4921_2647642237_after_paste_20260905_121532.txt [EDITOR DEBUG LEN] html= 221726 text= 3184 [EDITOR VALIDATE] html_len=221726 text_len=3184 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 160' actual='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 160' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224401730795 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224401730795 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5292 blog_id=khshim0915 blog_post_no=224401730795 url=https://blog.naver.com/khshim0915/224401730795 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224401730795 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224401730795 [PUBLISH ELAPSED] queue_id=4921 elapsed=65.9s avg=73.8s [SMART SLEEP CALC] remaining_seconds=20648 remaining_count=3 target_cycle=6882.7 avg_publish=73.8 base_sleep=6808.9 range=3404~3404 selected=3404 [SLEEP] 3404s before next queue [PUBLISH TARGET SELECTED] queue_id=4918 realtor_id=144 article_no=2647517296 sort_at=2026-09-03 20:57:37 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4918, realtor_id=144, draft_id=5289, article_no=2647517296 [DRAFT HTML CHECK] clipboard_len=16159, draft_len=16159, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=4918, draft_id=5289, article_no=2647517296 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=1&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='배방역효성해링턴플레이스 106동 · 아파트 · 매매 · 2억 4,000' actual='배방역효성해링턴플레이스 106동 · 아파트 · 매매 · 2억 4,000' [TITLE INPUT SUCCESS] attempt=1 title='배방역효성해링턴플레이스 106동 · 아파트 · 매매 · 2억 4,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2647517296_1788522342.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15781 plain_len= 555 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4918_2647517296_naver_compatible_v16_20260905_131310.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4918_2647517296_after_paste_20260905_131322.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4918_2647517296_after_paste_20260905_131322.txt [EDITOR DEBUG LEN] html= 201037 text= 3144 [EDITOR VALIDATE] html_len=201037 text_len=3144 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='배방역효성해링턴플레이스 106동 · 아파트 · 매매 · 2억 4,000' actual='배방역효성해링턴플레이스 106동 · 아파트 · 매매 · 2억 4,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224401771103 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224401771103 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5289 blog_id=rjsep11 blog_post_no=224401771103 url=https://blog.naver.com/rjsep11/224401771103 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224401771103 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224401771103 [PUBLISH ELAPSED] queue_id=4918 elapsed=65.8s avg=72.2s [SMART SLEEP CALC] remaining_seconds=17178 remaining_count=2 target_cycle=8589.0 avg_publish=72.2 base_sleep=8516.8 range=4258~4258 selected=4258 [SLEEP] 4258s before next queue [PUBLISH TARGET SELECTED] queue_id=4892 realtor_id=5 article_no=2646749360 sort_at=2026-08-31 11:17:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4892, realtor_id=5, draft_id=5263, article_no=2646749360 [DRAFT HTML CHECK] clipboard_len=15487, draft_len=15487, plain_len=528 ================================================================================ [INTEGRITY OK] queue_id=4892, draft_id=5263, article_no=2646749360 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트가장더퍼스트 101동 · 아파트분양권 · 매매 · 5억 9,957' actual='힐스테이트가장더퍼스트 101동 · 아파트분양권 · 매매 · 5억 9,957' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트가장더퍼스트 101동 · 아파트분양권 · 매매 · 5억 9,957' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_DARK_REC_PHOTO_LAYOUT_01_2646749360_1788522089.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15112 plain_len= 528 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4892_2646749360_naver_compatible_v16_20260905_142514.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4892_2646749360_after_paste_20260905_142526.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4892_2646749360_after_paste_20260905_142526.txt [EDITOR DEBUG LEN] html= 196415 text= 3100 [EDITOR VALIDATE] html_len=196415 text_len=3100 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트가장더퍼스트 101동 · 아파트분양권 · 매매 · 5억 9,957' actual='힐스테이트가장더퍼스트 101동 · 아파트분양권 · 매매 · 5억 9,957' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224401820879 [RESULT URL CHECK] https://blog.naver.com/boram8857/224401820879 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5263 blog_id=boram8857 blog_post_no=224401820879 url=https://blog.naver.com/boram8857/224401820879 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224401820879 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224401820879 [PUBLISH ELAPSED] queue_id=4892 elapsed=65.9s avg=71.1s [SMART SLEEP CALC] remaining_seconds=12854 remaining_count=1 target_cycle=12854.0 avg_publish=71.1 base_sleep=12782.9 range=6391~6391 selected=6391 [SLEEP] 6391s before next queue [PUBLISH TARGET SELECTED] queue_id=4900 realtor_id=77 article_no=2644817617 sort_at=2026-08-21 00:52:23 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4900, realtor_id=77, draft_id=5271, article_no=2644817617 [DRAFT HTML CHECK] clipboard_len=14244, draft_len=14244, plain_len=346 ================================================================================ [INTEGRITY OK] queue_id=4900, draft_id=5271, article_no=2644817617 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 5,000/260' actual='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 5,000/260' [TITLE INPUT SUCCESS] attempt=1 title='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 5,000/260' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_05_2644817617_1788522184.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13868 plain_len= 346 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=5 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4900_2644817617_naver_compatible_v16_20260905_161251.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4900_2644817617_after_paste_20260905_161303.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4900_2644817617_after_paste_20260905_161303.txt [EDITOR DEBUG LEN] html= 177679 text= 2846 [EDITOR VALIDATE] html_len=177679 text_len=2846 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 5,000/260' actual='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 5,000/260' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224401900732 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224401900732 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5271 blog_id=crystal1154 blog_post_no=224401900732 url=https://blog.naver.com/crystal1154/224401900732 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224401900732 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224401900732 [PUBLISH ELAPSED] queue_id=4900 elapsed=66.1s avg=70.4s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 171, 77, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=188 [PIPELINE RUN FINISH] run_id=1917, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 7 [SUCCESS] 6 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-05 10:00:03] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-05 16:13:22] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 8928 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:8928:20260906100012 [PIPELINE RUN START] run_id=1924, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4960 realtor_id=148 article_no=2648050088 sort_at=2026-09-05 19:22:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4960, realtor_id=148, draft_id=5331, article_no=2648050088 [DRAFT HTML CHECK] clipboard_len=20265, draft_len=20265, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=4960, draft_id=5331, article_no=2648050088 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 7억 8,208' actual='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 7억 8,208' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 7억 8,208' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_02_2648050088_1788605230.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19882 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4960_2648050088_naver_compatible_v16_20260906_100048.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4960_2648050088_after_paste_20260906_100100.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4960_2648050088_after_paste_20260906_100100.txt [EDITOR DEBUG LEN] html= 228492 text= 3167 [EDITOR VALIDATE] html_len=228492 text_len=3167 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 7억 8,208' actual='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 7억 8,208' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224402429059 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224402429059 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5331 blog_id=khshim0915 blog_post_no=224402429059 url=https://blog.naver.com/khshim0915/224402429059 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224402429059 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224402429059 [PUBLISH ELAPSED] queue_id=4960 elapsed=66.3s avg=66.3s [SMART SLEEP CALC] remaining_seconds=28720 remaining_count=5 target_cycle=5744.0 avg_publish=66.3 base_sleep=5677.7 range=2838~2838 selected=2838 [SLEEP] 2838s before next queue [PUBLISH TARGET SELECTED] queue_id=4957 realtor_id=144 article_no=2648048216 sort_at=2026-09-05 19:18:07 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4957, realtor_id=144, draft_id=5328, article_no=2648048216 [DRAFT HTML CHECK] clipboard_len=15557, draft_len=15557, plain_len=565 ================================================================================ [INTEGRITY OK] queue_id=4957, draft_id=5328, article_no=2648048216 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FINAL URL] https://blog.naver.com/rjsep11?Redirect=Write&categoryNo=1 [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=rjsep11&Redirect=Write&redirect=Write&widgetTypeCall=true&categoryNo=1&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='아산배방우방아이유쉘2단지 213동 · 아파트 · 매매 · 3억 2,000' actual='아산배방우방아이유쉘2단지 213동 · 아파트 · 매매 · 3억 2,000' [TITLE INPUT SUCCESS] attempt=1 title='아산배방우방아이유쉘2단지 213동 · 아파트 · 매매 · 3억 2,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_03_2648048216_1788605184.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15179 plain_len= 565 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4957_2648048216_naver_compatible_v16_20260906_104912.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4957_2648048216_after_paste_20260906_104924.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4957_2648048216_after_paste_20260906_104924.txt [EDITOR DEBUG LEN] html= 196558 text= 3019 [EDITOR VALIDATE] html_len=196558 text_len=3019 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 420.1, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='아산배방우방아이유쉘2단지 213동 · 아파트 · 매매 · 3억 2,000' actual='아산배방우방아이유쉘2단지 213동 · 아파트 · 매매 · 3억 2,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/rjsep11/224402461884 [RESULT URL CHECK] https://blog.naver.com/rjsep11/224402461884 [PRIVATE QUEUE NONE] realtor_id=144 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5328 blog_id=rjsep11 blog_post_no=224402461884 url=https://blog.naver.com/rjsep11/224402461884 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/rjsep11/224402461884 [BLOG RESULT PARSED] blog_id=rjsep11 blog_post_no=224402461884 [PUBLISH ELAPSED] queue_id=4957 elapsed=65.8s avg=66.0s [SMART SLEEP CALC] remaining_seconds=25816 remaining_count=4 target_cycle=6454.0 avg_publish=66.0 base_sleep=6388.0 range=3193~3193 selected=3193 [SLEEP] 3193s before next queue [PUBLISH TARGET SELECTED] queue_id=4941 realtor_id=4 article_no=2647934157 sort_at=2026-09-05 18:57:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4941, realtor_id=4, draft_id=5312, article_no=2647934157 [DRAFT HTML CHECK] clipboard_len=19169, draft_len=19169, plain_len=546 ================================================================================ [INTEGRITY OK] queue_id=4941, draft_id=5312, article_no=2647934157 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 101동 · 아파트 · 매매 · 8억 8,000' actual='양정자이더샵SK뷰 101동 · 아파트 · 매매 · 8억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='양정자이더샵SK뷰 101동 · 아파트 · 매매 · 8억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_03_2647934157_1788605034.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18791 plain_len= 546 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=15 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4941_2647934157_naver_compatible_v16_20260906_114331.html [PREVIEW IMAGE COUNT] 15 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4941_2647934157_after_paste_20260906_114343.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4941_2647934157_after_paste_20260906_114343.txt [EDITOR DEBUG LEN] html= 220691 text= 2805 [EDITOR VALIDATE] html_len=220691 text_len=2805 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 101동 · 아파트 · 매매 · 8억 8,000' actual='양정자이더샵SK뷰 101동 · 아파트 · 매매 · 8억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224402499881 [RESULT URL CHECK] https://blog.naver.com/pjy287/224402499881 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5312 blog_id=pjy287 blog_post_no=224402499881 url=https://blog.naver.com/pjy287/224402499881 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224402499881 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224402499881 [PUBLISH ELAPSED] queue_id=4941 elapsed=65.9s avg=66.0s [SMART SLEEP CALC] remaining_seconds=22557 remaining_count=3 target_cycle=7519.0 avg_publish=66.0 base_sleep=7453.0 range=3726~3726 selected=3726 [SLEEP] 3726s before next queue [PUBLISH TARGET SELECTED] queue_id=4967 realtor_id=169 article_no=2647356738 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4967, realtor_id=169, draft_id=5338, article_no=2647356738 [DRAFT HTML CHECK] clipboard_len=14556, draft_len=14556, plain_len=559 ================================================================================ [INTEGRITY OK] queue_id=4967, draft_id=5338, article_no=2647356738 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 9억 5,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 9억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 502동 · 아파트 · 매매 · 9억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_06_2647356738_1788605313.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14180 plain_len= 559 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4967_2647356738_naver_compatible_v16_20260906_124643.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4967_2647356738_after_paste_20260906_124654.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4967_2647356738_after_paste_20260906_124654.txt [EDITOR DEBUG LEN] html= 184299 text= 3026 [EDITOR VALIDATE] html_len=184299 text_len=3026 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 502동 · 아파트 · 매매 · 9억 5,000' actual='반석5단지예미지 502동 · 아파트 · 매매 · 9억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224402543588 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224402543588 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5338 blog_id=goskh1010 blog_post_no=224402543588 url=https://blog.naver.com/goskh1010/224402543588 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224402543588 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224402543588 [PUBLISH ELAPSED] queue_id=4967 elapsed=65.3s avg=65.8s [SMART SLEEP CALC] remaining_seconds=18766 remaining_count=2 target_cycle=9383.0 avg_publish=65.8 base_sleep=9317.2 range=4658~4658 selected=4658 [SLEEP] 4658s before next queue [PUBLISH TARGET SELECTED] queue_id=4942 realtor_id=5 article_no=2645133967 sort_at=2026-08-22 23:23:56 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4942, realtor_id=5, draft_id=5313, article_no=2645133967 [DRAFT HTML CHECK] clipboard_len=15070, draft_len=15070, plain_len=328 ================================================================================ [INTEGRITY OK] queue_id=4942, draft_id=5313, article_no=2645133967 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='일반상가 · 상가 · 월세 · 1,000/55' actual='일반상가 · 상가 · 월세 · 1,000/55' [TITLE INPUT SUCCESS] attempt=1 title='일반상가 · 상가 · 월세 · 1,000/55' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_DARK_REC_PHOTO_LAYOUT_06_2645133967_1788605048.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14695 plain_len= 328 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4942_2645133967_naver_compatible_v16_20260906_140530.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4942_2645133967_after_paste_20260906_140541.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4942_2645133967_after_paste_20260906_140541.txt [EDITOR DEBUG LEN] html= 187665 text= 2849 [EDITOR VALIDATE] html_len=187665 text_len=2849 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='일반상가 · 상가 · 월세 · 1,000/55' actual='일반상가 · 상가 · 월세 · 1,000/55' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224402595437 [RESULT URL CHECK] https://blog.naver.com/boram8857/224402595437 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5313 blog_id=boram8857 blog_post_no=224402595437 url=https://blog.naver.com/boram8857/224402595437 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224402595437 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224402595437 [PUBLISH ELAPSED] queue_id=4942 elapsed=64.8s avg=65.6s [SMART SLEEP CALC] remaining_seconds=14038 remaining_count=1 target_cycle=14038.0 avg_publish=65.6 base_sleep=13972.4 range=6986~6986 selected=6986 [SLEEP] 6986s before next queue [PUBLISH TARGET SELECTED] queue_id=4950 realtor_id=77 article_no=2644814018 sort_at=2026-08-21 00:52:23 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4950, realtor_id=77, draft_id=5321, article_no=2644814018 [DRAFT HTML CHECK] clipboard_len=15418, draft_len=15418, plain_len=346 ================================================================================ [INTEGRITY OK] queue_id=4950, draft_id=5321, article_no=2644814018 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 2,000/120' actual='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 2,000/120' [TITLE INPUT SUCCESS] attempt=1 title='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 2,000/120' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_01_2644814018_1788605145.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15042 plain_len= 346 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=6 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4950_2644814018_naver_compatible_v16_20260906_160302.html [PREVIEW IMAGE COUNT] 6 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4950_2644814018_after_paste_20260906_160314.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4950_2644814018_after_paste_20260906_160314.txt [EDITOR DEBUG LEN] html= 187669 text= 2826 [EDITOR VALIDATE] html_len=187669 text_len=2826 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 2,000/120' actual='단지내상가 우미린트리쉐이드 근린생활시설 · 상가 · 월세 · 2,000/120' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224402681373 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224402681373 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5321 blog_id=crystal1154 blog_post_no=224402681373 url=https://blog.naver.com/crystal1154/224402681373 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224402681373 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224402681373 [PUBLISH ELAPSED] queue_id=4950 elapsed=66.2s avg=65.7s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=190 [PIPELINE RUN FINISH] run_id=1924, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 6 [SUCCESS] 6 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-06 10:00:12] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-06 16:03:33] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 19060 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:19060:20260907100002 [PIPELINE RUN START] run_id=1931, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=4992 realtor_id=148 article_no=2648049052 sort_at=2026-09-05 19:22:14 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4992, realtor_id=148, draft_id=5363, article_no=2648049052 [DRAFT HTML CHECK] clipboard_len=20318, draft_len=20318, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=4992, draft_id=5363, article_no=2648049052 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' actual='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2648049052_1788689200.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19940 plain_len= 555 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4992_2648049052_naver_compatible_v16_20260907_100038.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4992_2648049052_after_paste_20260907_100050.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4992_2648049052_after_paste_20260907_100050.txt [EDITOR DEBUG LEN] html= 228699 text= 3159 [EDITOR VALIDATE] html_len=228699 text_len=3159 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' actual='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224403311791 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224403311791 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5363 blog_id=khshim0915 blog_post_no=224403311791 url=https://blog.naver.com/khshim0915/224403311791 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224403311791 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224403311791 [PUBLISH ELAPSED] queue_id=4992 elapsed=66.3s avg=66.3s [SMART SLEEP CALC] remaining_seconds=28730 remaining_count=5 target_cycle=5746.0 avg_publish=66.3 base_sleep=5679.7 range=2839~2839 selected=2839 [SLEEP] 2839s before next queue [PUBLISH TARGET SELECTED] queue_id=4989 realtor_id=144 article_no=2647954244 sort_at=2026-09-05 19:18:07 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4989, realtor_id=144, draft_id=5360, article_no=2647954244 [DRAFT HTML CHECK] clipboard_len=15969, draft_len=15969, plain_len=546 ================================================================================ [INTEGRITY OK] queue_id=4989, draft_id=5360, article_no=2647954244 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_144.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=144 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ceaf2f4abdc14424874fe3bf696f60 [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ceaf2f4abdc14424874fe3bf696f60 [AUTO RELOGIN WAIT] 30/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ceaf2f4abdc14424874fe3bf696f60 [AUTO RELOGIN WAIT] 60/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=ceaf2f4abdc14424874fe3bf696f60 [AUTO RELOGIN ERROR] expired 자동 재로그인 예외: Page.wait_for_timeout: Target page, context or browser has been closed [SESSION HOLD] [SESSION_HOLD] realtor_id=144 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 자동 재로그인 예외: Page.wait_for_timeout: Target page, context or browser has been closed [PUBLISH ELAPSED] queue_id=4989 elapsed=76.4s avg=71.4s [SMART SLEEP CALC] remaining_seconds=25815 remaining_count=5 target_cycle=5163.0 avg_publish=71.4 base_sleep=5091.6 range=2545~2545 selected=2545 [SLEEP] 2545s before next queue [PUBLISH TARGET SELECTED] queue_id=4973 realtor_id=4 article_no=2647886946 sort_at=2026-09-05 18:57:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4973, realtor_id=4, draft_id=5344, article_no=2647886946 [DRAFT HTML CHECK] clipboard_len=14217, draft_len=14217, plain_len=525 ================================================================================ [INTEGRITY OK] queue_id=4973, draft_id=5344, article_no=2647886946 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정롯데캐슬프론티엘 103동 · 아파트분양권 · 전세 · 8억' actual='양정롯데캐슬프론티엘 103동 · 아파트분양권 · 전세 · 8억' [TITLE INPUT SUCCESS] attempt=1 title='양정롯데캐슬프론티엘 103동 · 아파트분양권 · 전세 · 8억' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_02_2647886946_1788688995.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13840 plain_len= 525 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4973_2647886946_naver_compatible_v16_20260907_113245.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4973_2647886946_after_paste_20260907_113256.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4973_2647886946_after_paste_20260907_113256.txt [EDITOR DEBUG LEN] html= 181094 text= 2663 [EDITOR VALIDATE] html_len=181094 text_len=2663 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정롯데캐슬프론티엘 103동 · 아파트분양권 · 전세 · 8억' actual='양정롯데캐슬프론티엘 103동 · 아파트분양권 · 전세 · 8억' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224403421475 [RESULT URL CHECK] https://blog.naver.com/pjy287/224403421475 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5344 blog_id=pjy287 blog_post_no=224403421475 url=https://blog.naver.com/pjy287/224403421475 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224403421475 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224403421475 [PUBLISH ELAPSED] queue_id=4973 elapsed=65.4s avg=69.4s [SMART SLEEP CALC] remaining_seconds=23204 remaining_count=4 target_cycle=5801.0 avg_publish=69.4 base_sleep=5731.6 range=2865~2865 selected=2865 [SLEEP] 2865s before next queue [PUBLISH TARGET SELECTED] queue_id=4994 realtor_id=169 article_no=2647354294 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4994, realtor_id=169, draft_id=5365, article_no=2647354294 [DRAFT HTML CHECK] clipboard_len=15542, draft_len=15542, plain_len=523 ================================================================================ [INTEGRITY OK] queue_id=4994, draft_id=5365, article_no=2647354294 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 506동 · 아파트 · 매매 · 7억 7,000' actual='반석5단지예미지 506동 · 아파트 · 매매 · 7억 7,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 506동 · 아파트 · 매매 · 7억 7,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_08_2647354294_1788689219.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15165 plain_len= 523 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4994_2647354294_naver_compatible_v16_20260907_122136.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4994_2647354294_after_paste_20260907_122147.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4994_2647354294_after_paste_20260907_122147.txt [EDITOR DEBUG LEN] html= 193619 text= 3269 [EDITOR VALIDATE] html_len=193619 text_len=3269 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 506동 · 아파트 · 매매 · 7억 7,000' actual='반석5단지예미지 506동 · 아파트 · 매매 · 7억 7,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224403476027 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224403476027 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5365 blog_id=goskh1010 blog_post_no=224403476027 url=https://blog.naver.com/goskh1010/224403476027 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224403476027 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224403476027 [PUBLISH ELAPSED] queue_id=4994 elapsed=66.2s avg=68.6s [SMART SLEEP CALC] remaining_seconds=20273 remaining_count=3 target_cycle=6757.7 avg_publish=68.6 base_sleep=6689.1 range=3344~3344 selected=3344 [SLEEP] 3344s before next queue [PUBLISH TARGET SELECTED] queue_id=4974 realtor_id=5 article_no=2645128168 sort_at=2026-08-21 23:28:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4974, realtor_id=5, draft_id=5345, article_no=2645128168 [DRAFT HTML CHECK] clipboard_len=15063, draft_len=15063, plain_len=560 ================================================================================ [INTEGRITY OK] queue_id=4974, draft_id=5345, article_no=2645128168 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 104동 · 아파트 · 월세 · 5,000/120' actual='한화포레나대전월평공원1단지 104동 · 아파트 · 월세 · 5,000/120' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 104동 · 아파트 · 월세 · 5,000/120' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2645128168_1788688998.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14687 plain_len= 560 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4974_2645128168_naver_compatible_v16_20260907_131826.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4974_2645128168_after_paste_20260907_131838.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4974_2645128168_after_paste_20260907_131838.txt [EDITOR DEBUG LEN] html= 185754 text= 3232 [EDITOR VALIDATE] html_len=185754 text_len=3232 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 104동 · 아파트 · 월세 · 5,000/120' actual='한화포레나대전월평공원1단지 104동 · 아파트 · 월세 · 5,000/120' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224403534568 [RESULT URL CHECK] https://blog.naver.com/boram8857/224403534568 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5345 blog_id=boram8857 blog_post_no=224403534568 url=https://blog.naver.com/boram8857/224403534568 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224403534568 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224403534568 [PUBLISH ELAPSED] queue_id=4974 elapsed=66.2s avg=68.1s [SMART SLEEP CALC] remaining_seconds=16862 remaining_count=2 target_cycle=8431.0 avg_publish=68.1 base_sleep=8362.9 range=4181~4181 selected=4181 [SLEEP] 4181s before next queue [PUBLISH TARGET SELECTED] queue_id=5007 realtor_id=77 article_no=2644642291 sort_at=2026-08-21 00:52:23 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5007, realtor_id=77, draft_id=5378, article_no=2644642291 [DRAFT HTML CHECK] clipboard_len=15961, draft_len=15961, plain_len=566 ================================================================================ [INTEGRITY OK] queue_id=5007, draft_id=5378, article_no=2644642291 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 6,962' actual='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 6,962' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 6,962' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_07_2644642291_1788758151.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15578 plain_len= 566 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5007_2644642291_naver_compatible_v16_20260907_142914.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5007_2644642291_after_paste_20260907_142925.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5007_2644642291_after_paste_20260907_142925.txt [EDITOR DEBUG LEN] html= 197165 text= 3266 [EDITOR VALIDATE] html_len=197165 text_len=3266 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 6,962' actual='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 6,962' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224403618099 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224403618099 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5378 blog_id=crystal1154 blog_post_no=224403618099 url=https://blog.naver.com/crystal1154/224403618099 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224403618099 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224403618099 [PUBLISH ELAPSED] queue_id=5007 elapsed=66.4s avg=67.8s [SMART SLEEP CALC] remaining_seconds=12615 remaining_count=1 target_cycle=12615.0 avg_publish=67.8 base_sleep=12547.2 range=6273~6273 selected=6273 [SLEEP] 6273s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 144, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=173 [PIPELINE RUN FINISH] run_id=1931, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 6 [SUCCESS] 5 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-07 10:00:02] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-07 16:14:18] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 11688 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:11688:20260908100018 [PIPELINE RUN START] run_id=1948, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5069 realtor_id=178 article_no=2647864305 sort_at=2026-09-08 09:26:38 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5069, realtor_id=178, draft_id=5440, article_no=2647864305 [DRAFT HTML CHECK] clipboard_len=15149, draft_len=15149, plain_len=577 ================================================================================ [INTEGRITY OK] queue_id=5069, draft_id=5440, article_no=2647864305 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_178.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=178 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN WAIT] 5/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=add9e1ccda384bc69aa64c06023638 [AUTO RELOGIN WAIT] 15/90 url=https://nid.naver.com/user2/help/idSafetyRelease?m=viewIdSafetyInfo&token_help=add9e1ccda384bc69aa64c06023638 [AUTO RELOGIN ERROR] expired 자동 재로그인 예외: Page.wait_for_timeout: Target page, context or browser has been closed [SESSION HOLD] [SESSION_HOLD] realtor_id=178 / 글쓰기 이동 중 로그인 페이지로 이동 / 자동복구 실패: 자동 재로그인 예외: Page.wait_for_timeout: Target page, context or browser has been closed [PUBLISH ELAPSED] queue_id=5069 elapsed=29.4s avg=29.4s [SMART SLEEP CALC] remaining_seconds=28751 remaining_count=5 target_cycle=5750.2 avg_publish=29.4 base_sleep=5720.8 range=2860~2860 selected=2860 [SLEEP] 2860s before next queue [PUBLISH TARGET SELECTED] queue_id=5065 realtor_id=148 article_no=2648321191 sort_at=2026-09-07 18:42:07 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5065, realtor_id=148, draft_id=5436, article_no=2648321191 [DRAFT HTML CHECK] clipboard_len=19461, draft_len=19461, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=5065, draft_id=5436, article_no=2648321191 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 6,365' actual='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 6,365' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 6,365' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2648321191_1788828696.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19078 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=16 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5065_2648321191_naver_compatible_v16_20260908_104904.html [PREVIEW IMAGE COUNT] 16 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5065_2648321191_after_paste_20260908_104915.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5065_2648321191_after_paste_20260908_104915.txt [EDITOR DEBUG LEN] html= 217259 text= 3088 [EDITOR VALIDATE] html_len=217259 text_len=3088 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 6,365' actual='둔산엘리프더센트럴 101동 · 아파트분양권 · 매매 · 6억 6,365' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224404547765 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224404547765 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5436 blog_id=khshim0915 blog_post_no=224404547765 url=https://blog.naver.com/khshim0915/224404547765 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224404547765 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224404547765 [PUBLISH ELAPSED] queue_id=5065 elapsed=66.1s avg=47.7s [SMART SLEEP CALC] remaining_seconds=25825 remaining_count=4 target_cycle=6456.2 avg_publish=47.7 base_sleep=6408.5 range=3204~3204 selected=3204 [SLEEP] 3204s before next queue [PUBLISH TARGET SELECTED] queue_id=5032 realtor_id=77 article_no=2648379858 sort_at=2026-09-07 18:31:48 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5032, realtor_id=77, draft_id=5403, article_no=2648379858 [DRAFT HTML CHECK] clipboard_len=15167, draft_len=15167, plain_len=558 ================================================================================ [INTEGRITY OK] queue_id=5032, draft_id=5403, article_no=2648379858 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='대전해모로더센트라 101동 · 아파트 · 월세 · 5,000/140' actual='대전해모로더센트라 101동 · 아파트 · 월세 · 5,000/140' [TITLE INPUT SUCCESS] attempt=1 title='대전해모로더센트라 101동 · 아파트 · 월세 · 5,000/140' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_08_2648379858_1788775015.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14789 plain_len= 558 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5032_2648379858_naver_compatible_v16_20260908_114334.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5032_2648379858_after_paste_20260908_114345.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5032_2648379858_after_paste_20260908_114345.txt [EDITOR DEBUG LEN] html= 193604 text= 2819 [EDITOR VALIDATE] html_len=193604 text_len=2819 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='대전해모로더센트라 101동 · 아파트 · 월세 · 5,000/140' actual='대전해모로더센트라 101동 · 아파트 · 월세 · 5,000/140' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224404613892 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224404613892 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5403 blog_id=crystal1154 blog_post_no=224404613892 url=https://blog.naver.com/crystal1154/224404613892 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224404613892 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224404613892 [PUBLISH ELAPSED] queue_id=5032 elapsed=65.6s avg=53.7s [SMART SLEEP CALC] remaining_seconds=22555 remaining_count=3 target_cycle=7518.3 avg_publish=53.7 base_sleep=7464.6 range=3732~3732 selected=3732 [SLEEP] 3732s before next queue [PUBLISH TARGET SELECTED] queue_id=5046 realtor_id=4 article_no=2648284864 sort_at=2026-09-07 18:17:26 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5046, realtor_id=4, draft_id=5417, article_no=2648284864 [DRAFT HTML CHECK] clipboard_len=19504, draft_len=19504, plain_len=525 ================================================================================ [INTEGRITY OK] queue_id=5046, draft_id=5417, article_no=2648284864 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='아틀리에933(주상복합) 1동 · 아파트 · 전세 · 4억 5,000' actual='아틀리에933(주상복합) 1동 · 아파트 · 전세 · 4억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='아틀리에933(주상복합) 1동 · 아파트 · 전세 · 4억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2648284864_1788828529.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19128 plain_len= 525 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=18 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5046_2648284864_naver_compatible_v16_20260908_124652.html [PREVIEW IMAGE COUNT] 18 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5046_2648284864_after_paste_20260908_124703.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5046_2648284864_after_paste_20260908_124703.txt [EDITOR DEBUG LEN] html= 215408 text= 2676 [EDITOR VALIDATE] html_len=215408 text_len=2676 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 800, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='아틀리에933(주상복합) 1동 · 아파트 · 전세 · 4억 5,000' actual='아틀리에933(주상복합) 1동 · 아파트 · 전세 · 4억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224404680312 [RESULT URL CHECK] https://blog.naver.com/pjy287/224404680312 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5417 blog_id=pjy287 blog_post_no=224404680312 url=https://blog.naver.com/pjy287/224404680312 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224404680312 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224404680312 [PUBLISH ELAPSED] queue_id=5046 elapsed=66.0s avg=56.8s [SMART SLEEP CALC] remaining_seconds=18757 remaining_count=2 target_cycle=9378.5 avg_publish=56.8 base_sleep=9321.7 range=4660~4660 selected=4660 [SLEEP] 4660s before next queue [PUBLISH TARGET SELECTED] queue_id=5043 realtor_id=169 article_no=2647255029 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5043, realtor_id=169, draft_id=5414, article_no=2647255029 [DRAFT HTML CHECK] clipboard_len=18729, draft_len=18729, plain_len=539 ================================================================================ [INTEGRITY OK] queue_id=5043, draft_id=5414, article_no=2647255029 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 503동 · 아파트 · 매매 · 7억 8,000' actual='반석5단지예미지 503동 · 아파트 · 매매 · 7억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 503동 · 아파트 · 매매 · 7억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_02_2647255029_1788775085.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18351 plain_len= 539 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=13 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5043_2647255029_naver_compatible_v16_20260908_140540.html [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5043_2647255029_after_paste_20260908_140551.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5043_2647255029_after_paste_20260908_140551.txt [EDITOR DEBUG LEN] html= 218869 text= 2871 [EDITOR VALIDATE] html_len=218869 text_len=2871 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 451, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 499, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 508, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 503동 · 아파트 · 매매 · 7억 8,000' actual='반석5단지예미지 503동 · 아파트 · 매매 · 7억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224404769085 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224404769085 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5414 blog_id=goskh1010 blog_post_no=224404769085 url=https://blog.naver.com/goskh1010/224404769085 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224404769085 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224404769085 [PUBLISH ELAPSED] queue_id=5043 elapsed=67.8s avg=59.0s [SMART SLEEP CALC] remaining_seconds=14029 remaining_count=1 target_cycle=14029.0 avg_publish=59.0 base_sleep=13970.0 range=6985~6985 selected=6985 [SLEEP] 6985s before next queue [PUBLISH TARGET SELECTED] queue_id=5047 realtor_id=5 article_no=2643999046 sort_at=2026-08-18 23:20:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5047, realtor_id=5, draft_id=5418, article_no=2643999046 [DRAFT HTML CHECK] clipboard_len=15961, draft_len=15961, plain_len=538 ================================================================================ [INTEGRITY OK] queue_id=5047, draft_id=5418, article_no=2643999046 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 8,339' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 8,339' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 8,339' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_04_2643999046_1788828531.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15583 plain_len= 538 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5047_2643999046_naver_compatible_v16_20260908_160314.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5047_2643999046_after_paste_20260908_160325.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5047_2643999046_after_paste_20260908_160325.txt [EDITOR DEBUG LEN] html= 197406 text= 3480 [EDITOR VALIDATE] html_len=197406 text_len=3480 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 8,339' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 8,339' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224404918079 [RESULT URL CHECK] https://blog.naver.com/boram8857/224404918079 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5418 blog_id=boram8857 blog_post_no=224404918079 url=https://blog.naver.com/boram8857/224404918079 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224404918079 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224404918079 [PUBLISH ELAPSED] queue_id=5047 elapsed=68.6s avg=60.6s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 178, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=132 [PIPELINE RUN FINISH] run_id=1948, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 6 [SUCCESS] 5 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-08 10:00:18] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-08 16:03:45] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 8456 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:8456:20260909100007 [PIPELINE RUN START] run_id=1960, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5187 realtor_id=148 article_no=2648557001 sort_at=2026-09-08 20:58:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5187, realtor_id=148, draft_id=5560, article_no=2648557001 [DRAFT HTML CHECK] clipboard_len=19850, draft_len=19850, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=5187, draft_id=5560, article_no=2648557001 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 6억 5,770' actual='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 6억 5,770' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 6억 5,770' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_DARK_REC_PHOTO_LAYOUT_06_2648557001_1788875420.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19475 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5187_2648557001_naver_compatible_v16_20260909_100043.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5187_2648557001_after_paste_20260909_100055.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5187_2648557001_after_paste_20260909_100055.txt [EDITOR DEBUG LEN] html= 219844 text= 3113 [EDITOR VALIDATE] html_len=219844 text_len=3113 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 6억 5,770' actual='둔산엘리프더센트럴 109동 · 아파트분양권 · 매매 · 6억 5,770' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224405672217 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224405672217 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5560 blog_id=khshim0915 blog_post_no=224405672217 url=https://blog.naver.com/khshim0915/224405672217 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224405672217 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224405672217 [PUBLISH ELAPSED] queue_id=5187 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=28725 remaining_count=4 target_cycle=7181.2 avg_publish=66.9 base_sleep=7114.4 range=3557~3557 selected=3557 [SLEEP] 3557s before next queue [PUBLISH TARGET SELECTED] queue_id=5133 realtor_id=77 article_no=2648383411 sort_at=2026-09-08 19:43:31 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5133, realtor_id=77, draft_id=5505, article_no=2648383411 [DRAFT HTML CHECK] clipboard_len=15715, draft_len=15715, plain_len=562 ================================================================================ [INTEGRITY OK] queue_id=5133, draft_id=5505, article_no=2648383411 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 502동 · 아파트분양권 · 매매 · 11억 1,840' actual='힐스테이트도안리버파크5단지 502동 · 아파트분양권 · 매매 · 11억 1,840' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크5단지 502동 · 아파트분양권 · 매매 · 11억 1,840' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2648383411_1788874879.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15337 plain_len= 562 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5133_2648383411_naver_compatible_v16_20260909_110107.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5133_2648383411_after_paste_20260909_110118.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5133_2648383411_after_paste_20260909_110118.txt [EDITOR DEBUG LEN] html= 196623 text= 3082 [EDITOR VALIDATE] html_len=196623 text_len=3082 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 502동 · 아파트분양권 · 매매 · 11억 1,840' actual='힐스테이트도안리버파크5단지 502동 · 아파트분양권 · 매매 · 11억 1,840' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224405742825 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224405742825 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5505 blog_id=crystal1154 blog_post_no=224405742825 url=https://blog.naver.com/crystal1154/224405742825 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224405742825 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224405742825 [PUBLISH ELAPSED] queue_id=5133 elapsed=66.3s avg=66.6s [SMART SLEEP CALC] remaining_seconds=25102 remaining_count=3 target_cycle=8367.3 avg_publish=66.6 base_sleep=8300.7 range=4150~4150 selected=4150 [SLEEP] 4150s before next queue [PUBLISH TARGET SELECTED] queue_id=5074 realtor_id=4 article_no=2648531262 sort_at=2026-09-08 18:16:40 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5074, realtor_id=4, draft_id=5445, article_no=2648531262 [DRAFT HTML CHECK] clipboard_len=15407, draft_len=15407, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=5074, draft_id=5445, article_no=2648531262 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 207동 · 아파트 · 매매 · 7억 5,000' actual='양정자이더샵SK뷰 207동 · 아파트 · 매매 · 7억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='양정자이더샵SK뷰 207동 · 아파트 · 매매 · 7억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_02_2648531262_1788874292.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15030 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5074_2648531262_naver_compatible_v16_20260909_121123.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5074_2648531262_after_paste_20260909_121134.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5074_2648531262_after_paste_20260909_121134.txt [EDITOR DEBUG LEN] html= 188912 text= 2789 [EDITOR VALIDATE] html_len=188912 text_len=2789 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 207동 · 아파트 · 매매 · 7억 5,000' actual='양정자이더샵SK뷰 207동 · 아파트 · 매매 · 7억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224405824297 [RESULT URL CHECK] https://blog.naver.com/pjy287/224405824297 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5445 blog_id=pjy287 blog_post_no=224405824297 url=https://blog.naver.com/pjy287/224405824297 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224405824297 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224405824297 [PUBLISH ELAPSED] queue_id=5074 elapsed=65.6s avg=66.3s [SMART SLEEP CALC] remaining_seconds=20886 remaining_count=2 target_cycle=10443.0 avg_publish=66.3 base_sleep=10376.7 range=5188~5188 selected=5188 [SLEEP] 5188s before next queue [PUBLISH TARGET SELECTED] queue_id=5019 realtor_id=169 article_no=2647353948 sort_at=2026-09-02 22:20:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5019, realtor_id=169, draft_id=5390, article_no=2647353948 [DRAFT HTML CHECK] clipboard_len=15532, draft_len=15532, plain_len=527 ================================================================================ [INTEGRITY OK] queue_id=5019, draft_id=5390, article_no=2647353948 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 506동 · 아파트 · 매매 · 7억 8,000' actual='반석5단지예미지 506동 · 아파트 · 매매 · 7억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='반석5단지예미지 506동 · 아파트 · 매매 · 7억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_02_2647353948_1788758244.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15149 plain_len= 527 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5019_2647353948_naver_compatible_v16_20260909_133857.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5019_2647353948_after_paste_20260909_133909.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5019_2647353948_after_paste_20260909_133909.txt [EDITOR DEBUG LEN] html= 186036 text= 3253 [EDITOR VALIDATE] html_len=186036 text_len=3253 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석5단지예미지 506동 · 아파트 · 매매 · 7억 8,000' actual='반석5단지예미지 506동 · 아파트 · 매매 · 7억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224405914486 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224405914486 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5390 blog_id=goskh1010 blog_post_no=224405914486 url=https://blog.naver.com/goskh1010/224405914486 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224405914486 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224405914486 [PUBLISH ELAPSED] queue_id=5019 elapsed=66.7s avg=66.4s [SMART SLEEP CALC] remaining_seconds=15631 remaining_count=1 target_cycle=15631.0 avg_publish=66.4 base_sleep=15564.6 range=7782~7782 selected=7782 [SLEEP] 7782s before next queue [PUBLISH TARGET SELECTED] queue_id=5023 realtor_id=5 article_no=2643996876 sort_at=2026-08-18 23:20:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5023, realtor_id=5, draft_id=5394, article_no=2643996876 [DRAFT HTML CHECK] clipboard_len=15731, draft_len=15731, plain_len=535 ================================================================================ [INTEGRITY OK] queue_id=5023, draft_id=5394, article_no=2643996876 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 108동 · 아파트 · 매매 · 4억 9,205' actual='한화포레나대전월평공원1단지 108동 · 아파트 · 매매 · 4억 9,205' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 108동 · 아파트 · 매매 · 4억 9,205' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_02_2643996876_1788774954.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15353 plain_len= 535 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5023_2643996876_naver_compatible_v16_20260909_154947.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5023_2643996876_after_paste_20260909_154958.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5023_2643996876_after_paste_20260909_154958.txt [EDITOR DEBUG LEN] html= 189365 text= 3284 [EDITOR VALIDATE] html_len=189365 text_len=3284 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 108동 · 아파트 · 매매 · 4억 9,205' actual='한화포레나대전월평공원1단지 108동 · 아파트 · 매매 · 4억 9,205' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224406078821 [RESULT URL CHECK] https://blog.naver.com/boram8857/224406078821 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5394 blog_id=boram8857 blog_post_no=224406078821 url=https://blog.naver.com/boram8857/224406078821 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224406078821 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224406078821 [PUBLISH ELAPSED] queue_id=5023 elapsed=67.3s avg=66.6s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=146 [PIPELINE RUN FINISH] run_id=1960, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-09 10:00:06] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-09 15:50:18] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 2844 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:2844:20260910100015 [PIPELINE RUN START] run_id=1970, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5041 realtor_id=148 article_no=2648323344 sort_at=2026-09-07 18:42:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5041, realtor_id=148, draft_id=5412, article_no=2648323344 [DRAFT HTML CHECK] clipboard_len=20347, draft_len=20347, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=5041, draft_id=5412, article_no=2648323344 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' actual='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_07_2648323344_1788775080.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19970 plain_len= 555 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=17 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5041_2648323344_naver_compatible_v16_20260910_100051.html [PREVIEW IMAGE COUNT] 17 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5041_2648323344_after_paste_20260910_100103.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5041_2648323344_after_paste_20260910_100103.txt [EDITOR DEBUG LEN] html= 221201 text= 3203 [EDITOR VALIDATE] html_len=221201 text_len=3203 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' actual='둔산엘리프더센트럴 108동 · 아파트분양권 · 매매 · 7억 4,611' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224406841135 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224406841135 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5412 blog_id=khshim0915 blog_post_no=224406841135 url=https://blog.naver.com/khshim0915/224406841135 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224406841135 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224406841135 [PUBLISH ELAPSED] queue_id=5041 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=28717 remaining_count=4 target_cycle=7179.2 avg_publish=66.9 base_sleep=7112.4 range=3556~3556 selected=3556 [SLEEP] 3556s before next queue [PUBLISH TARGET SELECTED] queue_id=5022 realtor_id=4 article_no=2648328330 sort_at=2026-09-07 18:17:26 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5022, realtor_id=4, draft_id=5393, article_no=2648328330 [DRAFT HTML CHECK] clipboard_len=14300, draft_len=14300, plain_len=574 ================================================================================ [INTEGRITY OK] queue_id=5022, draft_id=5393, article_no=2648328330 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='서면4차봄여름가을겨울(주상복합) 104동 · 아파트분양권 · 전세 · 2억 5,000' actual='서면4차봄여름가을겨울(주상복합) 104동 · 아파트분양권 · 전세 · 2억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='서면4차봄여름가을겨울(주상복합) 104동 · 아파트분양권 · 전세 · 2억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_04_2648328330_1788774951.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13923 plain_len= 574 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5022_2648328330_naver_compatible_v16_20260910_110115.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5022_2648328330_after_paste_20260910_110126.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5022_2648328330_after_paste_20260910_110126.txt [EDITOR DEBUG LEN] html= 173740 text= 2750 [EDITOR VALIDATE] html_len=173740 text_len=2750 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='서면4차봄여름가을겨울(주상복합) 104동 · 아파트분양권 · 전세 · 2억 5,000' actual='서면4차봄여름가을겨울(주상복합) 104동 · 아파트분양권 · 전세 · 2억 5,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224406912236 [RESULT URL CHECK] https://blog.naver.com/pjy287/224406912236 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5393 blog_id=pjy287 blog_post_no=224406912236 url=https://blog.naver.com/pjy287/224406912236 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224406912236 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224406912236 [PUBLISH ELAPSED] queue_id=5022 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=25094 remaining_count=3 target_cycle=8364.7 avg_publish=66.9 base_sleep=8297.8 range=4148~4148 selected=4148 [SLEEP] 4148s before next queue [PUBLISH TARGET SELECTED] queue_id=5207 realtor_id=169 article_no=2645731262 sort_at=2026-09-01 02:38:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5207, realtor_id=169, draft_id=5580, article_no=2645731262 [DRAFT HTML CHECK] clipboard_len=17700, draft_len=17700, plain_len=526 ================================================================================ [INTEGRITY OK] queue_id=5207, draft_id=5580, article_no=2645731262 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='단독 없음 · 단독/다가구 · 월세 · 500/50' actual='단독 없음 · 단독/다가구 · 월세 · 500/50' [TITLE INPUT SUCCESS] attempt=1 title='단독 없음 · 단독/다가구 · 월세 · 500/50' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_07_2645731262_1788875624.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 17322 plain_len= 526 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=13 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5207_2645731262_naver_compatible_v16_20260910_121128.html [PREVIEW IMAGE COUNT] 13 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5207_2645731262_after_paste_20260910_121139.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5207_2645731262_after_paste_20260910_121139.txt [EDITOR DEBUG LEN] html= 193419 text= 2762 [EDITOR VALIDATE] html_len=193419 text_len=2762 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='단독 없음 · 단독/다가구 · 월세 · 500/50' actual='단독 없음 · 단독/다가구 · 월세 · 500/50' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224406994014 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224406994014 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5580 blog_id=goskh1010 blog_post_no=224406994014 url=https://blog.naver.com/goskh1010/224406994014 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224406994014 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224406994014 [PUBLISH ELAPSED] queue_id=5207 elapsed=65.0s avg=66.3s [SMART SLEEP CALC] remaining_seconds=20881 remaining_count=2 target_cycle=10440.5 avg_publish=66.3 base_sleep=10374.2 range=5187~5187 selected=5187 [SLEEP] 5187s before next queue [PUBLISH TARGET SELECTED] queue_id=5056 realtor_id=77 article_no=2644642089 sort_at=2026-08-21 00:52:23 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5056, realtor_id=77, draft_id=5427, article_no=2644642089 [DRAFT HTML CHECK] clipboard_len=15942, draft_len=15942, plain_len=578 ================================================================================ [INTEGRITY OK] queue_id=5056, draft_id=5427, article_no=2644642089 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 206동 · 아파트분양권 · 매매 · 7억 7,874' actual='힐스테이트도안리버파크2단지 206동 · 아파트분양권 · 매매 · 7억 7,874' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크2단지 206동 · 아파트분양권 · 매매 · 7억 7,874' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_06_2644642089_1788828622.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15565 plain_len= 578 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5056_2644642089_naver_compatible_v16_20260910_133901.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5056_2644642089_after_paste_20260910_133913.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5056_2644642089_after_paste_20260910_133913.txt [EDITOR DEBUG LEN] html= 189685 text= 3253 [EDITOR VALIDATE] html_len=189685 text_len=3253 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 206동 · 아파트분양권 · 매매 · 7억 7,874' actual='힐스테이트도안리버파크2단지 206동 · 아파트분양권 · 매매 · 7억 7,874' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224407087045 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224407087045 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5427 blog_id=crystal1154 blog_post_no=224407087045 url=https://blog.naver.com/crystal1154/224407087045 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224407087045 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224407087045 [PUBLISH ELAPSED] queue_id=5056 elapsed=66.2s avg=66.2s [SMART SLEEP CALC] remaining_seconds=15627 remaining_count=1 target_cycle=15627.0 avg_publish=66.2 base_sleep=15560.8 range=7780~7780 selected=7780 [SLEEP] 7780s before next queue [PUBLISH TARGET SELECTED] queue_id=4998 realtor_id=5 article_no=2643997281 sort_at=2026-08-18 23:20:06 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4998, realtor_id=5, draft_id=5369, article_no=2643997281 [DRAFT HTML CHECK] clipboard_len=15766, draft_len=15766, plain_len=530 ================================================================================ [INTEGRITY OK] queue_id=4998, draft_id=5369, article_no=2643997281 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 5억 975' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 5억 975' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 5억 975' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2643997281_1788758052.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15390 plain_len= 530 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4998_2643997281_naver_compatible_v16_20260910_154947.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4998_2643997281_after_paste_20260910_154959.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4998_2643997281_after_paste_20260910_154959.txt [EDITOR DEBUG LEN] html= 189402 text= 3321 [EDITOR VALIDATE] html_len=189402 text_len=3321 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 5억 975' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 5억 975' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224407247709 [RESULT URL CHECK] https://blog.naver.com/boram8857/224407247709 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5369 blog_id=boram8857 blog_post_no=224407247709 url=https://blog.naver.com/boram8857/224407247709 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224407247709 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224407247709 [PUBLISH ELAPSED] queue_id=4998 elapsed=65.9s avg=66.2s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=115 [PIPELINE RUN FINISH] run_id=1970, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-10 10:00:15] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-10 15:50:18] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 3496 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:3496:20260911100009 [PIPELINE RUN START] run_id=1974, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5017 realtor_id=148 article_no=2648190920 sort_at=2026-09-07 12:13:01 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5017, realtor_id=148, draft_id=5388, article_no=2648190920 [DRAFT HTML CHECK] clipboard_len=19484, draft_len=19484, plain_len=555 ================================================================================ [INTEGRITY OK] queue_id=5017, draft_id=5388, article_no=2648190920 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 110동 · 아파트분양권 · 매매 · 6억 5,370' actual='둔산엘리프더센트럴 110동 · 아파트분양권 · 매매 · 6억 5,370' [TITLE INPUT SUCCESS] attempt=1 title='둔산엘리프더센트럴 110동 · 아파트분양권 · 매매 · 6억 5,370' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_07_2648190920_1788758239.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 19107 plain_len= 555 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=16 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5017_2648190920_naver_compatible_v16_20260911_100046.html [PREVIEW IMAGE COUNT] 16 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5017_2648190920_after_paste_20260911_100057.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5017_2648190920_after_paste_20260911_100057.txt [EDITOR DEBUG LEN] html= 210021 text= 3088 [EDITOR VALIDATE] html_len=210021 text_len=3088 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 1573.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 498.9, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='둔산엘리프더센트럴 110동 · 아파트분양권 · 매매 · 6억 5,370' actual='둔산엘리프더센트럴 110동 · 아파트분양권 · 매매 · 6억 5,370' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224408008157 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224408008157 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5388 blog_id=khshim0915 blog_post_no=224408008157 url=https://blog.naver.com/khshim0915/224408008157 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224408008157 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224408008157 [PUBLISH ELAPSED] queue_id=5017 elapsed=67.2s avg=67.2s [SMART SLEEP CALC] remaining_seconds=28723 remaining_count=4 target_cycle=7180.8 avg_publish=67.2 base_sleep=7113.6 range=3556~3556 selected=3556 [SLEEP] 3556s before next queue [PUBLISH TARGET SELECTED] queue_id=4997 realtor_id=4 article_no=2648194752 sort_at=2026-09-07 11:48:48 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4997, realtor_id=4, draft_id=5368, article_no=2648194752 [DRAFT HTML CHECK] clipboard_len=15342, draft_len=15342, plain_len=566 ================================================================================ [INTEGRITY OK] queue_id=4997, draft_id=5368, article_no=2648194752 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='두산위브더제니스센트럴양정 102동 · 아파트 · 매매 · 5억 8,000' actual='두산위브더제니스센트럴양정 102동 · 아파트 · 매매 · 5억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='두산위브더제니스센트럴양정 102동 · 아파트 · 매매 · 5억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_PRICE_BAND_PHOTO_LAYOUT_01_2648194752_1788758050.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14965 plain_len= 566 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4997_2648194752_naver_compatible_v16_20260911_110108.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4997_2648194752_after_paste_20260911_110120.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4997_2648194752_after_paste_20260911_110120.txt [EDITOR DEBUG LEN] html= 188017 text= 2843 [EDITOR VALIDATE] html_len=188017 text_len=2843 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='두산위브더제니스센트럴양정 102동 · 아파트 · 매매 · 5억 8,000' actual='두산위브더제니스센트럴양정 102동 · 아파트 · 매매 · 5억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224408078940 [RESULT URL CHECK] https://blog.naver.com/pjy287/224408078940 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5368 blog_id=pjy287 blog_post_no=224408078940 url=https://blog.naver.com/pjy287/224408078940 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224408078940 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224408078940 [PUBLISH ELAPSED] queue_id=4997 elapsed=66.4s avg=66.8s [SMART SLEEP CALC] remaining_seconds=25100 remaining_count=3 target_cycle=8366.7 avg_publish=66.8 base_sleep=8299.9 range=4149~4149 selected=4149 [SLEEP] 4149s before next queue [PUBLISH TARGET SELECTED] queue_id=5067 realtor_id=169 article_no=2645731523 sort_at=2026-09-01 02:38:18 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5067, realtor_id=169, draft_id=5438, article_no=2645731523 [DRAFT HTML CHECK] clipboard_len=15187, draft_len=15187, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=5067, draft_id=5438, article_no=2645731523 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='단독 없음 · 단독/다가구 · 월세 · 500/50' actual='단독 없음 · 단독/다가구 · 월세 · 500/50' [TITLE INPUT SUCCESS] attempt=1 title='단독 없음 · 단독/다가구 · 월세 · 500/50' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_02_2645731523_1788828739.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14809 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=7 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5067_2645731523_naver_compatible_v16_20260911_121123.html [PREVIEW IMAGE COUNT] 7 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5067_2645731523_after_paste_20260911_121134.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5067_2645731523_after_paste_20260911_121134.txt [EDITOR DEBUG LEN] html= 177159 text= 2744 [EDITOR VALIDATE] html_len=177159 text_len=2744 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 600, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='단독 없음 · 단독/다가구 · 월세 · 500/50' actual='단독 없음 · 단독/다가구 · 월세 · 500/50' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224408162052 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224408162052 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5438 blog_id=goskh1010 blog_post_no=224408162052 url=https://blog.naver.com/goskh1010/224408162052 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224408162052 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224408162052 [PUBLISH ELAPSED] queue_id=5067 elapsed=65.2s avg=66.3s [SMART SLEEP CALC] remaining_seconds=20886 remaining_count=2 target_cycle=10443.0 avg_publish=66.3 base_sleep=10376.7 range=5188~5188 selected=5188 [SLEEP] 5188s before next queue [PUBLISH TARGET SELECTED] queue_id=4982 realtor_id=77 article_no=2644810962 sort_at=2026-08-21 00:52:23 today_published_count=0 ================================================================================ [QUEUE START] queue_id=4982, realtor_id=77, draft_id=5353, article_no=2644810962 [DRAFT HTML CHECK] clipboard_len=15793, draft_len=15793, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=4982, draft_id=5353, article_no=2644810962 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='도안푸르지오디아델31블록 3103동 · 아파트분양권 · 매매 · 9억 9,320' actual='도안푸르지오디아델31블록 3103동 · 아파트분양권 · 매매 · 9억 9,320' [TITLE INPUT SUCCESS] attempt=1 title='도안푸르지오디아델31블록 3103동 · 아파트분양권 · 매매 · 9억 9,320' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_01_2644810962_1788689099.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15410 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_4982_2644810962_naver_compatible_v16_20260911_133857.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4982_2644810962_after_paste_20260911_133909.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_4982_2644810962_after_paste_20260911_133909.txt [EDITOR DEBUG LEN] html= 189257 text= 3134 [EDITOR VALIDATE] html_len=189257 text_len=3134 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='도안푸르지오디아델31블록 3103동 · 아파트분양권 · 매매 · 9억 9,320' actual='도안푸르지오디아델31블록 3103동 · 아파트분양권 · 매매 · 9억 9,320' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224408249561 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224408249561 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5353 blog_id=crystal1154 blog_post_no=224408249561 url=https://blog.naver.com/crystal1154/224408249561 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224408249561 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224408249561 [PUBLISH ELAPSED] queue_id=4982 elapsed=66.5s avg=66.3s [SMART SLEEP CALC] remaining_seconds=15631 remaining_count=1 target_cycle=15631.0 avg_publish=66.3 base_sleep=15564.7 range=7782~7782 selected=7782 [SLEEP] 7782s before next queue [PUBLISH TARGET SELECTED] queue_id=5075 realtor_id=5 article_no=2643998376 sort_at=2026-08-15 23:18:39 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5075, realtor_id=5, draft_id=5446, article_no=2643998376 [DRAFT HTML CHECK] clipboard_len=18669, draft_len=18669, plain_len=551 ================================================================================ [INTEGRITY OK] queue_id=5075, draft_id=5446, article_no=2643998376 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='맑은아침 107동 · 아파트 · 매매 · 4억 4,000' actual='맑은아침 107동 · 아파트 · 매매 · 4억 4,000' [TITLE INPUT SUCCESS] attempt=1 title='맑은아침 107동 · 아파트 · 매매 · 4억 4,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_05_2643998376_1788874294.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 18291 plain_len= 551 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=9 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=11 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5075_2643998376_naver_compatible_v16_20260911_154946.html [PREVIEW IMAGE COUNT] 11 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5075_2643998376_after_paste_20260911_154957.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5075_2643998376_after_paste_20260911_154957.txt [EDITOR DEBUG LEN] html= 212568 text= 3057 [EDITOR VALIDATE] html_len=212568 text_len=3057 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.1, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 800, "height": 1067, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 590.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='맑은아침 107동 · 아파트 · 매매 · 4억 4,000' actual='맑은아침 107동 · 아파트 · 매매 · 4억 4,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224408401846 [RESULT URL CHECK] https://blog.naver.com/boram8857/224408401846 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5446 blog_id=boram8857 blog_post_no=224408401846 url=https://blog.naver.com/boram8857/224408401846 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224408401846 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224408401846 [PUBLISH ELAPSED] queue_id=5075 elapsed=66.1s avg=66.3s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=110 [PIPELINE RUN FINISH] run_id=1974, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-11 10:00:09] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-11 15:50:17] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 13480 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:13480:20260912100016 [PIPELINE RUN START] run_id=1986, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5499 realtor_id=169 article_no=2649207990 sort_at=2026-09-11 21:23:19 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5499, realtor_id=169, draft_id=5876, article_no=2649207990 [DRAFT HTML CHECK] clipboard_len=15074, draft_len=15074, plain_len=529 ================================================================================ [INTEGRITY OK] queue_id=5499, draft_id=5876, article_no=2649207990 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석7단지삼부르네상스 704동 · 아파트 · 매매 · 3억 9,500' actual='반석7단지삼부르네상스 704동 · 아파트 · 매매 · 3억 9,500' [TITLE INPUT SUCCESS] attempt=1 title='반석7단지삼부르네상스 704동 · 아파트 · 매매 · 3억 9,500' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_07_2649207990_1789135762.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14696 plain_len= 529 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5499_2649207990_naver_compatible_v16_20260912_100053.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5499_2649207990_after_paste_20260912_100104.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5499_2649207990_after_paste_20260912_100104.txt [EDITOR DEBUG LEN] html= 184692 text= 2886 [EDITOR VALIDATE] html_len=184692 text_len=2886 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석7단지삼부르네상스 704동 · 아파트 · 매매 · 3억 9,500' actual='반석7단지삼부르네상스 704동 · 아파트 · 매매 · 3억 9,500' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224409128059 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224409128059 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5876 blog_id=goskh1010 blog_post_no=224409128059 url=https://blog.naver.com/goskh1010/224409128059 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224409128059 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224409128059 [PUBLISH ELAPSED] queue_id=5499 elapsed=66.9s avg=66.9s [SMART SLEEP CALC] remaining_seconds=28715 remaining_count=4 target_cycle=7178.8 avg_publish=66.9 base_sleep=7111.8 range=3555~3555 selected=3555 [SLEEP] 3555s before next queue [PUBLISH TARGET SELECTED] queue_id=5479 realtor_id=148 article_no=2649274420 sort_at=2026-09-11 20:55:13 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5479, realtor_id=148, draft_id=5856, article_no=2649274420 [DRAFT HTML CHECK] clipboard_len=15842, draft_len=15842, plain_len=571 ================================================================================ [INTEGRITY OK] queue_id=5479, draft_id=5856, article_no=2649274420 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 312동 · 아파트분양권 · 매매 · 9억 7,066' actual='힐스테이트도안리버파크3단지 312동 · 아파트분양권 · 매매 · 9억 7,066' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크3단지 312동 · 아파트분양권 · 매매 · 9억 7,066' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_03_2649274420_1789135557.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15464 plain_len= 571 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5479_2649274420_naver_compatible_v16_20260912_110115.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5479_2649274420_after_paste_20260912_110127.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5479_2649274420_after_paste_20260912_110127.txt [EDITOR DEBUG LEN] html= 188897 text= 3205 [EDITOR VALIDATE] html_len=188897 text_len=3205 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 312동 · 아파트분양권 · 매매 · 9억 7,066' actual='힐스테이트도안리버파크3단지 312동 · 아파트분양권 · 매매 · 9억 7,066' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224409175476 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224409175476 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5856 blog_id=khshim0915 blog_post_no=224409175476 url=https://blog.naver.com/khshim0915/224409175476 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224409175476 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224409175476 [PUBLISH ELAPSED] queue_id=5479 elapsed=67.4s avg=67.2s [SMART SLEEP CALC] remaining_seconds=25093 remaining_count=3 target_cycle=8364.3 avg_publish=67.2 base_sleep=8297.2 range=4148~4148 selected=4148 [SLEEP] 4148s before next queue [PUBLISH TARGET SELECTED] queue_id=5426 realtor_id=77 article_no=2649246117 sort_at=2026-09-11 19:41:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5426, realtor_id=77, draft_id=5802, article_no=2649246117 [DRAFT HTML CHECK] clipboard_len=15707, draft_len=15707, plain_len=552 ================================================================================ [INTEGRITY OK] queue_id=5426, draft_id=5802, article_no=2649246117 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='도안푸르지오디아델29블록 2902동 · 아파트분양권 · 매매 · 10억 8,000' actual='도안푸르지오디아델29블록 2902동 · 아파트분양권 · 매매 · 10억 8,000' [TITLE INPUT SUCCESS] attempt=1 title='도안푸르지오디아델29블록 2902동 · 아파트분양권 · 매매 · 10억 8,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_05_2649246117_1789135014.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15330 plain_len= 552 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5426_2649246117_naver_compatible_v16_20260912_121131.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5426_2649246117_after_paste_20260912_121142.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5426_2649246117_after_paste_20260912_121142.txt [EDITOR DEBUG LEN] html= 189097 text= 3053 [EDITOR VALIDATE] html_len=189097 text_len=3053 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='도안푸르지오디아델29블록 2902동 · 아파트분양권 · 매매 · 10억 8,000' actual='도안푸르지오디아델29블록 2902동 · 아파트분양권 · 매매 · 10억 8,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224409228906 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224409228906 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5802 blog_id=crystal1154 blog_post_no=224409228906 url=https://blog.naver.com/crystal1154/224409228906 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224409228906 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224409228906 [PUBLISH ELAPSED] queue_id=5426 elapsed=67.4s avg=67.2s [SMART SLEEP CALC] remaining_seconds=20877 remaining_count=2 target_cycle=10438.5 avg_publish=67.2 base_sleep=10371.3 range=5185~5185 selected=5185 [SLEEP] 5185s before next queue [PUBLISH TARGET SELECTED] queue_id=5366 realtor_id=4 article_no=2649287896 sort_at=2026-09-11 18:16:10 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5366, realtor_id=4, draft_id=5741, article_no=2649287896 [DRAFT HTML CHECK] clipboard_len=15428, draft_len=15428, plain_len=554 ================================================================================ [INTEGRITY OK] queue_id=5366, draft_id=5741, article_no=2649287896 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 206동 · 아파트 · 매매 · 8억 2,000' actual='양정자이더샵SK뷰 206동 · 아파트 · 매매 · 8억 2,000' [TITLE INPUT SUCCESS] attempt=1 title='양정자이더샵SK뷰 206동 · 아파트 · 매매 · 8억 2,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_06_2649287896_1789134382.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15045 plain_len= 554 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5366_2649287896_naver_compatible_v16_20260912_133903.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5366_2649287896_after_paste_20260912_133914.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5366_2649287896_after_paste_20260912_133914.txt [EDITOR DEBUG LEN] html= 188911 text= 2804 [EDITOR VALIDATE] html_len=188911 text_len=2804 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 206동 · 아파트 · 매매 · 8억 2,000' actual='양정자이더샵SK뷰 206동 · 아파트 · 매매 · 8억 2,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224409292733 [RESULT URL CHECK] https://blog.naver.com/pjy287/224409292733 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5741 blog_id=pjy287 blog_post_no=224409292733 url=https://blog.naver.com/pjy287/224409292733 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224409292733 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224409292733 [PUBLISH ELAPSED] queue_id=5366 elapsed=66.6s avg=67.1s [SMART SLEEP CALC] remaining_seconds=15626 remaining_count=1 target_cycle=15626.0 avg_publish=67.1 base_sleep=15558.9 range=7779~7779 selected=7779 [SLEEP] 7779s before next queue [PUBLISH TARGET SELECTED] queue_id=3934 realtor_id=5 article_no=2633871877 sort_at=2026-06-24 08:01:41 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3934, realtor_id=5, draft_id=4300, article_no=2633871877 [DRAFT HTML CHECK] clipboard_len=15896, draft_len=15896, plain_len=564 ================================================================================ [INTEGRITY OK] queue_id=3934, draft_id=4300, article_no=2633871877 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 9,694' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 9,694' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 9,694' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2633871877_1787882011.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15513 plain_len= 564 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3934_2633871877_naver_compatible_v16_20260912_154950.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3934_2633871877_after_paste_20260912_155001.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3934_2633871877_after_paste_20260912_155001.txt [EDITOR DEBUG LEN] html= 189636 text= 3441 [EDITOR VALIDATE] html_len=189636 text_len=3441 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 9,694' actual='한화포레나대전월평공원1단지 106동 · 아파트 · 매매 · 4억 9,694' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224409392031 [RESULT URL CHECK] https://blog.naver.com/boram8857/224409392031 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4300 blog_id=boram8857 blog_post_no=224409392031 url=https://blog.naver.com/boram8857/224409392031 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224409392031 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224409392031 [PUBLISH ELAPSED] queue_id=3934 elapsed=68.1s avg=67.3s [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=170 [PIPELINE RUN FINISH] run_id=1986, status=success ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 5 [FAILED] 0 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-12 10:00:16] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-12 15:50:21] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 29848 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:29848:20260913100004 [PIPELINE RUN START] run_id=1993, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5642 realtor_id=169 article_no=2649429738 sort_at=2026-09-12 21:27:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5642, realtor_id=169, draft_id=6021, article_no=2649429738 [DRAFT HTML CHECK] clipboard_len=13900, draft_len=13900, plain_len=356 ================================================================================ [INTEGRITY OK] queue_id=5642, draft_id=6021, article_no=2649429738 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='전 · 토지 · 매매 · 12억' actual='전 · 토지 · 매매 · 12억' [TITLE INPUT SUCCESS] attempt=1 title='전 · 토지 · 매매 · 12억' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_LAND_PHOTO_LAYOUT_LAND_PHOTO_LAYOUT_2649429738_1789221787.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13518 plain_len= 356 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=8 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=0 broker_blocks=5 legal_blocks=0 legal_reference_texts=2 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] FAIL [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 3_cost_title, 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5642_2649429738_naver_compatible_v16_20260913_100040.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5642_2649429738_after_paste_20260913_100051.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5642_2649429738_after_paste_20260913_100051.txt [EDITOR DEBUG LEN] html= 175092 text= 2745 [EDITOR VALIDATE] html_len=175092 text_len=2745 hit_count=1 [EDITOR VALIDATE RESULT] False 에디터 본문 핵심문구 부족 hit_count=1, text_len=2745 [BODY INPUT ERROR] 네이버 에디터 본문 검증 실패: 에디터 본문 핵심문구 부족 hit_count=1, text_len=2745 [PUBLISH ELAPSED] queue_id=5642 elapsed=47.1s avg=47.1s [SMART SLEEP CALC] remaining_seconds=28747 remaining_count=5 target_cycle=5749.4 avg_publish=47.1 base_sleep=5702.3 range=2851~2851 selected=2851 [SLEEP] 2851s before next queue [PUBLISH TARGET SELECTED] queue_id=5623 realtor_id=148 article_no=2649461528 sort_at=2026-09-12 20:59:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5623, realtor_id=148, draft_id=6002, article_no=2649461528 [DRAFT HTML CHECK] clipboard_len=15879, draft_len=15879, plain_len=538 ================================================================================ [INTEGRITY OK] queue_id=5623, draft_id=6002, article_no=2649461528 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 301동 · 아파트분양권 · 매매 · 7억 6,416' actual='힐스테이트도안리버파크3단지 301동 · 아파트분양권 · 매매 · 7억 6,416' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크3단지 301동 · 아파트분양권 · 매매 · 7억 6,416' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_01_2649461528_1789221655.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15496 plain_len= 538 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5623_2649461528_naver_compatible_v16_20260913_104859.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5623_2649461528_after_paste_20260913_104911.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5623_2649461528_after_paste_20260913_104911.txt [EDITOR DEBUG LEN] html= 190527 text= 3202 [EDITOR VALIDATE] html_len=190527 text_len=3202 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 301동 · 아파트분양권 · 매매 · 7억 6,416' actual='힐스테이트도안리버파크3단지 301동 · 아파트분양권 · 매매 · 7억 6,416' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224409983614 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224409983614 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6002 blog_id=khshim0915 blog_post_no=224409983614 url=https://blog.naver.com/khshim0915/224409983614 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224409983614 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224409983614 [PUBLISH ELAPSED] queue_id=5623 elapsed=67.2s avg=57.2s [SMART SLEEP CALC] remaining_seconds=25829 remaining_count=4 target_cycle=6457.2 avg_publish=57.2 base_sleep=6400.1 range=3200~3200 selected=3200 [SLEEP] 3200s before next queue [PUBLISH TARGET SELECTED] queue_id=5570 realtor_id=77 article_no=2649245631 sort_at=2026-09-11 19:41:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5570, realtor_id=77, draft_id=5948, article_no=2649245631 [DRAFT HTML CHECK] clipboard_len=15808, draft_len=15808, plain_len=546 ================================================================================ [INTEGRITY OK] queue_id=5570, draft_id=5948, article_no=2649245631 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 2,448' actual='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 2,448' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 2,448' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_01_2649245631_1789221302.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15430 plain_len= 546 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5570_2649245631_naver_compatible_v16_20260913_114326.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5570_2649245631_after_paste_20260913_114338.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5570_2649245631_after_paste_20260913_114338.txt [EDITOR DEBUG LEN] html= 189201 text= 3154 [EDITOR VALIDATE] html_len=189201 text_len=3154 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 2,448' actual='힐스테이트도안리버파크2단지 212동 · 아파트분양권 · 매매 · 9억 2,448' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224410019872 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224410019872 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5948 blog_id=crystal1154 blog_post_no=224410019872 url=https://blog.naver.com/crystal1154/224410019872 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224410019872 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224410019872 [PUBLISH ELAPSED] queue_id=5570 elapsed=67.1s avg=60.5s [SMART SLEEP CALC] remaining_seconds=22562 remaining_count=3 target_cycle=7520.7 avg_publish=60.5 base_sleep=7460.2 range=3730~3730 selected=3730 [SLEEP] 3730s before next queue [PUBLISH TARGET SELECTED] queue_id=5510 realtor_id=4 article_no=2649287738 sort_at=2026-09-11 18:16:10 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5510, realtor_id=4, draft_id=5887, article_no=2649287738 [DRAFT HTML CHECK] clipboard_len=13699, draft_len=13699, plain_len=329 ================================================================================ [INTEGRITY OK] queue_id=5510, draft_id=5887, article_no=2649287738 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='일반상가 · 상가 · 월세 · 1,000/100' actual='일반상가 · 상가 · 월세 · 1,000/100' [TITLE INPUT SUCCESS] attempt=1 title='일반상가 · 상가 · 월세 · 1,000/100' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_GREEN_LABEL_PHOTO_LAYOUT_02_2649287738_1789220913.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 13321 plain_len= 329 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=5 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5510_2649287738_naver_compatible_v16_20260913_124642.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5510_2649287738_after_paste_20260913_124654.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5510_2649287738_after_paste_20260913_124654.txt [EDITOR DEBUG LEN] html= 167874 text= 2517 [EDITOR VALIDATE] html_len=167874 text_len=2517 hit_count=2 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='일반상가 · 상가 · 월세 · 1,000/100' actual='일반상가 · 상가 · 월세 · 1,000/100' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224410064448 [RESULT URL CHECK] https://blog.naver.com/pjy287/224410064448 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5887 blog_id=pjy287 blog_post_no=224410064448 url=https://blog.naver.com/pjy287/224410064448 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224410064448 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224410064448 [PUBLISH ELAPSED] queue_id=5510 elapsed=65.6s avg=61.8s [SMART SLEEP CALC] remaining_seconds=18766 remaining_count=2 target_cycle=9383.0 avg_publish=61.8 base_sleep=9321.2 range=4660~4660 selected=4660 [SLEEP] 4660s before next queue [PUBLISH TARGET SELECTED] queue_id=3935 realtor_id=5 article_no=2633004234 sort_at=2026-06-23 12:01:08 today_published_count=0 ================================================================================ [QUEUE START] queue_id=3935, realtor_id=5, draft_id=4301, article_no=2633004234 [DRAFT HTML CHECK] clipboard_len=15015, draft_len=15015, plain_len=530 ================================================================================ [INTEGRITY OK] queue_id=3935, draft_id=4301, article_no=2633004234 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 103동 · 아파트 · 전세 · 3억' actual='한화포레나대전월평공원1단지 103동 · 아파트 · 전세 · 3억' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 103동 · 아파트 · 전세 · 3억' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/08/header_APT_NOTE_CARD_PHOTO_LAYOUT_03_2633004234_1787882014.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14639 plain_len= 530 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_3935_2633004234_naver_compatible_v16_20260913_140530.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3935_2633004234_after_paste_20260913_140542.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_3935_2633004234_after_paste_20260913_140542.txt [EDITOR DEBUG LEN] html= 178186 text= 3178 [EDITOR VALIDATE] html_len=178186 text_len=3178 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 103동 · 아파트 · 전세 · 3억' actual='한화포레나대전월평공원1단지 103동 · 아파트 · 전세 · 3억' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224410116957 [RESULT URL CHECK] https://blog.naver.com/boram8857/224410116957 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=4301 blog_id=boram8857 blog_post_no=224410116957 url=https://blog.naver.com/boram8857/224410116957 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224410116957 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224410116957 [PUBLISH ELAPSED] queue_id=3935 elapsed=67.5s avg=62.9s [SMART SLEEP CALC] remaining_seconds=14038 remaining_count=1 target_cycle=14038.0 avg_publish=62.9 base_sleep=13975.1 range=6987~6987 selected=6987 [SLEEP] 6987s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=329 [PIPELINE RUN FINISH] run_id=1993, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 4 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-13 10:00:04] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-13 16:02:28] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 14708 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:14708:20260914112819 [PIPELINE RUN START] run_id=2001, run_type=publish_worker [AUTO RETRY RESET] failed -> pending affected=1 [PUBLISH TARGET SELECTED] queue_id=5642 realtor_id=169 article_no=2649429738 sort_at=2026-09-12 21:27:34 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5642, realtor_id=169, draft_id=6021, article_no=2649429738 [DRAFT HTML CHECK] clipboard_len=13900, draft_len=13900, plain_len=356 ================================================================================ [INTEGRITY OK] queue_id=5642, draft_id=6021, article_no=2649429738 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=False expected='전 · 토지 · 매매 · 12억' actual='' [TITLE INPUT RETRY] attempt=1 expected='전 · 토지 · 매매 · 12억' actual='' [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=2 [TITLE INTEGRITY CHECK] matched=False expected='전 · 토지 · 매매 · 12억' actual='' [TITLE INPUT RETRY] attempt=2 expected='전 · 토지 · 매매 · 12억' actual='' [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=3 [TITLE INTEGRITY CHECK] matched=False expected='전 · 토지 · 매매 · 12억' actual='' [TITLE INPUT RETRY] attempt=3 expected='전 · 토지 · 매매 · 12억' actual='' [TITLE INTEGRITY HOLD] expected='전 · 토지 · 매매 · 12억' actual='' [WRITE HOLD] [WRITE_HOLD] realtor_id=169 / 제목 입력 실패 [PUBLISH ELAPSED] queue_id=5642 elapsed=19.6s avg=19.6s [SMART SLEEP CALC] remaining_seconds=23480 remaining_count=4 target_cycle=5870.0 avg_publish=19.6 base_sleep=5850.4 range=2925~2925 selected=2925 [SLEEP] 2925s before next queue [PUBLISH TARGET SELECTED] queue_id=5767 realtor_id=148 article_no=2649450360 sort_at=2026-09-12 20:59:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5767, realtor_id=148, draft_id=6148, article_no=2649450360 [DRAFT HTML CHECK] clipboard_len=15892, draft_len=15892, plain_len=557 ================================================================================ [INTEGRITY OK] queue_id=5767, draft_id=6148, article_no=2649450360 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 306동 · 아파트분양권 · 매매 · 9억 5,132' actual='힐스테이트도안리버파크3단지 306동 · 아파트분양권 · 매매 · 9억 5,132' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크3단지 306동 · 아파트분양권 · 매매 · 9억 5,132' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_01_2649450360_1789308233.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15514 plain_len= 557 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5767_2649450360_naver_compatible_v16_20260914_121800.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5767_2649450360_after_paste_20260914_121811.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5767_2649450360_after_paste_20260914_121811.txt [EDITOR DEBUG LEN] html= 189944 text= 3232 [EDITOR VALIDATE] html_len=189944 text_len=3232 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크3단지 306동 · 아파트분양권 · 매매 · 9억 5,132' actual='힐스테이트도안리버파크3단지 306동 · 아파트분양권 · 매매 · 9억 5,132' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/khshim0915/224411054795 [RESULT URL CHECK] https://blog.naver.com/khshim0915/224411054795 [PRIVATE QUEUE NONE] realtor_id=148 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6148 blog_id=khshim0915 blog_post_no=224411054795 url=https://blog.naver.com/khshim0915/224411054795 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/khshim0915/224411054795 [BLOG RESULT PARSED] blog_id=khshim0915 blog_post_no=224411054795 [PUBLISH ELAPSED] queue_id=5767 elapsed=66.4s avg=43.0s [SMART SLEEP CALC] remaining_seconds=20489 remaining_count=2 target_cycle=10244.5 avg_publish=43.0 base_sleep=10201.5 range=5100~5100 selected=5100 [SLEEP] 5100s before next queue [PUBLISH TARGET SELECTED] queue_id=5714 realtor_id=77 article_no=2649244941 sort_at=2026-09-11 19:41:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5714, realtor_id=77, draft_id=6094, article_no=2649244941 [DRAFT HTML CHECK] clipboard_len=15748, draft_len=15748, plain_len=547 ================================================================================ [INTEGRITY OK] queue_id=5714, draft_id=6094, article_no=2649244941 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 8억 8,530' actual='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 8억 8,530' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 8억 8,530' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_RED_POSTER_PHOTO_LAYOUT_05_2649244941_1789307598.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15371 plain_len= 547 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5714_2649244941_naver_compatible_v16_20260914_134406.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5714_2649244941_after_paste_20260914_134418.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5714_2649244941_after_paste_20260914_134418.txt [EDITOR DEBUG LEN] html= 189204 text= 3113 [EDITOR VALIDATE] html_len=189204 text_len=3113 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 8억 8,530' actual='힐스테이트도안리버파크5단지 506동 · 아파트분양권 · 매매 · 8억 8,530' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224411158517 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224411158517 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6094 blog_id=crystal1154 blog_post_no=224411158517 url=https://blog.naver.com/crystal1154/224411158517 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224411158517 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224411158517 [PUBLISH ELAPSED] queue_id=5714 elapsed=66.5s avg=50.8s [SMART SLEEP CALC] remaining_seconds=15322 remaining_count=1 target_cycle=15322.0 avg_publish=50.8 base_sleep=15271.2 range=7635~7635 selected=7635 [SLEEP] 7635s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[169, 148, 77] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=0 private_pending=164 [PIPELINE RUN FINISH] run_id=2001, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 3 [SUCCESS] 2 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-14 11:28:18] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-14 15:51:52] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0 [STEP155 SERVER PUBLISH ACTIVE] backup baseline + smart sleep 180s + stale lock recovery [FILE LOCK ACQUIRED] D:/honghee/blog_api/storage\publish_worker.lock pid= 11156 [DB LOCK ACQUIRED] publish_worker owner=publish_worker:HONGHEE-IP:11156:20260915100005 [PIPELINE RUN START] run_id=2010, run_type=publish_worker [PUBLISH TARGET SELECTED] queue_id=5927 realtor_id=169 article_no=2649799861 sort_at=2026-09-14 21:25:50 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5927, realtor_id=169, draft_id=6310, article_no=2649799861 [DRAFT HTML CHECK] clipboard_len=15365, draft_len=15365, plain_len=549 ================================================================================ [INTEGRITY OK] queue_id=5927, draft_id=6310, article_no=2649799861 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=169 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_169.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/goskh1010?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/goskh1010?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=goskh1010&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='반석3단지호반베르디움 306동 · 아파트 · 매매 · 8억 3,000' actual='반석3단지호반베르디움 306동 · 아파트 · 매매 · 8억 3,000' [TITLE INPUT SUCCESS] attempt=1 title='반석3단지호반베르디움 306동 · 아파트 · 매매 · 8억 3,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_03_2649799861_1789394788.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14987 plain_len= 549 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5927_2649799861_naver_compatible_v16_20260915_100041.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5927_2649799861_after_paste_20260915_100053.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5927_2649799861_after_paste_20260915_100053.txt [EDITOR DEBUG LEN] html= 187827 text= 2859 [EDITOR VALIDATE] html_len=187827 text_len=2859 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='반석3단지호반베르디움 306동 · 아파트 · 매매 · 8억 3,000' actual='반석3단지호반베르디움 306동 · 아파트 · 매매 · 8억 3,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/goskh1010/224412165378 [RESULT URL CHECK] https://blog.naver.com/goskh1010/224412165378 [PRIVATE QUEUE NONE] realtor_id=169 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6310 blog_id=goskh1010 blog_post_no=224412165378 url=https://blog.naver.com/goskh1010/224412165378 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/goskh1010/224412165378 [BLOG RESULT PARSED] blog_id=goskh1010 blog_post_no=224412165378 [PUBLISH ELAPSED] queue_id=5927 elapsed=67.0s avg=67.0s [SMART SLEEP CALC] remaining_seconds=28727 remaining_count=4 target_cycle=7181.8 avg_publish=67.0 base_sleep=7114.7 range=3557~3557 selected=3557 [SLEEP] 3557s before next queue [PUBLISH TARGET SELECTED] queue_id=5908 realtor_id=148 article_no=2649791292 sort_at=2026-09-14 20:57:53 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5908, realtor_id=148, draft_id=6291, article_no=2649791292 [DRAFT HTML CHECK] clipboard_len=12642, draft_len=12642, plain_len=374 ================================================================================ [INTEGRITY OK] queue_id=5908, draft_id=6291, article_no=2649791292 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=148 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_148.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/khshim0915?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/khshim0915?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=khshim0915&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='대 · 토지 · 매매 · 17억 5,000' actual='대 · 토지 · 매매 · 17억 5,000' [TITLE INPUT SUCCESS] attempt=1 title='대 · 토지 · 매매 · 17억 5,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_LAND_PHOTO_LAYOUT_LAND_PHOTO_LAYOUT_2649791292_1789394597.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 12260 plain_len= 374 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=0 broker_blocks=5 legal_blocks=0 legal_reference_texts=2 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=3 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] FAIL [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 3_cost_title, 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5908_2649791292_naver_compatible_v16_20260915_110105.html [PREVIEW IMAGE COUNT] 3 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5908_2649791292_after_paste_20260915_110116.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5908_2649791292_after_paste_20260915_110116.txt [EDITOR DEBUG LEN] html= 163610 text= 2625 [EDITOR VALIDATE] html_len=163610 text_len=2625 hit_count=1 [EDITOR VALIDATE RESULT] False 에디터 본문 핵심문구 부족 hit_count=1, text_len=2625 [BODY INPUT ERROR] 네이버 에디터 본문 검증 실패: 에디터 본문 핵심문구 부족 hit_count=1, text_len=2625 [PUBLISH ELAPSED] queue_id=5908 elapsed=47.2s avg=57.1s [SMART SLEEP CALC] remaining_seconds=25123 remaining_count=4 target_cycle=6280.8 avg_publish=57.1 base_sleep=6223.6 range=3111~3111 selected=3111 [SLEEP] 3111s before next queue [PUBLISH TARGET SELECTED] queue_id=5798 realtor_id=4 article_no=2649795810 sort_at=2026-09-14 18:17:57 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5798, realtor_id=4, draft_id=6179, article_no=2649795810 [DRAFT HTML CHECK] clipboard_len=15382, draft_len=15382, plain_len=517 ================================================================================ [INTEGRITY OK] queue_id=5798, draft_id=6179, article_no=2649795810 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=4 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_4.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/pjy287?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/pjy287?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/pjy287?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=pjy287&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 302동 · 아파트 · 매매 · 7억 9,000' actual='양정자이더샵SK뷰 302동 · 아파트 · 매매 · 7억 9,000' [TITLE INPUT SUCCESS] attempt=1 title='양정자이더샵SK뷰 302동 · 아파트 · 매매 · 7억 9,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_BRIGHT_CARD_PHOTO_LAYOUT_06_2649795810_1789393477.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15004 plain_len= 517 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5798_2649795810_naver_compatible_v16_20260915_115344.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5798_2649795810_after_paste_20260915_115355.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5798_2649795810_after_paste_20260915_115355.txt [EDITOR DEBUG LEN] html= 188792 text= 2782 [EDITOR VALIDATE] html_len=188792 text_len=2782 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 314.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='양정자이더샵SK뷰 302동 · 아파트 · 매매 · 7억 9,000' actual='양정자이더샵SK뷰 302동 · 아파트 · 매매 · 7억 9,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/pjy287/224412299680 [RESULT URL CHECK] https://blog.naver.com/pjy287/224412299680 [PRIVATE QUEUE NONE] realtor_id=4 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6179 blog_id=pjy287 blog_post_no=224412299680 url=https://blog.naver.com/pjy287/224412299680 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/pjy287/224412299680 [BLOG RESULT PARSED] blog_id=pjy287 blog_post_no=224412299680 [PUBLISH ELAPSED] queue_id=5798 elapsed=66.6s avg=60.3s [SMART SLEEP CALC] remaining_seconds=21945 remaining_count=3 target_cycle=7315.0 avg_publish=60.3 base_sleep=7254.7 range=3627~3627 selected=3627 [SLEEP] 3627s before next queue [PUBLISH TARGET SELECTED] queue_id=5855 realtor_id=77 article_no=2649244562 sort_at=2026-09-11 19:41:42 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5855, realtor_id=77, draft_id=6237, article_no=2649244562 [DRAFT HTML CHECK] clipboard_len=15747, draft_len=15747, plain_len=548 ================================================================================ [INTEGRITY OK] queue_id=5855, draft_id=6237, article_no=2649244562 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=77 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_77.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/crystal1154?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/crystal1154?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=crystal1154&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 504동 · 아파트분양권 · 매매 · 7억 9,335' actual='힐스테이트도안리버파크5단지 504동 · 아파트분양권 · 매매 · 7억 9,335' [TITLE INPUT SUCCESS] attempt=1 title='힐스테이트도안리버파크5단지 504동 · 아파트분양권 · 매매 · 7억 9,335' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_CLEAN_WHITE_PHOTO_LAYOUT_07_2649244562_1789394011.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 15369 plain_len= 548 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=7 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=5 two_col_tables=5 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=2 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=5 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5855_2649244562_naver_compatible_v16_20260915_125517.html [PREVIEW IMAGE COUNT] 5 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5855_2649244562_after_paste_20260915_125529.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5855_2649244562_after_paste_20260915_125529.txt [EDITOR DEBUG LEN] html= 189141 text= 3111 [EDITOR VALIDATE] html_len=189141 text_len=3111 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 390.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 175.7, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 88.4, "height": 88.4, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='힐스테이트도안리버파크5단지 504동 · 아파트분양권 · 매매 · 7억 9,335' actual='힐스테이트도안리버파크5단지 504동 · 아파트분양권 · 매매 · 7억 9,335' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/crystal1154/224412362528 [RESULT URL CHECK] https://blog.naver.com/crystal1154/224412362528 [PRIVATE QUEUE NONE] realtor_id=77 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=6237 blog_id=crystal1154 blog_post_no=224412362528 url=https://blog.naver.com/crystal1154/224412362528 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/crystal1154/224412362528 [BLOG RESULT PARSED] blog_id=crystal1154 blog_post_no=224412362528 [PUBLISH ELAPSED] queue_id=5855 elapsed=66.2s avg=61.8s [SMART SLEEP CALC] remaining_seconds=18251 remaining_count=2 target_cycle=9125.5 avg_publish=61.8 base_sleep=9063.7 range=4531~4531 selected=4531 [SLEEP] 4531s before next queue [PUBLISH TARGET SELECTED] queue_id=5224 realtor_id=5 article_no=2631606570 sort_at=2026-06-22 16:01:35 today_published_count=0 ================================================================================ [QUEUE START] queue_id=5224, realtor_id=5, draft_id=5597, article_no=2631606570 [DRAFT HTML CHECK] clipboard_len=14942, draft_len=14942, plain_len=591 ================================================================================ [INTEGRITY OK] queue_id=5224, draft_id=5597, article_no=2631606570 [SESSION FILE] D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [OPEN BLOG HOME] https://blog.naver.com [CURRENT URL] https://section.blog.naver.com/BlogHome.naver?directoryNo=0¤tPage=1&groupId=0 [SESSION REFRESHED] storage_state 재저장 완료 [LOGIN OK] 네이버 로그인 상태 확인 완료 [GUIDE CLOSE] button:has-text("닫기") / count=2 [GUIDE CLOSE] button:has-text("확인") / count=2 [GUIDE CLOSE] a:has-text("닫기") / count=2 [WRITE CLICK] a:has-text('글쓰기') [WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver [DRAFT POPUP] 없음 [AUTO RELOGIN START] realtor_id=5 reason=글쓰기 이동 중 로그인 페이지로 이동: https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver target_url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN PAGE] https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/GoBlogWrite.naver [AUTO RELOGIN SUCCESS] session saved: D:/honghee/blog_api/storage\naver_sessions\naver_session_5.json [AUTO RELOGIN TARGET GOTO] https://blog.naver.com/boram8857?Redirect=Write& [SESSION RECOVERED] write redirect [SESSION RECOVERED BUT WRITE RETRY FAILED] [WAIT EDITOR] 1/30 url=https://blog.naver.com/boram8857?Redirect=Write& [WRITE FINAL URL] https://blog.naver.com/boram8857?Redirect=Write& [WRITE FRAME FOUND] https://blog.naver.com/PostWriteForm.naver?blogId=boram8857&Redirect=Write&redirect=Write&widgetTypeCall=true&noTrackingCode=true&directAccess=false [TITLE TARGET BOX] {'x': 249.5, 'y': 226, 'width': 886, 'height': 48} attempt=1 [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 102동 · 아파트 · 전세 · 3억 2,000' actual='한화포레나대전월평공원1단지 102동 · 아파트 · 전세 · 3억 2,000' [TITLE INPUT SUCCESS] attempt=1 title='한화포레나대전월평공원1단지 102동 · 아파트 · 전세 · 3억 2,000' [REP UPLOAD START] D:/honghee/blog_api/mybox/generated/header_images/2026/09/header_APT_REAL_PHOTO_GLASS_PHOTO_LAYOUT_05_2631606570_1789111772.png [REP FILE INPUT COUNT] root=frame, count=0 [REP FILE INPUT COUNT] root=page, count=0 [REP IMAGE BUTTON TRY] root=frame, selector=button[data-name="image"], index=0 [REP UPLOAD OK] file chooser root=frame, selector=button[data-name="image"], index=0 [REP IMAGE UPLOADED] file chooser [REP CHECK TRY] [REP BUTTON FOUND] wait=1, root=frame, selector=button:has-text('대표'), count=1 [REP BUTTON CLICKED] root=frame, selector=button:has-text('대표'), index=0 [REP THUMBNAIL CONFIRMED] representative click attempted [REP UPLOAD RESULT] True [REP WIDTH START] target=editor-uploaded-image mode=content-width [REP WIDTH IMAGE SELECTED] root=frame, selector=.se-component.se-image img [REP WIDTH APPLIED] root=frame, selector=button.se-object-arrangement-fit-toolbar-button, index=0 [REP WIDTH RESULT] True [REP HTML STRIP] representative image block removed count=1 [CURSOR AFTER REP MOVE START] [CURSOR AFTER REP MOVE END] [BODY HTML CHECK BEFORE INPUT] clipboard_len= 14559 plain_len= 591 [BODY PLACEHOLDER COUNT] 1 [BODY PLACEHOLDER 0] text=사진 설명을 입력하세요. box=None [BODY INPUT MODE] rendered_preview_copy [PREVIEW COPY START] [NAVER LAYOUT APPLIED style_24] sections=6 core_title_breaks_removed=0 broker_title_spacers_removed=0 location_titles=1 tables=4 two_col_tables=4 compact_tables=3 legal_tables=0 consultation_tables=3 cost_tables=1 broker_blocks=5 legal_blocks=0 legal_reference_texts=1 posting_notices=1 keyword_blocks=3 listing_banners=1 listing_banner_600x200=1 representative_images=0 images=4 facility_grids=0 facility_cells=0 [REP VALIDATION] editor_upload=PASS preview_duplicate_count=0 [LAYOUT CHECK 1_editor_representative_no_preview_duplicate] PASS [LAYOUT CHECK 2_listing_banner] PASS [LAYOUT CHECK 3_cost_title] PASS [LAYOUT CHECK 4_broker_title] PASS [LAYOUT CHECK 5_location_title] PASS [LAYOUT CHECK 6_consultation] PASS [LAYOUT CHECK 7_legal] FAIL [LAYOUT CHECK 8_naver_pay_complex] FAIL [LAYOUT CHECK 9_school_information] FAIL [LAYOUT CHECK 10_facility_row_table] FAIL [LAYOUT OPTIONAL SKIP] 7_legal, 8_naver_pay_complex, 9_school_information, 10_facility_row_table [LAYOUT TEST PREVIEW SAVED] D:/honghee/blog_api/storage/debug/publish_layout_test/preview_5224_2631606570_naver_compatible_v16_20260915_141155.html [PREVIEW IMAGE COUNT] 4 [PREVIEW IMAGE LOAD OK] [PREVIEW BROKEN IMAGE COUNT] 0 [PREVIEW COPY DONE] [RENDERED PASTE START] [RENDERED PASTE SUCCESS] [EDITOR DEBUG SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5224_2631606570_after_paste_20260915_141207.html [EDITOR DEBUG TEXT SAVED] D:/honghee/blog_api/storage/debug/publish_editor/editor_5224_2631606570_after_paste_20260915_141207.txt [EDITOR DEBUG LEN] html= 177833 text= 3129 [EDITOR VALIDATE] html_len=177833 text_len=3129 hit_count=3 [EDITOR VALIDATE RESULT] True 에디터 본문 검증 성공 [STYLE_13 EDITOR METRICS] {"broker": {"tag": "B", "cls": "", "width": 138.3, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "location": {"tag": "B", "cls": "", "width": 333.6, "height": 21, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, "legal": null, "consultationCells": [{"tag": "TD", "cls": "__se-unit se-cell", "width": 109.4, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}, {"tag": "TD", "cls": "__se-unit se-cell", "width": 447.8, "height": 153.6, "maxWidth": "0px", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "10px", "paddingBottom": "10px"}], "imageBoxes": [{"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 886, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-inline-image-resource", "width": 864, "height": 632.8, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 600, "height": 200, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}, {"tag": "IMG", "cls": "se-image-resource", "width": 886, "height": 531.6, "maxWidth": "none", "marginTop": "0px", "marginBottom": "0px", "paddingTop": "0px", "paddingBottom": "0px"}]} [BODY INPUT SUCCESS] [EDITOR BLUR START] [EDITOR BLUR END] [RIGHT PANEL REMOVE START] [RIGHT PANEL REMOVE END] [TITLE INTEGRITY CHECK] matched=True expected='한화포레나대전월평공원1단지 102동 · 아파트 · 전세 · 3억 2,000' actual='한화포레나대전월평공원1단지 102동 · 아파트 · 전세 · 3억 2,000' [PUBLISH TOP COORD CLICK START] [PUBLISH TOP COORD CLICK SUCCESS] [FINAL PUBLISH COORD CLICK START] [FINAL PUBLISH COORD CLICK SUCCESS] [WAIT PUBLISH RESULT] 1/30 url=https://blog.naver.com/boram8857/224412450037 [RESULT URL CHECK] https://blog.naver.com/boram8857/224412450037 [PRIVATE QUEUE NONE] realtor_id=5 [PRIVATE QUEUE RESULT] {'processed': 0, 'success': 0, 'failed': 0} [DRAFT PUBLISH RESULT SAVED] draft_id=5597 blog_id=boram8857 blog_post_no=224412450037 url=https://blog.naver.com/boram8857/224412450037 [DONE] 네이버 블로그 발행 완료 [RESULT URL] https://blog.naver.com/boram8857/224412450037 [BLOG RESULT PARSED] blog_id=boram8857 blog_post_no=224412450037 [PUBLISH ELAPSED] queue_id=5224 elapsed=67.1s avg=62.8s [SMART SLEEP CALC] remaining_seconds=13653 remaining_count=1 target_cycle=13653.0 avg_publish=62.8 base_sleep=13590.2 range=6795~6795 selected=6795 [SLEEP] 6795s before next queue [PUBLISH TARGET NONE] realtor_id=ALL daily_limit=1 skip_realtor_ids=[4, 5, 169, 77, 148] [INFO] pending Queue 없음 [REMAINING QUEUE] realtor_id=ALL publish_pending=1 private_pending=165 [PIPELINE RUN FINISH] run_id=2010, status=failed ================================================================================ [PUBLISH WORKER DONE] [PROCESSED] 5 [SUCCESS] 4 [FAILED] 1 ================================================================================ [DB LOCK RELEASED] publish_worker affected=1 [2026-09-15 10:00:05] START 1/1 �꽌踰� 諛쒗뻾 10:00~18:00 JOB: night_publish / �꽌踰� 諛쒗뻾 10:00~18:00 CWD: D:\honghee\blog_api CMD: C:\Users\owner\AppData\Local\Programs\Python\Python313\python.exe workers\publish_worker.py --limit 1000 --sleep 30 --until-time 18:00 --smart-sleep --per-realtor-daily-limit 1 [2026-09-15 16:05:42] END �꽌踰� 諛쒗뻾 10:00~18:00 code=0