-
Alo 재입고 알림봇 개발_4(HTML fallback 보강)Dev🚀 2025. 9. 13. 15:46
이전글:
https://jungheeho.tistory.com/101
Alo 재입고 알림봇 개발_3
이전글:https://jungheeho.tistory.com/100 Alo 재입고 알림봇 개발_2이전글:https://jungheeho.tistory.com/99 Alo 재입고 알림봇 개발_1🌱 개발 배경- 평소에 사고 싶었던 상품인 Alo Yoga 'Seamless Delight High Neck Bra – Whi
jungheeho.tistory.com
문제 상황
- GitHub Actions로 주기 실행은 잘 되는데, 종종 텔레그램에 이런 경고 메시지가 왔다.
⚠️ 재고 확인 실패(임시): Unable to determine stock state via HTML fallback- 원인:
- JSON(.js) 접근은 403으로 막힘.
- HTML 구조에서 instock/outofstock 신호를 잡아내지 못했을 때 발생.
- 즉, fallback 로직이 너무 단순했던 것.
개선 아이디어
- 키워드 목록 확장
- 기존: "out of stock", "sold out", "품절", "재고 없음"
- 추가: "unavailable", "currently sold out", "coming soon", "장바구니 불가" 등
→ 더 다양한 표현을 탐지할 수 있음.
- 버튼 상태 확인
- HTML 구조에서 button.add-to-cart 혹은 button.product-form__submit 태그를 확인.
- disabled 속성이 있거나 버튼 텍스트가 "품절", "sold out" → 품절.
- 버튼이 활성화 + "Add to Cart", "장바구니 담기" → 구매 가능.
- 메타 태그/JSON-LD 보강
- <meta property="og:availability" content="instock/outofstock"> 같은 메타 정보가 있는 경우도 있음.
- JSON-LD offers.availability 필드도 한 번 더 체크.
- 최종 fallback: 프록시 텍스트
- 직접 HTML이 막힐 경우, https://r.jina.ai/http://... 프록시로 페이지 텍스트만 가져와 키워드 탐지.
보강된 코드 예시
# 버튼 상태 확인 예시 add_btn = soup.select_one("button.add-to-cart, button.product-form__submit") if add_btn: btn_text = add_btn.get_text(" ", strip=True).lower() if "sold out" in btn_text or "품절" in btn_text: return False if not add_btn.has_attr("disabled"): return True결과
- 경고 메시지가 뜨는 빈도가 크게 줄었다.
- 실패해도 워크플로우 자체는 실패하지 않고, 텔레그램으로 “⚠️ 임시 실패, 다음 주기에 재시도” 메시지만 보냄.
- 주기 실행 안정성이 확보되었고, 재고 변화만 잘 잡아내면 되므로 실전 사용에 무리 없음.
정리
- 크롤링 자동화에서는 예외 케이스 대비가 필수다.
- 사이트 구조가 바뀌거나 IP 차단이 걸려도 fallback을 여러 단계로 준비하면 안정적으로 동작한다.
- 이번 개선으로 “품절 → 재입고” 같은 중요한 상태 변화만 확실히 알림받을 수 있게 됨.
반응형'Dev🚀' 카테고리의 다른 글
맥북 Self-hosted GitHub Actions Runner 설정 후 오류 수습..🧨 | (모든 파일 손상/인식 불가, iCloud 동기화 이상 문제) (0) 2025.09.16 Alo 재입고 알림봇 개발_5(Self-hosted runner) (0) 2025.09.13 Alo 재입고 알림봇 개발_3 (0) 2025.09.13 Alo 재입고 알림봇 개발_2 (0) 2025.09.13 Alo 재입고 알림봇 개발_1 (0) 2025.09.13 - GitHub Actions로 주기 실행은 잘 되는데, 종종 텔레그램에 이런 경고 메시지가 왔다.