10.13 정리중
This commit is contained in:
parent
ae42321b4f
commit
6be03a3c0b
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Python Debugger: Current File",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -66340,3 +66340,841 @@ TypeError: 'NoneType' object does not support item assignment
|
|||
2024-10-12 23:17:08,826 - gui.py:736 - default_logger - DEBUG - 3/[31]개 상품 수정 완료.
|
||||
2024-10-12 23:17:08,827 - gui.py:678 - default_logger - DEBUG - 번역 작업이 중단되었습니다.
|
||||
2024-10-12 23:17:11,210 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:23:42,172 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:23:42,173 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:23:42,204 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:23:42,204 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:23:42,211 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:23:42,329 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:23:42,336 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:23:47,617 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:23:48,853 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:23:48,854 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:23:48,854 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:23:48,854 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:23:52,543 - gui.py:555 - default_logger - DEBUG - 크무비 설정 버튼 클릭됨
|
||||
2024-10-13 11:23:56,957 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:23:56,970 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:23:56,973 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 69950
|
||||
2024-10-13 11:23:56,973 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:23:57,184 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:23:58,975 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:23:59,056 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:23:59,056 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:23:59,426 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:23:59,426 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:23:59,426 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:23:59,426 - price.py:33 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:24:02,569 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:24:02,571 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:24:02,571 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:24:03,168 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:24:03,179 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:24:03,180 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:24:03,188 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:24:03,189 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:24:03,208 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:24:03,749 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:24:04,342 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:24:04,362 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:24:04,368 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:24:04,369 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:24:04,380 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:24:04,386 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:24:04,399 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:24:04,400 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:24:05,195 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:24:05,195 - price.py:65 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:24:05,427 - price.py:621 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:24:05,445 - price.py:626 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:24:05,445 - price.py:73 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:24:05,469 - price.py:524 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:24:05,511 - price.py:601 - default_logger - ERROR - Failed to collect product costs and prices: 'coroutine' object has no attribute 'replace'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 569, in collect_product_costs_and_prices
|
||||
cost_value = int(float(await product_cost_element.input_value().replace(",", "")))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'coroutine' object has no attribute 'replace'
|
||||
2024-10-13 11:24:05,521 - price.py:500 - default_logger - ERROR - 원가기반 가격 계산 중 중 오류 발생: unsupported operand type(s) for /: 'PriceHandler' and 'float'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 484, in calc_initial_price
|
||||
initial_cost_price = self.round_to_UP(initial_cost_price)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "H:\py\autoTrans\price.py", line 706, in round_to_UP
|
||||
rounded_number = math.ceil(number / nearest) * nearest
|
||||
~~~~~~~^~~~~~~~~
|
||||
TypeError: unsupported operand type(s) for /: 'PriceHandler' and 'float'
|
||||
2024-10-13 11:24:05,521 - price.py:83 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:24:05,524 - price.py:122 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 84, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:24:05,700 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:24:05,702 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:24:06,044 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:24:06,047 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:24:06,047 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:24:06,142 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:24:06,525 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:24:07,056 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:24:07,070 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:24:07,072 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:24:07,073 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:24:07,083 - gui.py:757 - default_logger - DEBUG - 번역 작업을 중단합니다...
|
||||
2024-10-13 11:24:07,086 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:24:07,092 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:24:07,108 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:24:07,111 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:24:07,496 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:24:07,497 - price.py:65 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:24:07,639 - price.py:621 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:24:07,661 - price.py:626 - default_logger - DEBUG - 해외 배송비 값: 30000
|
||||
2024-10-13 11:24:07,661 - price.py:73 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:24:07,685 - price.py:524 - default_logger - DEBUG - 옵션 수: 4
|
||||
2024-10-13 11:24:07,713 - price.py:601 - default_logger - ERROR - Failed to collect product costs and prices: 'coroutine' object has no attribute 'replace'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 569, in collect_product_costs_and_prices
|
||||
cost_value = int(float(await product_cost_element.input_value().replace(",", "")))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'coroutine' object has no attribute 'replace'
|
||||
2024-10-13 11:24:07,718 - price.py:500 - default_logger - ERROR - 원가기반 가격 계산 중 중 오류 발생: unsupported operand type(s) for /: 'PriceHandler' and 'float'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 484, in calc_initial_price
|
||||
initial_cost_price = self.round_to_UP(initial_cost_price)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "H:\py\autoTrans\price.py", line 706, in round_to_UP
|
||||
rounded_number = math.ceil(number / nearest) * nearest
|
||||
~~~~~~~^~~~~~~~~
|
||||
TypeError: unsupported operand type(s) for /: 'PriceHandler' and 'float'
|
||||
2024-10-13 11:24:07,718 - price.py:83 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:24:07,718 - price.py:122 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 84, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:24:07,886 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:24:07,887 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:24:08,180 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:24:08,303 - browser_control.py:502 - default_logger - DEBUG - 저장 버튼 클릭 중 오류: Keyboard.press: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\browser_control.py", line 499, in save_and_ecs_product_edit
|
||||
await self.page.keyboard.press("Escape")
|
||||
File "H:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 1302, in press
|
||||
return mapping.from_maybe_impl(await self._impl_obj.press(key=key, delay=delay))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "H:\py\autoTrans\Lib\site-packages\playwright\_impl\_input.py", line 38, in press
|
||||
await self._channel.send("keyboardPress", locals_to_params(locals()))
|
||||
File "H:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "H:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Keyboard.press: Target page, context or browser has been closed
|
||||
2024-10-13 11:24:08,308 - gui.py:736 - default_logger - DEBUG - 2/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:24:08,310 - gui.py:678 - default_logger - DEBUG - 번역 작업이 중단되었습니다.
|
||||
2024-10-13 11:28:32,838 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:28:32,838 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:28:32,848 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:28:32,848 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:28:32,848 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:28:32,962 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:28:32,964 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:28:34,581 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:28:35,451 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:28:35,451 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:28:35,451 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:28:35,451 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:28:39,526 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:28:39,536 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:28:39,540 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 70174
|
||||
2024-10-13 11:28:39,540 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:28:39,731 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:28:41,358 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:28:41,514 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:28:41,515 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:28:41,800 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:28:41,801 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:28:41,801 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:28:41,802 - price.py:33 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:28:43,585 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:28:43,587 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:28:43,587 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:28:44,182 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:28:44,182 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:28:44,182 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:28:44,197 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:28:44,199 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:28:44,219 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:28:44,734 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:28:45,306 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:28:45,325 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:28:45,556 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:28:45,556 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:28:45,567 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:28:45,572 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:28:45,588 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:28:45,588 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:28:46,336 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:28:46,337 - price.py:65 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:28:46,544 - price.py:625 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:28:46,610 - price.py:630 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:28:46,610 - price.py:73 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:28:46,636 - price.py:524 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:28:47,214 - price.py:599 - default_logger - DEBUG - 상품원가가 모였습니다.: [185, 185, 185, 185, 185, 308, 308, 335, 358, 358, 358, 358, 358, 358, 358, 358, 358, 525]
|
||||
2024-10-13 11:28:47,214 - price.py:600 - default_logger - DEBUG - 최소원가: 37000, 최대원가: 105000, 평균원가: 63000, 상위평균원가: 84000
|
||||
2024-10-13 11:28:47,214 - price.py:485 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 108000
|
||||
2024-10-13 11:28:47,229 - price.py:464 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 415, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = config.get('thresholds', [])
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:28:47,229 - price.py:489 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:28:47,229 - price.py:303 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 240, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:28:47,229 - price.py:493 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:28:47,229 - price.py:496 - default_logger - DEBUG - 원가기반 가격: 118000
|
||||
2024-10-13 11:28:47,229 - price.py:83 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:28:47,229 - price.py:122 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 84, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:28:47,320 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:28:47,320 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:28:47,693 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:28:47,696 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:28:47,696 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:28:47,786 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:28:48,158 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:28:48,464 - gui.py:757 - default_logger - DEBUG - 번역 작업을 중단합니다...
|
||||
2024-10-13 11:28:48,669 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:28:48,691 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:28:48,691 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:28:48,693 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:28:48,703 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:28:48,710 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:28:48,720 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:28:48,720 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:28:49,119 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:28:49,120 - price.py:65 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:28:49,254 - price.py:625 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:28:49,271 - price.py:630 - default_logger - DEBUG - 해외 배송비 값: 30000
|
||||
2024-10-13 11:28:49,272 - price.py:73 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:28:49,297 - price.py:524 - default_logger - DEBUG - 옵션 수: 4
|
||||
2024-10-13 11:28:49,455 - price.py:599 - default_logger - DEBUG - 상품원가가 모였습니다.: [189, 189, 189, 229]
|
||||
2024-10-13 11:28:49,455 - price.py:600 - default_logger - DEBUG - 최소원가: 38000, 최대원가: 46000, 평균원가: 40000, 상위평균원가: 43000
|
||||
2024-10-13 11:28:49,455 - price.py:485 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 56000
|
||||
2024-10-13 11:28:49,455 - price.py:464 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 415, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = config.get('thresholds', [])
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:28:49,455 - price.py:489 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:28:49,455 - price.py:303 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 240, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:28:49,455 - price.py:493 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:28:49,455 - price.py:496 - default_logger - DEBUG - 원가기반 가격: 66000
|
||||
2024-10-13 11:28:49,455 - price.py:83 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:28:49,455 - price.py:122 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 84, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:28:49,562 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:28:49,562 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:28:49,899 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:28:49,902 - gui.py:736 - default_logger - DEBUG - 2/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:28:49,902 - gui.py:678 - default_logger - DEBUG - 번역 작업이 중단되었습니다.
|
||||
2024-10-13 11:28:50,652 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:41:53,310 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:41:53,310 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:41:53,320 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:41:53,321 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:41:53,321 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:41:53,321 - price.py:56 - default_logger - DEBUG - self.shipping_config : {'min_price_for_extra_shipping': 50000, 'thresholds': [50000, 100000, 200000], 'increment_unit': 20000, 'additional_costs': [5000, 7000, 9000]}
|
||||
2024-10-13 11:41:53,321 - price.py:58 - default_logger - DEBUG - self.margin_config : {'thresholds': [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], 'additional_margins': [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]}
|
||||
2024-10-13 11:41:53,321 - price.py:60 - default_logger - DEBUG - self.optimal_price_config : {'sold_price': None, 'cost_price2X': None, 'calculated_price': None, 'lower_bound': 0.85, 'upper_bound': 1.15, 'ratios': {'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2}}
|
||||
2024-10-13 11:41:53,415 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:41:53,415 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:47:55,625 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:48:00,000 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:48:00,001 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:48:00,010 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:48:00,010 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:48:00,010 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:48:00,010 - price.py:56 - default_logger - DEBUG - self.shipping_config : {'min_price_for_extra_shipping': 50000, 'thresholds': [50000, 100000, 200000], 'increment_unit': 20000, 'additional_costs': [5000, 7000, 9000]}
|
||||
2024-10-13 11:48:00,010 - price.py:58 - default_logger - DEBUG - self.margin_config : {'thresholds': [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], 'additional_margins': [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]}
|
||||
2024-10-13 11:48:00,010 - price.py:60 - default_logger - DEBUG - self.optimal_price_config : {'sold_price': None, 'cost_price2X': None, 'calculated_price': None, 'lower_bound': 0.85, 'upper_bound': 1.15, 'ratios': {'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2}}
|
||||
2024-10-13 11:48:00,113 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:48:00,113 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:48:02,490 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:48:04,050 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:48:04,052 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:48:04,052 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:48:04,052 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:48:08,379 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:48:08,383 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:48:08,383 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 397790
|
||||
2024-10-13 11:48:08,383 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:48:08,577 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:48:10,337 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:48:10,515 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:48:10,515 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:48:10,829 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:48:10,830 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:48:10,831 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:48:10,832 - price.py:33 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:48:13,324 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:48:13,324 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:48:13,326 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:48:13,912 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:48:13,917 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:48:13,918 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:48:13,925 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:48:13,925 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:48:13,948 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:48:14,471 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:48:15,044 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:48:15,060 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:48:15,304 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:48:15,304 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:48:15,324 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:48:15,331 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:48:15,339 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:48:15,347 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:48:16,102 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:48:16,102 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:48:16,335 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:48:16,384 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:48:16,384 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:48:16,409 - price.py:527 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:48:16,979 - price.py:602 - default_logger - DEBUG - 상품원가가 모였습니다.: [185, 185, 185, 185, 185, 308, 308, 335, 358, 358, 358, 358, 358, 358, 358, 358, 358, 525]
|
||||
2024-10-13 11:48:16,981 - price.py:603 - default_logger - DEBUG - 최소원가: 37000, 최대원가: 105000, 평균원가: 63000, 상위평균원가: 84000
|
||||
2024-10-13 11:48:16,981 - price.py:488 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 108000
|
||||
2024-10-13 11:48:16,981 - price.py:467 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 418, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:48:16,983 - price.py:492 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:48:16,984 - price.py:306 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 243, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:48:16,984 - price.py:496 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:48:16,984 - price.py:499 - default_logger - DEBUG - 원가기반 가격: 118000
|
||||
2024-10-13 11:48:16,984 - price.py:86 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:48:16,984 - price.py:125 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 87, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:48:17,132 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:48:17,133 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:48:17,470 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:48:17,473 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:48:17,474 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:48:17,565 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:48:17,942 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:48:18,311 - gui.py:757 - default_logger - DEBUG - 번역 작업을 중단합니다...
|
||||
2024-10-13 11:48:18,456 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:48:18,464 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:48:18,464 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:48:18,464 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:48:18,483 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:48:18,490 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:48:18,499 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:48:18,499 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:48:18,894 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:48:18,894 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:48:19,053 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:48:19,087 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 30000
|
||||
2024-10-13 11:48:19,087 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:48:19,112 - price.py:527 - default_logger - DEBUG - 옵션 수: 4
|
||||
2024-10-13 11:48:19,197 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:54:17,684 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:54:17,684 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:54:17,700 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:54:17,700 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:54:17,700 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:54:17,701 - price.py:56 - default_logger - DEBUG - self.shipping_config : {'min_price_for_extra_shipping': 50000, 'thresholds': [50000, 100000, 200000], 'increment_unit': 20000, 'additional_costs': [5000, 7000, 9000]}
|
||||
2024-10-13 11:54:17,701 - price.py:58 - default_logger - DEBUG - self.margin_config : {'thresholds': [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], 'additional_margins': [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]}
|
||||
2024-10-13 11:54:17,701 - price.py:60 - default_logger - DEBUG - self.optimal_price_config : {'sold_price': None, 'cost_price2X': None, 'calculated_price': None, 'lower_bound': 0.85, 'upper_bound': 1.15, 'ratios': {'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2}}
|
||||
2024-10-13 11:54:17,840 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:54:17,840 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:54:23,375 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:54:23,375 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:54:23,377 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:54:23,377 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:54:27,878 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:54:27,894 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:54:27,899 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 135768
|
||||
2024-10-13 11:54:27,899 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:54:28,212 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:54:29,793 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:54:30,026 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:54:30,029 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:54:30,387 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:54:30,389 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:54:30,389 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:54:30,389 - price.py:33 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:54:43,859 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:54:50,742 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:54:50,743 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:54:50,743 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:54:51,417 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:54:51,429 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:54:51,429 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:54:51,443 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:54:51,443 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:54:51,505 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:54:52,037 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:54:52,556 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:54:52,587 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:54:52,827 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:54:52,828 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:54:52,846 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:54:52,863 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:54:52,893 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:54:52,894 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:54:53,639 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:54:53,639 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:54:53,859 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:54:53,920 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:54:53,920 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:54:53,967 - price.py:527 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:54:55,077 - price.py:602 - default_logger - DEBUG - 상품원가가 모였습니다.: [185, 185, 185, 185, 185, 308, 308, 335, 358, 358, 358, 358, 358, 358, 358, 358, 358, 525]
|
||||
2024-10-13 11:54:55,077 - price.py:603 - default_logger - DEBUG - 최소원가: 37000, 최대원가: 105000, 평균원가: 63000, 상위평균원가: 84000
|
||||
2024-10-13 11:54:55,092 - price.py:488 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 108000
|
||||
2024-10-13 11:54:55,092 - price.py:467 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 418, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:54:55,092 - price.py:492 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:54:55,092 - price.py:306 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 243, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:54:55,092 - price.py:496 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:54:55,092 - price.py:499 - default_logger - DEBUG - 원가기반 가격: 118000
|
||||
2024-10-13 11:54:55,092 - price.py:86 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:54:55,092 - price.py:125 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 87, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:54:55,251 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:54:55,253 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:54:55,553 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:54:55,556 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:54:55,557 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:54:55,672 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:54:56,036 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:54:56,560 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:54:56,590 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:54:56,592 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:54:56,593 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:54:56,615 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:54:56,630 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:54:56,665 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:54:56,667 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:54:57,035 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:54:57,036 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:54:57,173 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:54:57,206 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 30000
|
||||
2024-10-13 11:54:57,206 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:54:57,250 - price.py:527 - default_logger - DEBUG - 옵션 수: 4
|
||||
2024-10-13 11:54:57,269 - gui.py:757 - default_logger - DEBUG - 번역 작업을 중단합니다...
|
||||
2024-10-13 11:54:57,510 - price.py:602 - default_logger - DEBUG - 상품원가가 모였습니다.: [189, 189, 189, 229]
|
||||
2024-10-13 11:54:57,512 - price.py:603 - default_logger - DEBUG - 최소원가: 38000, 최대원가: 46000, 평균원가: 40000, 상위평균원가: 43000
|
||||
2024-10-13 11:54:57,512 - price.py:488 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 56000
|
||||
2024-10-13 11:54:57,514 - price.py:467 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 418, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:54:57,514 - price.py:492 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:54:57,515 - price.py:306 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 243, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:54:57,517 - price.py:496 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:54:57,517 - price.py:499 - default_logger - DEBUG - 원가기반 가격: 66000
|
||||
2024-10-13 11:54:57,518 - price.py:86 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:54:57,518 - price.py:125 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 87, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:54:57,620 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:54:57,620 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:54:58,057 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:54:58,059 - gui.py:736 - default_logger - DEBUG - 2/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:54:58,060 - gui.py:678 - default_logger - DEBUG - 번역 작업이 중단되었습니다.
|
||||
2024-10-13 11:56:58,217 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:56:58,217 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:56:58,231 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:56:58,231 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:56:58,231 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:56:58,231 - price.py:56 - default_logger - DEBUG - self.shipping_config : {'min_price_for_extra_shipping': 50000, 'thresholds': [50000, 100000, 200000], 'increment_unit': 20000, 'additional_costs': [5000, 7000, 9000]}
|
||||
2024-10-13 11:56:58,231 - price.py:58 - default_logger - DEBUG - self.margin_config : {'thresholds': [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], 'additional_margins': [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]}
|
||||
2024-10-13 11:56:58,231 - price.py:60 - default_logger - DEBUG - self.optimal_price_config : {'sold_price': None, 'cost_price2X': None, 'calculated_price': None, 'lower_bound': 0.85, 'upper_bound': 1.15, 'ratios': {'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2}}
|
||||
2024-10-13 11:56:58,366 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:56:58,366 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:57:00,120 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:57:01,264 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:57:01,265 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:57:01,265 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:57:01,265 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:57:05,349 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:57:05,369 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:57:05,371 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 266872
|
||||
2024-10-13 11:57:05,372 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:57:05,701 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:57:07,423 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:57:07,588 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:57:07,588 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:57:07,957 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:57:07,960 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:57:07,960 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:57:07,960 - price.py:33 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:57:10,216 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:57:10,218 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:57:10,218 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:57:10,828 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:57:10,852 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:57:10,854 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:57:10,860 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:57:10,860 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:57:10,910 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:57:11,494 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:57:12,060 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:57:12,092 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:57:12,326 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:57:12,326 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:57:12,352 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:57:12,355 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:57:12,387 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:57:12,387 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:57:13,127 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:57:13,128 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:57:13,342 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:57:13,398 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:57:13,400 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:57:13,443 - price.py:527 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:57:14,503 - price.py:602 - default_logger - DEBUG - 상품원가가 모였습니다.: [185, 185, 185, 185, 185, 308, 308, 335, 358, 358, 358, 358, 358, 358, 358, 358, 358, 525]
|
||||
2024-10-13 11:57:14,505 - price.py:603 - default_logger - DEBUG - 최소원가: 37000, 최대원가: 105000, 평균원가: 63000, 상위평균원가: 84000
|
||||
2024-10-13 11:57:14,507 - price.py:488 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 108000
|
||||
2024-10-13 11:57:14,507 - price.py:467 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 418, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:57:14,507 - price.py:492 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:57:14,507 - price.py:306 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 243, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:57:14,507 - price.py:496 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:57:14,507 - price.py:499 - default_logger - DEBUG - 원가기반 가격: 118000
|
||||
2024-10-13 11:57:14,507 - price.py:86 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:57:14,507 - price.py:125 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 87, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:57:14,609 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:57:14,612 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:57:14,975 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:57:14,977 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:57:14,977 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:57:15,077 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:57:15,453 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:57:15,957 - gui.py:757 - default_logger - DEBUG - 번역 작업을 중단합니다...
|
||||
2024-10-13 11:57:15,971 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:57:15,998 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:57:16,000 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:57:16,001 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:57:16,021 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:57:16,037 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:57:16,071 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:57:16,073 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:57:16,479 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:57:16,480 - price.py:68 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:57:16,671 - price.py:628 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:57:16,724 - price.py:633 - default_logger - DEBUG - 해외 배송비 값: 30000
|
||||
2024-10-13 11:57:16,727 - price.py:76 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:57:16,767 - price.py:527 - default_logger - DEBUG - 옵션 수: 4
|
||||
2024-10-13 11:57:16,821 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:57:16,840 - price.py:608 - default_logger - ERROR - Failed to collect product costs and prices: Page.wait_for_selector: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 570, in collect_product_costs_and_prices
|
||||
standard_selling_price_element = await self.page.wait_for_selector(standard_selling_price_locator)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 7999, in wait_for_selector
|
||||
await self._impl_obj.wait_for_selector(
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_page.py", line 397, in wait_for_selector
|
||||
return await self._main_frame.wait_for_selector(**locals_to_params(locals()))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 323, in wait_for_selector
|
||||
await self._channel.send("waitForSelector", locals_to_params(locals()))
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Page.wait_for_selector: Target page, context or browser has been closed
|
||||
2024-10-13 11:57:16,843 - price.py:488 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 26000
|
||||
2024-10-13 11:57:16,846 - price.py:467 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 418, in calculate_additional_margin_with_extended_thresholds
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:57:16,849 - price.py:492 - default_logger - DEBUG - 계산원가 기준 해외배송비: 0
|
||||
2024-10-13 11:57:16,849 - price.py:306 - default_logger - ERROR - 계산된 값 입력 실패: 'NoneType' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 243, in calculate_shipping_cost_with_extended_thresholds
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'NoneType' object has no attribute 'get'
|
||||
2024-10-13 11:57:16,849 - price.py:496 - default_logger - DEBUG - 계산원가 기준 더하기마진: 10000
|
||||
2024-10-13 11:57:16,849 - price.py:499 - default_logger - DEBUG - 원가기반 가격: 36000
|
||||
2024-10-13 11:57:16,849 - price.py:86 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:57:16,849 - price.py:125 - default_logger - ERROR - 가격 수정 중 오류 발생: 'NoneType' object does not support item assignment
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 87, in process_price
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object does not support item assignment
|
||||
2024-10-13 11:57:16,976 - browser_control.py:510 - default_logger - DEBUG - 저장 버튼 클릭 중 오류: Page.click: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\browser_control.py", line 507, in save_product_edit
|
||||
await self.page.click(self.save_button_locator)
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 9625, in click
|
||||
await self._impl_obj.click(
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_page.py", line 777, in click
|
||||
return await self._main_frame.click(**locals_to_params(locals()))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 488, in click
|
||||
await self._channel.send("click", locals_to_params(locals()))
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Page.click: Target page, context or browser has been closed
|
||||
2024-10-13 11:57:16,979 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:57:17,001 - browser_control.py:502 - default_logger - DEBUG - 저장 버튼 클릭 중 오류: Page.click: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\browser_control.py", line 498, in save_and_ecs_product_edit
|
||||
await self.page.click(self.save_button_locator)
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 9625, in click
|
||||
await self._impl_obj.click(
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_page.py", line 777, in click
|
||||
return await self._main_frame.click(**locals_to_params(locals()))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 488, in click
|
||||
await self._channel.send("click", locals_to_params(locals()))
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Page.click: Target page, context or browser has been closed
|
||||
2024-10-13 11:57:17,008 - gui.py:736 - default_logger - DEBUG - 2/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:57:17,013 - gui.py:678 - default_logger - DEBUG - 번역 작업이 중단되었습니다.
|
||||
2024-10-13 11:59:02,903 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-10-13 11:59:02,904 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-10-13 11:59:02,919 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-10-13 11:59:02,919 - vertexAI.py:40 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-10-13 11:59:02,919 - vertexAI.py:43 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-10-13 11:59:02,920 - price.py:67 - default_logger - DEBUG - self.shipping_config : {'min_price_for_extra_shipping': 50000, 'thresholds': [50000, 100000, 200000], 'increment_unit': 20000, 'additional_costs': [5000, 7000, 9000]}
|
||||
2024-10-13 11:59:02,920 - price.py:69 - default_logger - DEBUG - self.margin_config : {'thresholds': [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], 'additional_margins': [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]}
|
||||
2024-10-13 11:59:02,920 - price.py:71 - default_logger - DEBUG - self.optimal_price_config : {'sold_price': None, 'cost_price2X': None, 'calculated_price': None, 'lower_bound': 0.85, 'upper_bound': 1.15, 'ratios': {'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2}}
|
||||
2024-10-13 11:59:03,051 - cmb_diag.py:368 - default_logger - DEBUG - CrMoBi 단계 설정이 위젯에 반영되었습니다.
|
||||
2024-10-13 11:59:03,051 - gui.py:104 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-10-13 11:59:04,455 - gui.py:431 - default_logger - DEBUG - 가격 수정 버튼 - 활성화 선택
|
||||
2024-10-13 11:59:05,256 - gui.py:524 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-10-13 11:59:05,258 - gui.py:525 - default_logger - DEBUG - self.browser_controller.page : None
|
||||
2024-10-13 11:59:05,258 - gui.py:560 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-10-13 11:59:05,258 - browser_control.py:61 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-10-13 11:59:09,514 - browser_control.py:76 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-10-13 11:59:09,532 - browser_control.py:81 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-10-13 11:59:09,534 - browser_control.py:88 - default_logger - DEBUG - 크롬 창 핸들: 266780
|
||||
2024-10-13 11:59:09,534 - browser_control.py:94 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-10-13 11:59:09,766 - browser_control.py:112 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-10-13 11:59:11,383 - browser_control.py:252 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-10-13 11:59:11,504 - browser_control.py:258 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-10-13 11:59:11,505 - gui.py:584 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-10-13 11:59:11,936 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-10-13 11:59:11,938 - option.py:37 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:59:11,939 - title.py:31 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:59:11,939 - price.py:45 - default_logger - DEBUG - page객체 업데이트 : <Page url='https://www.percenty.co.kr/'>
|
||||
2024-10-13 11:59:13,207 - gui.py:634 - default_logger - DEBUG - 번역 작업 버튼 클릭됨
|
||||
2024-10-13 11:59:13,207 - gui.py:639 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-10-13 11:59:13,210 - browser_control.py:679 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-10-13 11:59:13,863 - browser_control.py:689 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-10-13 11:59:13,879 - browser_control.py:173 - default_logger - DEBUG - 가져온 텍스트: 총 31개 상품
|
||||
2024-10-13 11:59:13,879 - gui.py:663 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-10-13 11:59:13,892 - browser_control.py:318 - default_logger - DEBUG - 현재 페이지의 수정할 상품 개수: 20
|
||||
2024-10-13 11:59:13,896 - gui.py:681 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:59:13,948 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:59:14,477 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:59:15,021 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:59:15,049 - title.py:94 - default_logger - DEBUG - 원본 상품명: 液压电磁阀双向换向阀220v24vDSG-02-3C2/2B2/2B3B/3C3/3C6/03/D2
|
||||
2024-10-13 11:59:15,277 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:59:15,277 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:59:15,307 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:59:15,323 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:59:15,348 - title.py:214 - default_logger - DEBUG - 카테고리 text = 생활/건강-공구-에어공구-유압공구
|
||||
2024-10-13 11:59:15,350 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:59:16,092 - browser_control.py:381 - default_logger - DEBUG - 가격 탭 클릭 완료.
|
||||
2024-10-13 11:59:16,092 - price.py:79 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:59:16,298 - price.py:639 - default_logger - DEBUG - 더하기 마진 값: 10000
|
||||
2024-10-13 11:59:16,369 - price.py:644 - default_logger - DEBUG - 해외 배송비 값: 50000
|
||||
2024-10-13 11:59:16,369 - price.py:87 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
2024-10-13 11:59:16,413 - price.py:538 - default_logger - DEBUG - 옵션 수: 18
|
||||
2024-10-13 11:59:17,539 - price.py:613 - default_logger - DEBUG - 상품원가가 모였습니다.: [185, 185, 185, 185, 185, 308, 308, 335, 358, 358, 358, 358, 358, 358, 358, 358, 358, 525]
|
||||
2024-10-13 11:59:17,541 - price.py:614 - default_logger - DEBUG - 최소원가: 37000, 최대원가: 105000, 평균원가: 63000, 상위평균원가: 84000
|
||||
2024-10-13 11:59:17,541 - price.py:499 - default_logger - DEBUG - 원가에 카드수수료 4.0%, 기본마진 24.0% 적용된 계산원가: 108000
|
||||
2024-10-13 11:59:17,543 - price.py:435 - default_logger - DEBUG - 기존 구간: [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000]
|
||||
2024-10-13 11:59:17,543 - price.py:436 - default_logger - DEBUG - 기존 추가 마진: [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]
|
||||
2024-10-13 11:59:17,543 - price.py:469 - default_logger - DEBUG - 적용된 구간: 150000, 계산된 마진: 17000
|
||||
2024-10-13 11:59:17,546 - price.py:503 - default_logger - DEBUG - 계산원가 기준 해외배송비: 17000
|
||||
2024-10-13 11:59:17,546 - price.py:262 - default_logger - DEBUG - 기존 구간: [50000, 100000, 200000]
|
||||
2024-10-13 11:59:17,547 - price.py:263 - default_logger - DEBUG - 기존 추가 비용: [5000, 7000, 9000]
|
||||
2024-10-13 11:59:17,547 - price.py:298 - default_logger - DEBUG - 적용된 구간: 100000, 계산된 구간추가배송비: 10000
|
||||
2024-10-13 11:59:17,549 - price.py:293 - default_logger - DEBUG - 적용된 구간: 200000, 계산된 구간추가배송비: 0
|
||||
2024-10-13 11:59:17,549 - price.py:308 - default_logger - DEBUG - 최종 계산된 배송비: 20000
|
||||
2024-10-13 11:59:17,550 - price.py:507 - default_logger - DEBUG - 계산원가 기준 더하기마진: 20000
|
||||
2024-10-13 11:59:17,550 - price.py:510 - default_logger - DEBUG - 원가기반 가격: 145000
|
||||
2024-10-13 11:59:17,550 - price.py:97 - default_logger - DEBUG - 적정 판매가를 계산합니다.
|
||||
2024-10-13 11:59:17,552 - price.py:400 - default_logger - DEBUG - 비율 기반 계산된 가격: 80000, 상한: 194000, 하한: 143000
|
||||
2024-10-13 11:59:17,552 - price.py:404 - default_logger - DEBUG - 가격이 하한을 밑돌아서 하한으로 조정됨: 143000
|
||||
2024-10-13 11:59:17,554 - price.py:102 - default_logger - DEBUG - 계산된 적정 판매가: 143000
|
||||
2024-10-13 11:59:17,554 - price.py:105 - default_logger - DEBUG - 더하기 마진을 적정 판매가에 맞게 조정합니다.
|
||||
2024-10-13 11:59:17,555 - price.py:334 - default_logger - DEBUG - 총 옵션 기준 판매가 평균: 138000
|
||||
2024-10-13 11:59:17,555 - price.py:338 - default_logger - DEBUG - 적정 판매가와 기준 판매가 차이: 5000
|
||||
2024-10-13 11:59:17,558 - price.py:435 - default_logger - DEBUG - 기존 구간: [50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000]
|
||||
2024-10-13 11:59:17,558 - price.py:436 - default_logger - DEBUG - 기존 추가 마진: [5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000]
|
||||
2024-10-13 11:59:17,559 - price.py:469 - default_logger - DEBUG - 적용된 구간: 150000, 계산된 마진: 24000
|
||||
2024-10-13 11:59:17,559 - price.py:108 - default_logger - DEBUG - 조정된 더하기 마진: 25000
|
||||
2024-10-13 11:59:17,559 - price.py:262 - default_logger - DEBUG - 기존 구간: [50000, 100000, 200000]
|
||||
2024-10-13 11:59:17,562 - price.py:263 - default_logger - DEBUG - 기존 추가 비용: [5000, 7000, 9000]
|
||||
2024-10-13 11:59:17,562 - price.py:308 - default_logger - DEBUG - 최종 계산된 배송비: 10000
|
||||
2024-10-13 11:59:17,562 - price.py:114 - default_logger - DEBUG - 적정판매가 기준으로 재계산된 해외배송비: 10000
|
||||
2024-10-13 11:59:17,564 - price.py:136 - default_logger - ERROR - 가격 수정 중 오류 발생: LocatorManager.get_category_data() missing 1 required positional argument: 'category'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 117, in process_price
|
||||
extra_shipping = self.calculate_category_extra_shipping(category, optimal_price)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "H:\py\autoTrans\price.py", line 752, in calculate_category_extra_shipping
|
||||
category_data = self.locator_manager.get_category_data(category)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
TypeError: LocatorManager.get_category_data() missing 1 required positional argument: 'category'
|
||||
2024-10-13 11:59:17,743 - browser_control.py:508 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
|
||||
2024-10-13 11:59:17,745 - gui.py:731 - default_logger - DEBUG - 상품 세부사항 저장 중...
|
||||
2024-10-13 11:59:18,108 - browser_control.py:500 - default_logger - DEBUG - 상품 수정 내용 저장 및 ECS 완료.
|
||||
2024-10-13 11:59:18,111 - gui.py:736 - default_logger - DEBUG - 1/[31]개 상품 수정 완료.
|
||||
2024-10-13 11:59:18,112 - gui.py:681 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
|
||||
2024-10-13 11:59:18,181 - browser_control.py:353 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-10-13 11:59:18,557 - browser_control.py:356 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-10-13 11:59:19,105 - title.py:91 - default_logger - DEBUG - 원본 상품명을 가져오는 중입니다.
|
||||
2024-10-13 11:59:19,134 - title.py:94 - default_logger - DEBUG - 원본 상품명: 小型香水瓶分装中套机喷雾头胶水瓶内塞压盖机卡口封口手压封盖机
|
||||
2024-10-13 11:59:19,136 - title.py:179 - default_logger - DEBUG - 마켓 : ss - 카테고리 텍스트를 가져오는 중입니다.
|
||||
2024-10-13 11:59:19,136 - title.py:188 - default_logger - DEBUG - category_locator : div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2
|
||||
2024-10-13 11:59:19,154 - title.py:192 - default_logger - DEBUG - main_category_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2'>
|
||||
2024-10-13 11:59:19,168 - gui.py:761 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-10-13 11:59:19,184 - title.py:201 - default_logger - DEBUG - category_text_element : <Locator frame=<Frame name= url='https://www.percenty.co.kr/'> selector='div#productMainContentContainerId div.ant-select.ant-select-outlined.css-1li46mu.ant-select-single.ant-select-show-arrow >> nth=2 >> div.ant-col.css-1li46mu:nth-child(1)'>
|
||||
2024-10-13 11:59:19,328 - title.py:223 - default_logger - ERROR - 카테고리 텍스트 가져오기 중 오류 발생: Locator.count: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\title.py", line 203, in get_category
|
||||
if await category_text_element.count():
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 16229, in count
|
||||
return mapping.from_maybe_impl(await self._impl_obj.count())
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_locator.py", line 392, in count
|
||||
return await self._frame._query_count(self._selector)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 128, in _query_count
|
||||
return await self._channel.send("queryCount", {"selector": selector})
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Locator.count: Target page, context or browser has been closed
|
||||
2024-10-13 11:59:19,331 - gui.py:707 - default_logger - DEBUG - 가격수정 : True
|
||||
2024-10-13 11:59:19,350 - browser_control.py:383 - default_logger - DEBUG - 가격 탭 클릭 중 오류: Page.click: Target page, context or browser has been closed
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\browser_control.py", line 380, in click_price_tab
|
||||
await self.page.click(self.price_tab_locator)
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 9625, in click
|
||||
await self._impl_obj.click(
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_page.py", line 777, in click
|
||||
return await self._main_frame.click(**locals_to_params(locals()))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 488, in click
|
||||
await self._channel.send("click", locals_to_params(locals()))
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
playwright._impl._errors.TargetClosedError: Page.click: Target page, context or browser has been closed
|
||||
2024-10-13 11:59:19,355 - price.py:79 - default_logger - DEBUG - 초기 더하기마진과 해외배송비 가격 정보를 수집합니다.
|
||||
2024-10-13 11:59:19,372 - price.py:648 - default_logger - ERROR - 해외배송비와 더하기 마진 수집 중 오류 발생: Page.wait_for_selector: Connection closed while reading from the driver
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\price.py", line 636, in get_plusmargin_and_shipping_values
|
||||
margin_element = await self.page.wait_for_selector(self.plus_margin_locator)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\async_api\_generated.py", line 7999, in wait_for_selector
|
||||
await self._impl_obj.wait_for_selector(
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_page.py", line 397, in wait_for_selector
|
||||
return await self._main_frame.wait_for_selector(**locals_to_params(locals()))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_frame.py", line 323, in wait_for_selector
|
||||
await self._channel.send("waitForSelector", locals_to_params(locals()))
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
|
||||
return await self._connection.wrap_api_call(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "h:\py\autoTrans\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
|
||||
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
|
||||
Exception: Page.wait_for_selector: Connection closed while reading from the driver
|
||||
2024-10-13 11:59:19,375 - price.py:85 - default_logger - DEBUG - 더하기마진값5000을 팔린가격5000으로 간주
|
||||
2024-10-13 11:59:19,376 - price.py:87 - default_logger - DEBUG - 옵션 가격 정보를 수집합니다.
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ option_input_selector_template = '//*[@id="productMainContentContainerId"]/div[1
|
|||
single_option_locator = '//div[@id="productMainContentContainerId"]//label[contains(@class, 'ant-radio-button-wrapper-checked') and contains(., '단일 상품등록')]'
|
||||
option_product_locator = '//div[@id="productMainContentContainerId"]//label[contains(@class, 'ant-radio-button-wrapper-checked') and contains(., '옵션 상품등록')]'
|
||||
total_options_selector = '#productMainContentContainerId label.ant-checkbox-wrapper'
|
||||
is_all_option_checked_selector = '#productMainContentContainerId .ant-checkbox-indeterminate'
|
||||
original_name_selector_template = 'div#productMainContentContainerId li:nth-child({i}) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(3) > span'
|
||||
edit_field_selector_template = 'div#productMainContentContainerId li:nth-child({i}) > div > div:nth-child(1) > div > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span > input'
|
||||
checkbox_selector_template = '#productMainContentContainerId li:nth-child({i}) input[type="checkbox"]'
|
||||
|
|
|
|||
4
gui.py
4
gui.py
|
|
@ -32,11 +32,11 @@ class TranslationApp(QWidget):
|
|||
self.vertexAI = VertexAITranslator(self.logger, key_path)
|
||||
self.optionHandler = None
|
||||
|
||||
self.cmb_diag = CMBSettingsDialog(parent=self, logger=self.logger, debug=True)
|
||||
self.clipboardImageManager = ClipboardImageManager(self, logger, self.browser_controller, self.debug)
|
||||
self.optionHandler = OptionHandler(self.locator_manager, self.browser_controller, self.whale_translator, self.logger, self.vertexAI, self.debug)
|
||||
self.priceHandler = PriceHandler(self.locator_manager, self.browser_controller, self.logger, self.vertexAI, self.debug)
|
||||
self.priceHandler = PriceHandler(self.locator_manager, self.browser_controller, self.logger, self.vertexAI, self.cmb_diag, self.debug)
|
||||
self.titleHandler = TitleHandler(self.locator_manager, self.browser_controller, self.logger)
|
||||
self.cmb_diag = CMBSettingsDialog(parent=self, logger=self.logger, debug=True)
|
||||
self.running = False
|
||||
|
||||
# 변수 설정
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ class LocatorManager:
|
|||
'single_option_locator': self.config.get('OptionLocators', 'single_option_locator').strip("'"),
|
||||
'option_product_locator': self.config.get('OptionLocators', 'option_product_locator').strip("'"),
|
||||
'total_options_selector': self.config.get('OptionLocators', 'total_options_selector').strip("'"),
|
||||
'is_all_option_checked_selector': self.config.get('OptionLocators', 'is_all_option_checked_selector').strip("'"),
|
||||
'original_name_selector_template': self.config.get('OptionLocators', 'original_name_selector_template').strip("'"),
|
||||
'edit_field_selector_template': self.config.get('OptionLocators', 'edit_field_selector_template').strip("'"),
|
||||
'checkbox_selector_template': self.config.get('OptionLocators', 'checkbox_selector_template').strip("'"),
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class OptionHandler:
|
|||
self.single_option_locator = self.locator_manager.get_locator('OptionLocators', 'single_option_locator')
|
||||
self.option_product_locator = self.locator_manager.get_locator('OptionLocators', 'option_product_locator')
|
||||
self.total_options_selector = self.locator_manager.get_locator('OptionLocators', 'total_options_selector')
|
||||
self.is_all_option_checked_selector = self.locator_manager.get_locator('OptionLocators', 'is_all_option_checked_selector')
|
||||
self.original_name_selector_template = self.locator_manager.get_locator('OptionLocators', 'original_name_selector_template')
|
||||
self.edit_field_selector_template = self.locator_manager.get_locator('OptionLocators', 'edit_field_selector_template')
|
||||
self.checkbox_selector_template = self.locator_manager.get_locator('OptionLocators', 'checkbox_selector_template')
|
||||
|
|
@ -262,7 +263,7 @@ class OptionHandler:
|
|||
if checkbox:
|
||||
self.logger.debug("전체 옵션이 체크되어 있음")
|
||||
return True
|
||||
checkbox_partial = await self.page.query_selector('#productMainContentContainerId .ant-checkbox-indeterminate')
|
||||
checkbox_partial = await self.page.query_selector(self.is_all_option_checked_selector)
|
||||
self.logger.debug("일부 옵션이 체크되어 있으므로 수정완료 상품으로 판단.")
|
||||
return checkbox_partial is None # 일부 체크 시 False
|
||||
except Exception as e:
|
||||
|
|
|
|||
93
price.py
93
price.py
|
|
@ -7,13 +7,26 @@ import math , re, time
|
|||
from playwright.async_api import TimeoutError
|
||||
|
||||
class PriceHandler:
|
||||
def __init__(self, locator_manager, browser_controller, logger, vertexAI, debug_flag=False):
|
||||
def __init__(self, locator_manager, browser_controller, logger, vertexAI, cmb_diag, debug_flag=False):
|
||||
self.locator_manager = locator_manager
|
||||
self.browser_controller = browser_controller
|
||||
self.page = self.browser_controller.page
|
||||
self.logger = logger
|
||||
self.debug_flag = debug_flag
|
||||
self.vertexAItranslator = vertexAI
|
||||
self.cmb_diag = cmb_diag
|
||||
|
||||
self.shipping_config = None
|
||||
self.margin_config = None
|
||||
self.optimal_price_config = None
|
||||
self.product_costs = []
|
||||
self.option_data = []
|
||||
self.calculated_price = 0
|
||||
self.optimal_price = 0
|
||||
self.return_fee = 0
|
||||
self.first_delv_fee = 0
|
||||
self.exchange_fee = 0
|
||||
self.sold_price = 0
|
||||
|
||||
# Locator들을 미리 로드하여 초기화 - locator_template:동적 로딩, locator:고정로딩
|
||||
self.product_cost_locator_template = self.locator_manager.get_locator('PriceLocators', 'product_cost_locator')
|
||||
|
|
@ -25,8 +38,8 @@ class PriceHandler:
|
|||
self.exchange_fee_input_locator = self.locator_manager.get_locator('PriceLocators', 'exchange_fee_input_locator')
|
||||
self.option_count_text_locator = self.locator_manager.get_locator('PriceLocators', 'option_count_text_locator')
|
||||
|
||||
# self.initialize_values() # 초기값 설정 메서드
|
||||
self.initial_setting()
|
||||
self.initialize_values() # 초기값 설정 메서드
|
||||
|
||||
def update_page(self, page1):
|
||||
self.page = page1
|
||||
|
|
@ -37,12 +50,11 @@ class PriceHandler:
|
|||
가격과 관련된 변수들을 초기화하는 메서드입니다.
|
||||
여러 상품을 처리할 때 데이터가 이전 상품에 영향을 주지 않도록 초기화합니다.
|
||||
"""
|
||||
self.shipping_config = None
|
||||
self.margin_config = None
|
||||
self.optimal_price_config = None
|
||||
# self.shipping_config = None
|
||||
# self.margin_config = None
|
||||
# self.optimal_price_config = None
|
||||
self.product_costs = []
|
||||
self.option_data = []
|
||||
self.sold_price = 0
|
||||
self.calculated_price = 0
|
||||
self.optimal_price = 0
|
||||
self.return_fee = 0
|
||||
|
|
@ -53,8 +65,11 @@ class PriceHandler:
|
|||
def initial_setting(self):
|
||||
# 설정 초기화
|
||||
self.shipping_config = self.set_shipping_config(min_price=50000, thresholds=[50000, 100000, 200000], increment_unit=20000, additional_costs=[5000, 7000, 9000])
|
||||
self.logger.debug(f"self.shipping_config : {self.shipping_config}")
|
||||
self.margin_config = self.set_margin_config(thresholds=[50000, 70000, 100000, 150000, 200000, 300000, 400000, 500000, 1000000], additional_margins=[5000, 10000, 15000, 25000, 35000, 50000, 70000, 90000, 120000])
|
||||
self.logger.debug(f"self.margin_config : {self.margin_config}")
|
||||
self.optimal_price_config = self.set_optimal_price_config(sold_price=None, cost_price2X=None, calculated_price=None, lower_bound=0.85, upper_bound=1.15, ratios={'sold_price': 0.5, 'cost_price2X': 0.3, 'calculated_price': 0.2})
|
||||
self.logger.debug(f"self.optimal_price_config : {self.optimal_price_config}")
|
||||
|
||||
async def process_price(self, sold_price=0, category=None):
|
||||
try:
|
||||
|
|
@ -77,25 +92,25 @@ class PriceHandler:
|
|||
return
|
||||
|
||||
# 2. 원가 기반가격 계산
|
||||
calculated_price = self.calc_initial_price(upper_avg_cost, self.margin_config, self.shipping_config, 0.04, 0.24)
|
||||
calculated_price = self.calc_initial_price(upper_avg_cost, 0.04, 0.24)
|
||||
|
||||
# 3. 적정 판매가 산출
|
||||
self.logger.debug("적정 판매가를 계산합니다.")
|
||||
self.optimal_price_config['sold_price'] = sold_price # 팔린가격 기본값(10000이 아닌 값이 있을 경우 팔린가격으로 간주)
|
||||
self.optimal_price_config['cost_price2X'] = upper_avg_cost # 원가2배 가격 : upper_avg_cost를 기준으로 계산.
|
||||
self.optimal_price_config['calculated_price'] = calculated_price # 기준판매가를 기준으로 계산된 값
|
||||
optimal_price = self.calculate_optimal_price(self.optimal_price_config)
|
||||
optimal_price = self.calculate_optimal_price()
|
||||
self.logger.debug(f"계산된 적정 판매가: {optimal_price}")
|
||||
|
||||
# 4. 더하기 마진을 적정 판매가 기준으로 재설정
|
||||
self.logger.debug("더하기 마진을 적정 판매가에 맞게 조정합니다.")
|
||||
additional_margin = self.calculate_adjusted_margin(optimal_price, option_data, self.margin_config)
|
||||
additional_margin = self.calculate_adjusted_margin(optimal_price, option_data)
|
||||
additional_margin = self.round_to_UP(additional_margin)
|
||||
self.logger.debug(f"조정된 더하기 마진: {additional_margin}")
|
||||
|
||||
# 5. 해외 배송비 재계산
|
||||
shipping_base_price = optimal_price - upper_avg_cost - (upper_avg_cost*0.04) - (upper_avg_cost*0.24) - additional_margin
|
||||
shipping_cost = self.calculate_shipping_cost_with_extended_thresholds(10000, shipping_base_price, self.shipping_config)
|
||||
shipping_cost = self.calculate_shipping_cost_with_extended_thresholds(10000, shipping_base_price)
|
||||
shipping_cost = self.round_to_UP(shipping_cost)
|
||||
self.logger.debug(f"적정판매가 기준으로 재계산된 해외배송비: {shipping_cost}")
|
||||
|
||||
|
|
@ -222,7 +237,7 @@ class PriceHandler:
|
|||
self.logger.error(f"Failed to input calculated values: {e}", exc_info=True)
|
||||
|
||||
|
||||
def calculate_shipping_cost_with_extended_thresholds(self, base_cost, product_price, config, max_threshold=5000000):
|
||||
def calculate_shipping_cost_with_extended_thresholds(self, base_cost, product_price, max_threshold=5000000):
|
||||
"""
|
||||
점진적으로 증가하는 해외배송비를 계산하는 메서드입니다.
|
||||
|
||||
|
|
@ -237,10 +252,10 @@ class PriceHandler:
|
|||
"""
|
||||
try:
|
||||
total_shipping_cost = base_cost
|
||||
min_price_for_extra_shipping = config.get('min_price_for_extra_shipping', 0)
|
||||
thresholds = config.get('thresholds', [])
|
||||
increment_unit = config.get('increment_unit', 0)
|
||||
additional_costs = config.get('additional_costs', [])
|
||||
min_price_for_extra_shipping = self.shipping_config.get('min_price_for_extra_shipping', 0)
|
||||
thresholds = self.shipping_config.get('thresholds', [])
|
||||
increment_unit = self.shipping_config.get('increment_unit', 0)
|
||||
additional_costs = self.shipping_config.get('additional_costs', [])
|
||||
|
||||
if not thresholds or not additional_costs:
|
||||
raise ValueError("기준 구간과 추가 비용 정보는 비워둘 수 없습니다.")
|
||||
|
|
@ -303,7 +318,7 @@ class PriceHandler:
|
|||
self.logger.error(f"계산된 값 입력 실패: {e}", exc_info=True)
|
||||
return max(base_cost, 10000) # 예외 발생 시 최소 기본 배송비 반환
|
||||
|
||||
def calculate_adjusted_margin(self, optimal_price, option_data, margin_config):
|
||||
def calculate_adjusted_margin(self, optimal_price, option_data):
|
||||
"""
|
||||
적정판매가와 기준판매가를 비교하여 더하기 마진을 조정하는 메서드입니다.
|
||||
|
||||
|
|
@ -324,7 +339,7 @@ class PriceHandler:
|
|||
self.logger.debug(f"적정 판매가와 기준 판매가 차이: {price_difference}")
|
||||
|
||||
# 마진 설정: 차이에 따른 더하기 마진 재조정
|
||||
adjusted_margin = self.calculate_additional_margin_with_extended_thresholds(optimal_price, margin_config)
|
||||
adjusted_margin = self.calculate_additional_margin_with_extended_thresholds(optimal_price)
|
||||
|
||||
# 만약 차이가 크다면, 추가로 마진을 더 조정할 수 있음
|
||||
if price_difference > 0:
|
||||
|
|
@ -337,7 +352,7 @@ class PriceHandler:
|
|||
return 0 # 기본값 반환
|
||||
|
||||
|
||||
def calculate_optimal_price(self, config):
|
||||
def calculate_optimal_price(self):
|
||||
"""
|
||||
적정 판매가를 계산하는 메서드입니다.
|
||||
|
||||
|
|
@ -348,12 +363,12 @@ class PriceHandler:
|
|||
- optimal_price (float): 계산된 적정 판매가
|
||||
"""
|
||||
try:
|
||||
sold_price = config.get('sold_price') # 팔린가격 없으면 무시
|
||||
cost_price2X = config['cost_price2X'] * 2 # 원가의 2배
|
||||
calculated_price = config['calculated_price'] # 원가기준 계산된 가격
|
||||
lower_bound = config['lower_bound'] # 상한선 비율 (기본값 : 원가2배의 15%)
|
||||
upper_bound = config['upper_bound'] # 하한선 비율 (기본값 : 원가2배의 -15%)
|
||||
ratios = config['ratios'] # 계산비율 (기본값 : 팔린가격 50%, 원가2배가격 30%, 계산된가격 20%)
|
||||
sold_price = self.optimal_price_config.get('sold_price') # 팔린가격 없으면 무시
|
||||
cost_price2X = self.optimal_price_config['cost_price2X'] * 2 # 원가의 2배
|
||||
calculated_price = self.optimal_price_config['calculated_price'] # 원가기준 계산된 가격
|
||||
lower_bound = self.optimal_price_config['lower_bound'] # 상한선 비율 (기본값 : 원가2배의 15%)
|
||||
upper_bound = self.optimal_price_config['upper_bound'] # 하한선 비율 (기본값 : 원가2배의 -15%)
|
||||
ratios = self.optimal_price_config['ratios'] # 계산비율 (기본값 : 팔린가격 50%, 원가2배가격 30%, 계산된가격 20%)
|
||||
|
||||
# 비율 기반 계산
|
||||
weighted_sum = 0
|
||||
|
|
@ -399,7 +414,7 @@ class PriceHandler:
|
|||
self.logger.error(f"적정 판매가 계산 실패: {e}", exc_info=True)
|
||||
return 0 # 예외 발생 시 기본값 0 반환
|
||||
|
||||
def calculate_additional_margin_with_extended_thresholds(self, upper_average_price, config, max_threshold=5000000):
|
||||
def calculate_additional_margin_with_extended_thresholds(self, upper_average_price, max_threshold=5000000):
|
||||
"""
|
||||
점진적으로 증가하는 더하기 마진을 계산하는 메서드입니다.
|
||||
|
||||
|
|
@ -412,8 +427,8 @@ class PriceHandler:
|
|||
- total_margin (int): 계산된 더하기 마진.
|
||||
"""
|
||||
try:
|
||||
thresholds = config.get('thresholds', [])
|
||||
additional_margins = config.get('additional_margins', [])
|
||||
thresholds = self.margin_config.get('thresholds', [])
|
||||
additional_margins = self.margin_config.get('additional_margins', [])
|
||||
|
||||
if not thresholds or not additional_margins:
|
||||
raise ValueError("기준 구간과 추가 마진 정보는 비워둘 수 없습니다.")
|
||||
|
|
@ -465,7 +480,7 @@ class PriceHandler:
|
|||
return 0 # 예외 발생 시 기본값 0 반환
|
||||
|
||||
|
||||
def calc_initial_price(self, upper_avg_cost, margin_config, shipping_config, card = 0.04, min_margin = 0.24):
|
||||
def calc_initial_price(self, upper_avg_cost, card = 0.04, min_margin = 0.24):
|
||||
"""
|
||||
초기에 모은 상품원가와 기준가격표를 기준으로 카드수수료, 최소마진등을 기반으로 계산 기준가격을 산출하고
|
||||
이를 기반으로 테이블표에 의한 더하기마진, 해외배송비를 계산하는 함수.
|
||||
|
|
@ -484,11 +499,11 @@ class PriceHandler:
|
|||
initial_cost_price = self.round_to_UP(initial_cost_price)
|
||||
self.logger.debug(f"원가에 카드수수료 {card*100}%, 기본마진 {min_margin*100}% 적용된 계산원가: {initial_cost_price}")
|
||||
|
||||
initail_shipping_cost = self.calculate_additional_margin_with_extended_thresholds(initial_cost_price, margin_config)
|
||||
initail_shipping_cost = self.calculate_additional_margin_with_extended_thresholds(initial_cost_price)
|
||||
initail_shipping_cost = self.round_to_UP(initail_shipping_cost)
|
||||
self.logger.debug(f"계산원가 기준 해외배송비: {initail_shipping_cost}")
|
||||
|
||||
initail_margin_cost = self.calculate_shipping_cost_with_extended_thresholds(10000, initial_cost_price, shipping_config)
|
||||
initail_margin_cost = self.calculate_shipping_cost_with_extended_thresholds(10000, initial_cost_price)
|
||||
initail_margin_cost = self.round_to_UP(initail_margin_cost)
|
||||
self.logger.debug(f"계산원가 기준 더하기마진: {initail_margin_cost}")
|
||||
|
||||
|
|
@ -566,8 +581,12 @@ class PriceHandler:
|
|||
product_cost_element = await self.page.wait_for_selector(product_cost_locator)
|
||||
standard_selling_price_element = await self.page.wait_for_selector(standard_selling_price_locator)
|
||||
|
||||
cost_value = int(float(await product_cost_element.input_value().replace(",", "")))
|
||||
price_value = int(await standard_selling_price_element.input_value().replace(",", ""))
|
||||
# cost_value = int(float(await product_cost_element.input_value().replace(",", "")))
|
||||
cost_value_str = await product_cost_element.input_value()
|
||||
cost_value = int(float(cost_value_str.replace(",", "")))
|
||||
# price_value = int(await standard_selling_price_element.input_value().replace(",", ""))
|
||||
price_value_str = await standard_selling_price_element.input_value()
|
||||
price_value = int(float(price_value_str.replace(",", "")))
|
||||
|
||||
self.product_costs.append(cost_value)
|
||||
self.option_data.append({
|
||||
|
|
@ -615,12 +634,12 @@ class PriceHandler:
|
|||
"""
|
||||
try:
|
||||
# 더하기 마진 값 가져오기
|
||||
margin_element = await self.page.wait_for_selector(self.selectors['plus_margin_locator'])
|
||||
margin_element = await self.page.wait_for_selector(self.plus_margin_locator)
|
||||
margin_value = await margin_element.input_value()
|
||||
margin = int(margin_value.replace(",", "")) if margin_value else 0
|
||||
self.logger.debug(f"더하기 마진 값: {margin}")
|
||||
|
||||
shipping_element = await self.page.wait_for_selector(self.selectors['oversea_shipping_locator'])
|
||||
shipping_element = await self.page.wait_for_selector(self.oversea_shipping_locator)
|
||||
shipping_value = await shipping_element.input_value()
|
||||
shipping_cost = int(shipping_value.replace(",", "")) if shipping_value else 0
|
||||
self.logger.debug(f"해외 배송비 값: {shipping_cost}")
|
||||
|
|
@ -691,7 +710,7 @@ class PriceHandler:
|
|||
'ratios': ratios
|
||||
}
|
||||
|
||||
def round_to_UP(number, nearest=1000):
|
||||
def round_to_UP(self, number, nearest=1000):
|
||||
"""
|
||||
숫자를 주어진 'nearest' 값에 맞춰 올림합니다.
|
||||
|
||||
|
|
@ -706,7 +725,7 @@ class PriceHandler:
|
|||
rounded_number = math.ceil(number / nearest) * nearest
|
||||
return rounded_number
|
||||
|
||||
def convert_cny_to_krw(cny, exchange_rate=200):
|
||||
def convert_cny_to_krw(self, cny, exchange_rate=200):
|
||||
"""
|
||||
위안화 금액을 원화로 변환하는 함수
|
||||
|
||||
|
|
@ -729,6 +748,8 @@ class PriceHandler:
|
|||
- total_extra_shipping (int): 계산된 추가 해외배송비
|
||||
"""
|
||||
total_extra_shipping = 0
|
||||
self.logger.debug(f"category : {category}")
|
||||
cmb_config = self.cmb_diag.get_crmobi_stage(category)
|
||||
|
||||
# locator_manager에서 카테고리별 해외배송비 설정을 불러옴
|
||||
category_data = self.locator_manager.get_category_data(category)
|
||||
|
|
|
|||
Loading…
Reference in New Issue