87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""백제약품 주문 원장 페이지 분석"""
|
|
|
|
import asyncio
|
|
import json
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
async def analyze_order_ledger():
|
|
from playwright.async_api import async_playwright
|
|
|
|
username = os.getenv('BAEKJE_USER_ID')
|
|
password = os.getenv('BAEKJE_PASSWORD')
|
|
|
|
print(f'Username: {username}')
|
|
|
|
async with async_playwright() as p:
|
|
browser = await p.chromium.launch(headless=False)
|
|
context = await browser.new_context()
|
|
page = await context.new_page()
|
|
|
|
# 로그인 페이지
|
|
await page.goto('https://ibjp.co.kr/dist/login', timeout=15000)
|
|
await page.wait_for_load_state('networkidle', timeout=10000)
|
|
|
|
# 로그인 폼 입력
|
|
inputs = await page.locator('input[type="text"], input[type="password"]').all()
|
|
if len(inputs) >= 2:
|
|
await inputs[0].fill(username)
|
|
await inputs[1].fill(password)
|
|
|
|
# 로그인 버튼 클릭
|
|
buttons = await page.locator('button').all()
|
|
for btn in buttons:
|
|
text = await btn.text_content()
|
|
if '로그인' in (text or ''):
|
|
await btn.click()
|
|
break
|
|
|
|
# 로그인 완료 대기
|
|
try:
|
|
await page.wait_for_url('**/comOrd**', timeout=15000)
|
|
print('Login successful, redirected to comOrd')
|
|
except Exception as e:
|
|
print(f'URL wait failed: {e}')
|
|
await asyncio.sleep(3)
|
|
|
|
print(f'Current URL: {page.url}')
|
|
|
|
# 주문 원장 페이지로 이동
|
|
await page.goto('https://ibjp.co.kr/dist/ordLedger', timeout=15000)
|
|
await page.wait_for_load_state('networkidle', timeout=15000)
|
|
|
|
print(f'Order Ledger URL: {page.url}')
|
|
|
|
# 페이지 HTML 저장
|
|
html = await page.content()
|
|
with open('ordLedger_page.html', 'w', encoding='utf-8') as f:
|
|
f.write(html)
|
|
print('Page HTML saved to ordLedger_page.html')
|
|
|
|
# 스크린샷 저장
|
|
await page.screenshot(path='ordLedger_screenshot.png', full_page=True)
|
|
print('Screenshot saved')
|
|
|
|
# 테이블 데이터 분석
|
|
tables = await page.locator('table').all()
|
|
print(f'Found {len(tables)} tables')
|
|
|
|
for i, table in enumerate(tables):
|
|
headers = await table.locator('th').all()
|
|
header_texts = [await h.text_content() for h in headers]
|
|
print(f'Table {i} headers: {header_texts}')
|
|
|
|
# 페이지 텍스트 출력 (분석용)
|
|
body_text = await page.locator('body').text_content()
|
|
print('\n=== Page Text Preview ===')
|
|
print(body_text[:3000] if body_text else 'No text')
|
|
|
|
await asyncio.sleep(30) # 페이지 확인 시간
|
|
await browser.close()
|
|
|
|
if __name__ == '__main__':
|
|
asyncio.run(analyze_order_ledger())
|