Merge branch 'master' of https://git.cckb9998.synology.me/ckh08045/ChangePercenty
This commit is contained in:
commit
340a03dfa7
|
|
@ -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
49
main.py
|
|
@ -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_())
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -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()
|
||||
Loading…
Reference in New Issue