- wholesale 패키지 연동 (SooinSession, GeoYoungSession) - Flask Blueprint 분리 (sooin_api.py, geoyoung_api.py) - order_context 스키마 확장 (wholesaler_id, internal_code 등) - 수인약품 개별 취소 기능 (cancel_item, restore_item) - 문서 추가: WHOLESALE_API_INTEGRATION.md - 테스트 스크립트들
113 lines
3.9 KiB
Python
113 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""지오영 API 직접 테스트"""
|
|
|
|
import asyncio
|
|
from playwright.async_api import async_playwright
|
|
import json
|
|
|
|
async def capture_cart_api():
|
|
async with async_playwright() as p:
|
|
browser = await p.chromium.launch(headless=True)
|
|
page = await browser.new_page()
|
|
|
|
# 요청/응답 캡처
|
|
cart_requests = []
|
|
|
|
async def handle_request(request):
|
|
if 'Cart' in request.url or 'Order' in request.url or 'Add' in request.url:
|
|
cart_requests.append({
|
|
'url': request.url,
|
|
'method': request.method,
|
|
'headers': dict(request.headers),
|
|
'data': request.post_data
|
|
})
|
|
|
|
page.on('request', handle_request)
|
|
|
|
# 로그인
|
|
await page.goto('https://gwn.geoweb.kr/Member/Login')
|
|
await page.fill('input[type="text"]', '7390')
|
|
await page.fill('input[type="password"]', 'trajet6640')
|
|
await page.click('button, input[type="submit"]')
|
|
await page.wait_for_load_state('networkidle')
|
|
print("로그인 완료")
|
|
|
|
# 쿠키 저장
|
|
cookies = await page.context.cookies()
|
|
print(f"쿠키: {[c['name'] for c in cookies]}")
|
|
|
|
# 검색 페이지
|
|
await page.goto('https://gwn.geoweb.kr/Home/Index')
|
|
await page.wait_for_timeout(2000)
|
|
|
|
# 검색 (AJAX)
|
|
await page.evaluate('''
|
|
$.ajax({
|
|
url: "/Home/PartialSearchProduct",
|
|
type: "POST",
|
|
data: {srchText: "643104281"},
|
|
success: function(data) {
|
|
console.log("검색 결과:", data.substring(0, 500));
|
|
}
|
|
});
|
|
''')
|
|
await page.wait_for_timeout(2000)
|
|
|
|
# 장바구니 추가 시도 (JavaScript로)
|
|
result = await page.evaluate('''
|
|
async function testCart() {
|
|
// 장바구니 추가 함수 찾기
|
|
if (typeof AddCart !== 'undefined') {
|
|
return "AddCart 함수 존재";
|
|
}
|
|
if (typeof fnAddCart !== 'undefined') {
|
|
return "fnAddCart 함수 존재";
|
|
}
|
|
|
|
// 전역 함수 목록
|
|
var funcs = [];
|
|
for (var key in window) {
|
|
if (typeof window[key] === 'function' &&
|
|
(key.toLowerCase().includes('cart') ||
|
|
key.toLowerCase().includes('order') ||
|
|
key.toLowerCase().includes('add'))) {
|
|
funcs.push(key);
|
|
}
|
|
}
|
|
return "발견된 함수: " + funcs.join(", ");
|
|
}
|
|
return testCart();
|
|
''')
|
|
print(f"JavaScript 분석: {result}")
|
|
|
|
# 페이지 소스에서 장바구니 관련 스크립트 찾기
|
|
scripts = await page.evaluate('''
|
|
var scripts = document.querySelectorAll('script');
|
|
var result = [];
|
|
scripts.forEach(function(s) {
|
|
var text = s.textContent || s.innerText || '';
|
|
if (text.includes('Cart') || text.includes('AddProduct')) {
|
|
result.push(text.substring(0, 1000));
|
|
}
|
|
});
|
|
return result;
|
|
''')
|
|
|
|
await browser.close()
|
|
|
|
print("\n" + "="*60)
|
|
print("캡처된 Cart/Order 요청:")
|
|
print("="*60)
|
|
for r in cart_requests:
|
|
print(json.dumps(r, indent=2, ensure_ascii=False))
|
|
|
|
print("\n" + "="*60)
|
|
print("장바구니 관련 스크립트:")
|
|
print("="*60)
|
|
for i, s in enumerate(scripts[:3]):
|
|
print(f"\n--- Script {i+1} ---")
|
|
print(s[:800])
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(capture_cart_api())
|