This commit is contained in:
EnvyPC 2024-04-11 18:18:22 +09:00
commit 340a03dfa7
6 changed files with 219 additions and 43 deletions

36
config2.ini Normal file
View File

@ -0,0 +1,36 @@
[2사업자]
businessname = 2사업자이름
businessnumber = 2사업자번호
businessphone = 2사업자전화번호
businessaddress = 사2업자주소
businessdate = 2사업자개업날짜
businessetc1 = 2사업자기타정보1
businessetc2 = 2사업자기타정보2
businessetc3 = 2사업자기타정보3
businessetc4 = 2사업자기타정보4
coupang_id = 2쿠팡아이디
coupang_code = 2업체코드값
coupang_access_key = 2AccessKey값
coupang_secret_key = SecretKey값
coupang_ordercollection = False
coupang_api_verification = False
smartstore_api_verification = true
smartstore_ordercollection = true
smartstore_app_id = 22APPID값
smartstore_app_pw = 22APPPW값
smartstore_ss_id = 스마트스토어ID값
smartstore_ss_pw = 스마트스토어비밀번호값
esm_auction_id = 옥션ID값
esm_gmarket_id = G마켓ID값
esm_api_verification = true
esm_ordercollection = false
street11_domestic_api_key = 롯데온API키값
street11_domestic_ordercollection = true
street11_domestic_api_verification = true
street11_global_api_key = 롯데온API키값
street11_global_ordercollection = true
street11_global_api_verification = true
lotteon_api_key = 롯데온API키값
lotteon_ordercollection = true
lotteon_api_verification = false

49
main.py
View File

@ -1,9 +1,12 @@
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMainWindow, QTabWidget, QMenuBar, QAction, QFileDialog, QVBoxLayout, QMessageBox
import sys
from src.log_config import setup_logging
import asyncio
from asyncqt import QEventLoop
from src.log_config import setup_logging
from src.market_config import MarketConfigWidget
from src.config_handler import *
from src.webTask import *
class MainWindow(QMainWindow):
def __init__(self):
@ -24,13 +27,10 @@ class MainWindow(QMainWindow):
self.businesstabWidget = QTabWidget()
mainLayout.addWidget(self.businesstabWidget)
# 동적으로 사업자 탭 생성
#self.tabs = {}
#for i in range(1, 6): # 예시로 5개의 사업자 탭을 생성
# tabName = f"사업자{i}"
# self.tabs[tabName] = MarketConfigWidget(tabName, self)
# self.businesstabWidget.addTab(self.tabs[tabName], tabName)
percentageTab = MarketConfigWidget("퍼센티설정")
self.businesstabWidget.addTab(percentageTab, "퍼센티설정")
# 동적으로 사업자 탭 생성
for i in range(1, 6):
tabName = f"{i}사업자"
@ -51,11 +51,13 @@ class MainWindow(QMainWindow):
""")
# 버튼 추가
self.loadBusinessButton = QPushButton("현재 사업자 불러오기")
self.loadPercentyButton = QPushButton("현재 퍼센티설정 불러오기")
self.applyBusinessButton = QPushButton("선택된 사업자 적용하기")
mainLayout.addWidget(self.loadBusinessButton)
mainLayout.addWidget(self.loadPercentyButton)
mainLayout.addWidget(self.applyBusinessButton)
self.loadPercentyButton.clicked.connect(self.load_current_percenty_setting)
self.applyBusinessButton.clicked.connect(self.applay_current_business_setting)
# 메뉴바 및 설정 불러오기 액션 추가
menuBar = QMenuBar(self)
self.setMenuBar(menuBar)
@ -84,9 +86,30 @@ class MainWindow(QMainWindow):
except Exception as e:
QMessageBox.critical(self, "오류", f"설정 파일을 불러오는 중 오류가 발생했습니다: {e}")
async def load_current_percenty_setting(self):
if not self.webtask:
self.webtask = WebTask()
await self.webtask.start()
# 여기에 설정 불러오는 추가적인 비동기 작업을 수행합니다.
print("설정 불러오기 작업 완료")
if __name__ == "__main__":
app = QApplication(sys.argv)
async def closeEvent(self, event):
if self.webtask:
await self.webtask.close()
event.accept()
# 메인 프로그램 실행
async def main():
window = MainWindow()
window.show()
webtask = WebTask()
await webtask.start()
# 로그인 성공 후 필요한 작업 수행...
await webtask.close()
if __name__ == "__main__":
asyncio.run(main())
app = QApplication(sys.argv)
sys.exit(app.exec_())

View File

@ -46,11 +46,17 @@ class MarketConfigWidget(QWidget):
self.LotteOn_API_KEY=None
self.LotteOn_OrderCollection=None
self.LotteOn_API_Verification=None
self.initUI()
def initUI(self):
if business_number == '퍼센티설정':
self.initUI_for_percenty()
# self.applyPercentyStyle()
else:
self.initUI_for_business()
def initUI_for_business(self):
print("사업자 UI 생성")
self.infoLayout = QVBoxLayout(self)
self.splitter = QSplitter(Qt.Vertical)
@ -356,4 +362,80 @@ class MarketConfigWidget(QWidget):
row.addWidget(QLabel(label))
row.addWidget(widget)
layout.addLayout(row)
def current_percenty_setting(self):
return None
# def applyPercentyStyle(self):
# print("퍼센티 UI 스타일 적용")
# # "퍼센티설정" 탭에 적용할 특별한 스타일을 여기에서 정의합니다.
# self.setStyleSheet("""
# QLabel {
# background-color: lightgrey; # 배경색 변경
# font-size: 14pt; # 폰트 크기 변경
# font-weight: bold; # 폰트 굵기 변경
# color: red; # 글자색 변경
# }
# """)
def initUI_for_percenty(self):
print("퍼센티 UI 생성")
self.infoLayout = QVBoxLayout(self)
self.splitter = QSplitter(Qt.Vertical)
# 사업자 정보 섹션
self.percentyInfoGroup = QGroupBox("퍼센티 현재 정보")
self.percentyLayout = QVBoxLayout(self.percentyInfoGroup)
self.percentyNameInput = QLineEdit()
self.percentyNumberInput = QLineEdit()
self.addInputField(self.percentyLayout, "사업자 이름", self.percentyNameInput)
self.addInputField(self.percentyLayout, "사업자 번호", self.percentyNumberInput)
# 마켓 정보 섹션
self.marketInfoGroup = QGroupBox("마켓 정보")
self.marketLayout = QVBoxLayout(self.marketInfoGroup)
# 마켓 정보 탭
self.marketTabWidget = QTabWidget()
couPangTab = self.addMarketTabs("쿠팡")
smartStoreTab = self.addMarketTabs("스스")
ESMTab = self.addMarketTabs("ESM")
street11DomesticTab = self.addMarketTabs("Street11국내")
street11Global = self.addMarketTabs("Street11글로벌")
lotterOnTab = self.addMarketTabs("롯데온")
# 탭 바(QTabBar) 스타일 시트 설정
self.marketTabWidget.setStyleSheet("""
QTabBar::tab {
background: lightgray;
font-size: 11pt;
height: 30px;
width: 120px;
}
QTabBar::tab:selected {
background: cyan;
}
""")
self.marketLayout.addWidget(self.marketTabWidget)
self.splitter.addWidget(self.percentyInfoGroup)
self.splitter.addWidget(self.marketInfoGroup)
# 상하 분할 비율 설정 (3:7 비율)
self.splitter.setSizes([300, 700])
self.infoLayout.addWidget(self.splitter)
# 설정 불러오기 및 저장 버튼
self.saveBtn = QPushButton(f'퍼센티 설정가져오기', self)
self.saveBtn.clicked.connect(self.current_percenty_setting)
#self.applyBtn = QPushButton(f'현재 [{self.percenty_number}] 적용하기', self)
self.btnLayout = QHBoxLayout()
self.btnLayout.addWidget(self.saveBtn)
#self.btnLayout.addWidget(self.applyBtn)
self.infoLayout.addLayout(self.btnLayout)

View File

@ -1,7 +1,7 @@
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFormLayout, QMessageBox, QGroupBox, QHBoxLayout
from src.business_info_widget import BusinessInfoWidget # 사업자 정보 위젯 import
from src.config_handler import *
from src.playwright_handler import *
from WebTask import *
class MarketConfigWidget(QWidget):
def __init__(self, business_number, parent=None):

View File

@ -1,25 +0,0 @@
from playwright.async_api import async_playwright
import asyncio
import logging
logger = logging.getLogger(__name__)
async def login_and_update_api_keys(username, password, market_settings):
try:
logger.info("Playwright 세션 시작")
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto('https://www.percenty.com/login')
await page.fill('.ant-input:nth-child(4)', username)
await page.fill('.ant-input:nth-child(1)', password)
await page.click('.ant-btn-primary')
await asyncio.sleep(5) # 대기
logger.info("API 키 업데이트 완료")
await browser.close()
except Exception as e:
logger.error(f"API 키 업데이트 중 오류 발생: {e}", exc_info=True)
await browser.close()

60
src/webTask.py Normal file
View File

@ -0,0 +1,60 @@
from playwright.async_api import async_playwright
import asyncio
import logging
logger = logging.getLogger(__name__)
class WebTask:
def __init__(self):
self.playwright = None
self.browser = None
self.page = None
async def start(self):
self.playwright = await async_playwright().start()
self.browser = await self.playwright.chromium.launch(headless=False) # 또는 headless=True
self.page = await self.browser.new_page()
await self.login_process()
async def login_process():
try:
# Playwright 시작
playwright = await async_playwright().start()
browser = await playwright.chromium.launch(headless=False) # 브라우저 실행
page = await browser.new_page() # 새 페이지 열기
# 웹페이지 접속
await page.goto('https://www.percenty.co.kr')
logger.info("웹페이지 접속 완료")
# 로그인 버튼 클릭
await page.click(".signList > .ant-btn-default > span")
logger.info("로그인 페이지로 이동")
# 로그인 정보 입력
await page.fill(".ant-input:nth-child(4)", "your_username") # ID 입력
await page.fill(".ant-input:nth-child(1)", "your_password") # PW 입력
logger.info("로그인 정보 입력 완료")
# 로그인 실행
await page.click(".ant-btn-primary")
logger.info("로그인 시도")
# 로그인 성공 확인
login_check = await page.inner_text(".ant-space-item:nth-child(3) > .ant-typography")
if login_check == "your_username":
logger.info("로그인 성공")
# 로그인 성공 후 쿠키/세션 저장
cookies = await page.context.cookies()
return {"status": "Success", "username": login_check, "cookies": cookies}
else:
logger.error("로그인 실패")
return {"status": "Failed"}
except Exception as e:
logger.error(f"로그인 과정에서 예외 발생: {e}")
return {"status": "Error"}
async def close(self):
await self.browser.close()
await self.playwright.stop()