async
This commit is contained in:
parent
182710fb6a
commit
7b40d16f95
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -12073,3 +12073,771 @@ pywintypes.error: (1400, 'SetForegroundWindow', '잘못된 창 핸들입니다.'
|
|||
2024-09-27 14:19:25,434 - browser_control.py:365 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
|
||||
2024-09-27 14:19:25,434 - gui.py:495 - default_logger - DEBUG - 현재 상품의 총 이미지 수 : 12개
|
||||
2024-09-27 14:19:25,478 - whale_translator.py:106 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 14:45:09,044 - whale_translator.py:106 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 14:45:10,046 - whale_translator.py:222 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 14:45:10,046 - whale_translator.py:87 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 14:45:14,994 - whale_translator.py:115 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 14:45:15,995 - vertexAI.py:16 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 14:45:15,995 - vertexAI.py:20 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 14:45:16,039 - vertexAI.py:24 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 14:45:16,039 - vertexAI.py:35 - default_logger - DEBUG - 프롬프트 파일 경로: H:\py\autoTrans\prompt.json
|
||||
2024-09-27 14:45:16,041 - vertexAI.py:38 - default_logger - DEBUG - prompt.json 파일이 성공적으로 로드되었습니다.
|
||||
2024-09-27 14:45:16,042 - gui.py:61 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 14:45:28,995 - gui.py:242 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 14:45:28,997 - browser_control.py:27 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 14:45:32,938 - browser_control.py:42 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 14:45:32,940 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 14:45:32,940 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 461378
|
||||
2024-09-27 14:45:34,631 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 14:45:34,842 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-09-27 14:45:36,661 - browser_control.py:253 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-09-27 14:45:36,782 - browser_control.py:259 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-09-27 14:45:47,870 - gui.py:390 - default_logger - DEBUG - 번역 작업을 시작합니다...
|
||||
2024-09-27 14:45:47,877 - gui.py:395 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
|
||||
2024-09-27 14:45:48,221 - browser_control.py:271 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
|
||||
2024-09-27 14:45:48,221 - browser_control.py:548 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-09-27 14:45:52,344 - browser_control.py:558 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-09-27 14:45:52,344 - browser_control.py:120 - default_logger - DEBUG - 가져온 텍스트: 총 53개 상품
|
||||
2024-09-27 14:45:52,344 - gui.py:414 - default_logger - DEBUG - 현재 페이지: 1
|
||||
2024-09-27 14:45:52,355 - browser_control.py:548 - default_logger - DEBUG - 페이지 스크롤 시작...
|
||||
2024-09-27 14:45:53,367 - browser_control.py:558 - default_logger - DEBUG - 페이지 스크롤 완료.
|
||||
2024-09-27 14:45:53,380 - browser_control.py:292 - default_logger - DEBUG - 수정할 상품 개수: 20
|
||||
2024-09-27 14:45:53,380 - gui.py:427 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
|
||||
2024-09-27 14:45:53,426 - browser_control.py:306 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
|
||||
2024-09-27 14:45:53,985 - browser_control.py:309 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
|
||||
2024-09-27 14:45:55,340 - browser_control.py:326 - default_logger - DEBUG - 옵션 탭 클릭 완료.
|
||||
2024-09-27 14:45:55,541 - option.py:72 - default_logger - DEBUG - 단일 상품 여부: 옵션 상품입니다
|
||||
2024-09-27 14:45:55,549 - option.py:84 - default_logger - DEBUG - 전체 옵션이 체크되어 있음
|
||||
2024-09-27 14:45:55,552 - option.py:253 - default_logger - DEBUG - 가격 낮은 순 정렬을 클릭합니다.
|
||||
2024-09-27 14:45:55,713 - option.py:113 - default_logger - DEBUG - 총 옵션 갯수: 9
|
||||
2024-09-27 14:45:55,735 - option.py:125 - default_logger - DEBUG - 1번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:55,748 - option.py:133 - default_logger - DEBUG - 1번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:55,759 - option.py:144 - default_logger - DEBUG - 1번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:55,778 - option.py:156 - default_logger - DEBUG - 1번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/ae1785ee-7ae6-466f-8a43-c675c1b9828d.jpg"/>
|
||||
2024-09-27 14:45:56,084 - option.py:172 - default_logger - DEBUG - 1번째 옵션 가격정보 수집 완료 : 284600 - 284600
|
||||
2024-09-27 14:45:56,106 - option.py:125 - default_logger - DEBUG - 2번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,115 - option.py:133 - default_logger - DEBUG - 2번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,128 - option.py:144 - default_logger - DEBUG - 2번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,144 - option.py:156 - default_logger - DEBUG - 2번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/9acfa199-0dc8-4246-a294-2e8771dc2f40.jpg"/>
|
||||
2024-09-27 14:45:56,159 - option.py:172 - default_logger - DEBUG - 2번째 옵션 가격정보 수집 완료 : 288700 - 288700
|
||||
2024-09-27 14:45:56,182 - option.py:125 - default_logger - DEBUG - 3번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,192 - option.py:133 - default_logger - DEBUG - 3번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,198 - option.py:144 - default_logger - DEBUG - 3번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,213 - option.py:156 - default_logger - DEBUG - 3번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/62739915-704d-4616-99ab-f3217225e016.jpg"/>
|
||||
2024-09-27 14:45:56,233 - option.py:172 - default_logger - DEBUG - 3번째 옵션 가격정보 수집 완료 : 288700 - 288700
|
||||
2024-09-27 14:45:56,246 - option.py:125 - default_logger - DEBUG - 4번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,260 - option.py:133 - default_logger - DEBUG - 4번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,269 - option.py:144 - default_logger - DEBUG - 4번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,275 - option.py:156 - default_logger - DEBUG - 4번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/f53805fe-df0a-4f4c-87af-eca0586cfd6c.jpg"/>
|
||||
2024-09-27 14:45:56,298 - option.py:172 - default_logger - DEBUG - 4번째 옵션 가격정보 수집 완료 : 305000 - 305000
|
||||
2024-09-27 14:45:56,311 - option.py:125 - default_logger - DEBUG - 5번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,324 - option.py:133 - default_logger - DEBUG - 5번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,333 - option.py:144 - default_logger - DEBUG - 5번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,344 - option.py:156 - default_logger - DEBUG - 5번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/30635734-e1da-4914-bd53-ad77a31d646f.jpg"/>
|
||||
2024-09-27 14:45:56,361 - option.py:172 - default_logger - DEBUG - 5번째 옵션 가격정보 수집 완료 : 305000 - 305000
|
||||
2024-09-27 14:45:56,377 - option.py:125 - default_logger - DEBUG - 6번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,383 - option.py:133 - default_logger - DEBUG - 6번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,393 - option.py:144 - default_logger - DEBUG - 6번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,407 - option.py:156 - default_logger - DEBUG - 6번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/d1d171da-4794-474d-be89-95db1ee6e4e7.jpg"/>
|
||||
2024-09-27 14:45:56,417 - option.py:172 - default_logger - DEBUG - 6번째 옵션 가격정보 수집 완료 : 317300 - 317300
|
||||
2024-09-27 14:45:56,435 - option.py:125 - default_logger - DEBUG - 7번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,443 - option.py:133 - default_logger - DEBUG - 7번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,452 - option.py:144 - default_logger - DEBUG - 7번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,467 - option.py:156 - default_logger - DEBUG - 7번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/be03bf33-ab1f-4088-ade2-7ce844bec652.jpg"/>
|
||||
2024-09-27 14:45:56,478 - option.py:172 - default_logger - DEBUG - 7번째 옵션 가격정보 수집 완료 : 344500 - 344500
|
||||
2024-09-27 14:45:56,501 - option.py:125 - default_logger - DEBUG - 8번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,510 - option.py:133 - default_logger - DEBUG - 8번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,516 - option.py:144 - default_logger - DEBUG - 8번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,531 - option.py:156 - default_logger - DEBUG - 8번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/6efc8bf0-1ecb-4740-87e8-48d391a799f2.jpg"/>
|
||||
2024-09-27 14:45:56,539 - option.py:172 - default_logger - DEBUG - 8번째 옵션 가격정보 수집 완료 : 344500 - 344500
|
||||
2024-09-27 14:45:56,561 - option.py:125 - default_logger - DEBUG - 9번째 옵션명 수집완료. 나머지 필드 수집중...
|
||||
2024-09-27 14:45:56,564 - option.py:133 - default_logger - DEBUG - 9번째 옵션편집필드 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,580 - option.py:144 - default_logger - DEBUG - 9번째 옵션 체크박스 수집 완료 : JSHandle@node
|
||||
2024-09-27 14:45:56,593 - option.py:156 - default_logger - DEBUG - 9번째 옵션 이미지 수집 완료 : JSHandle@<img class="sc-gbvfcU ezktkd" src="https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f37eb473994c46d385c450/ba464fee-a24b-4bf3-9e5f-77045cb05747.jpg"/>
|
||||
2024-09-27 14:45:56,620 - option.py:172 - default_logger - DEBUG - 9번째 옵션 가격정보 수집 완료 : 469600 - 469600
|
||||
2024-09-27 14:45:56,622 - option.py:35 - default_logger - DEBUG - 수집된 원본 옵션 정보: {'origin_option_1': 'QQ-700电动泵手扳开关带保压设计', 'origin_option_2': '特价QQ-700(蓝油箱配手按开关)', 'origin_option_3': '特价QQ-700(蓝油箱配脚踏开关)', 'origin_option_4': 'QQ-700(220V配手按开关)', 'origin_option_5': 'QQ-700(220V配脚踏开关)', 'origin_option_6': 'HHB-700A电磁阀泵 220V配脚踏开关', 'origin_option_7': 'QQ-700(110V配脚踏开关)', 'origin_option_8': 'QQ-700(110V配手按开关)', 'origin_option_9': 'QQ-700遥控版(手按开关)'}
|
||||
2024-09-27 14:45:56,931 - vertexAI.py:83 - default_logger - DEBUG - 옵션 데이터를 번역 중: {'origin_option_1': 'QQ-700电动泵手扳开关带保压设计', 'origin_option_2': '特价QQ-700(蓝油箱配手按开关)', 'origin_option_3': '特价QQ-700(蓝油箱配脚踏开关)', 'origin_option_4': 'QQ-700(220V配手按开关)', 'origin_option_5': 'QQ-700(220V配脚踏开关)', 'origin_option_6': 'HHB-700A电磁阀泵 220V配脚踏开关', 'origin_option_7': 'QQ-700(110V配脚踏开关)', 'origin_option_8': 'QQ-700(110V配手按开关)', 'origin_option_9': 'QQ-700遥控版(手按开关)'}
|
||||
2024-09-27 14:45:56,931 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700电动泵手扳开关带保压设计
|
||||
2024-09-27 14:45:56,935 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,935 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,935 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,935 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,935 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 电
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 动
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 泵
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 手
|
||||
2024-09-27 14:45:56,939 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 扳
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 带
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 保
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 压
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 设
|
||||
2024-09-27 14:45:56,942 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 计
|
||||
2024-09-27 14:45:56,946 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700电动泵手扳开关带保压设计
|
||||
2024-09-27 14:45:56,946 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: 特价QQ-700(蓝油箱配手按开关)
|
||||
2024-09-27 14:45:56,946 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 特
|
||||
2024-09-27 14:45:56,946 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 价
|
||||
2024-09-27 14:45:56,946 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,949 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,949 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,950 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,950 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,950 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 蓝
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 油
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 箱
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 手
|
||||
2024-09-27 14:45:56,951 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 按
|
||||
2024-09-27 14:45:56,956 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:56,956 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:56,957 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:56,957 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: 特价QQ-700蓝油箱配手按开关
|
||||
2024-09-27 14:45:56,959 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: 特价QQ-700(蓝油箱配脚踏开关)
|
||||
2024-09-27 14:45:56,959 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 特
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 价
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,960 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,966 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:56,966 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 蓝
|
||||
2024-09-27 14:45:56,967 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 油
|
||||
2024-09-27 14:45:56,967 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 箱
|
||||
2024-09-27 14:45:56,967 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:56,967 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 脚
|
||||
2024-09-27 14:45:56,967 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 踏
|
||||
2024-09-27 14:45:56,970 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:56,970 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:56,970 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:56,972 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: 特价QQ-700蓝油箱配脚踏开关
|
||||
2024-09-27 14:45:56,972 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700(220V配手按开关)
|
||||
2024-09-27 14:45:56,972 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,972 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,975 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,975 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,975 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,975 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,975 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:56,978 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: V
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 手
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 按
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:56,979 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:56,983 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:56,983 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700220V配手按开关
|
||||
2024-09-27 14:45:56,983 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700(220V配脚踏开关)
|
||||
2024-09-27 14:45:56,983 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,983 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:56,986 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,986 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,986 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,986 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,986 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: V
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:56,989 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 脚
|
||||
2024-09-27 14:45:56,992 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 踏
|
||||
2024-09-27 14:45:56,992 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:56,992 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:56,993 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:56,993 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700220V配脚踏开关
|
||||
2024-09-27 14:45:56,993 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: HHB-700A电磁阀泵 220V配脚踏开关
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: H
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: H
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: B
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:56,995 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:56,999 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: A
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 电
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 磁
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 阀
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 泵
|
||||
2024-09-27 14:45:57,000 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가:
|
||||
2024-09-27 14:45:57,003 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:57,003 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 2
|
||||
2024-09-27 14:45:57,005 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,005 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: V
|
||||
2024-09-27 14:45:57,006 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:57,006 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 脚
|
||||
2024-09-27 14:45:57,008 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 踏
|
||||
2024-09-27 14:45:57,008 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:57,008 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:57,008 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: HHB-700A电磁阀泵 220V配脚踏开关
|
||||
2024-09-27 14:45:57,008 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700(110V配脚踏开关)
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,011 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:57,017 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 1
|
||||
2024-09-27 14:45:57,017 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 1
|
||||
2024-09-27 14:45:57,019 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,019 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: V
|
||||
2024-09-27 14:45:57,019 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:57,019 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 脚
|
||||
2024-09-27 14:45:57,021 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 踏
|
||||
2024-09-27 14:45:57,021 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:57,022 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:57,022 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:57,023 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700110V配脚踏开关
|
||||
2024-09-27 14:45:57,024 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700(110V配手按开关)
|
||||
2024-09-27 14:45:57,025 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,025 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,025 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:57,027 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:57,027 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,027 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,027 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:57,029 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 1
|
||||
2024-09-27 14:45:57,030 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 1
|
||||
2024-09-27 14:45:57,030 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,030 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: V
|
||||
2024-09-27 14:45:57,031 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 配
|
||||
2024-09-27 14:45:57,031 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 手
|
||||
2024-09-27 14:45:57,032 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 按
|
||||
2024-09-27 14:45:57,032 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:57,032 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700110V配手按开关
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:55 - default_logger - DEBUG - 텍스트에서 특수 문자를 정리 중: QQ-700遥控版(手按开关)
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: Q
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: -
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 7
|
||||
2024-09-27 14:45:57,034 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,039 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 0
|
||||
2024-09-27 14:45:57,040 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 遥
|
||||
2024-09-27 14:45:57,040 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 控
|
||||
2024-09-27 14:45:57,041 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 版
|
||||
2024-09-27 14:45:57,041 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: (
|
||||
2024-09-27 14:45:57,041 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 手
|
||||
2024-09-27 14:45:57,043 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 按
|
||||
2024-09-27 14:45:57,043 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 开
|
||||
2024-09-27 14:45:57,043 - vertexAI.py:70 - default_logger - DEBUG - 허용된 문자 추가: 关
|
||||
2024-09-27 14:45:57,044 - vertexAI.py:66 - default_logger - DEBUG - 허용되지 않은 문자 제거: )
|
||||
2024-09-27 14:45:57,044 - vertexAI.py:73 - default_logger - DEBUG - 정리된 텍스트: QQ-700遥控版手按开关
|
||||
2024-09-27 14:45:57,044 - vertexAI.py:87 - default_logger - DEBUG - 정리된 옵션 데이터: {'origin_option_1': 'QQ-700电动泵手扳开关带保压设计', 'origin_option_2': '特价QQ-700蓝油箱配手按开关', 'origin_option_3': '特价QQ-700蓝油箱配脚踏开关', 'origin_option_4': 'QQ-700220V配手按开关', 'origin_option_5': 'QQ-700220V配脚踏开关', 'origin_option_6': 'HHB-700A电磁阀泵 220V配脚踏开关', 'origin_option_7': 'QQ-700110V配脚踏开关', 'origin_option_8': 'QQ-700110V配手按开关', 'origin_option_9': 'QQ-700遥控版手按开关'}
|
||||
2024-09-27 14:45:57,044 - vertexAI.py:92 - default_logger - DEBUG - 생성된 프롬프트: 질문은 아래와 같아.
|
||||
|
||||
가공방법
|
||||
1. 특수문자가 있을 경우 제거해줘.
|
||||
2. 원본 상품명을 참고해서, 각 옵션의 이름을 최대한 간결하게, 각 옵션의 특징(제품의 스펙을 나타내는 크기,무게,용량,전압,전류,상품코드등)만 남겨줘.
|
||||
3. 간결하게 만들어진 각 옵션명을 한국어로 일관되게 번역해줘.
|
||||
4. 번역된 옵션 이름 중 같은 이름의 옵션이 있을 경우, 해당옵션들만 원본옵션명에서 특징들을 다시 추출해서 추가해줘.
|
||||
5. 가격문의, 문의사항, 견적, 견적문의, 예약금, 선결제, 고객센터 연락 등 옵션명을 바로 알려주지 않고 고객에게 연락을 유도하는 옵션명은 삭제해야 해.
|
||||
6. 번역된 옵션명들은 'trans_option_1': '', 'trans_option_2': '', 'trans_option_3': '', 'trans_option_4': '' 와 같은 형식(json)으로 반환해줘.
|
||||
|
||||
원본 데이터
|
||||
{"origin_option_1": "QQ-700电动泵手扳开关带保压设计", "origin_option_2": "特价QQ-700蓝油箱配手按开关", "origin_option_3": "特价QQ-700蓝油箱配脚踏开关", "origin_option_4": "QQ-700220V配手按开关", "origin_option_5": "QQ-700220V配脚踏开关", "origin_option_6": "HHB-700A电磁阀泵 220V配脚踏开关", "origin_option_7": "QQ-700110V配脚踏开关", "origin_option_8": "QQ-700110V配手按开关", "origin_option_9": "QQ-700遥控版手按开关"}
|
||||
2024-09-27 14:45:57,044 - vertexAI.py:95 - default_logger - DEBUG - Vertex AI 모델에 프롬프트를 전달하여 응답을 기다리는 중...
|
||||
2024-09-27 14:45:59,223 - vertexAI.py:97 - default_logger - DEBUG - 모델 응답: ```json
|
||||
{
|
||||
"trans_option_1": "QQ-700 220V 수동",
|
||||
"trans_option_2": "QQ-700 220V 발판",
|
||||
"trans_option_3": "QQ-700 110V 발판",
|
||||
"trans_option_4": "QQ-700 110V 수동",
|
||||
"trans_option_5": "QQ-700 리모컨 수동",
|
||||
"trans_option_6": "QQ-700 블루 탱크 수동",
|
||||
"trans_option_7": "QQ-700 블루 탱크 발판",
|
||||
"trans_option_8": "HHB-700A 220V 발판"
|
||||
}
|
||||
```
|
||||
2024-09-27 14:45:59,225 - vertexAI.py:104 - default_logger - DEBUG - 응답에서 추출된 JSON 텍스트: {
|
||||
"trans_option_1": "QQ-700 220V 수동",
|
||||
"trans_option_2": "QQ-700 220V 발판",
|
||||
"trans_option_3": "QQ-700 110V 발판",
|
||||
"trans_option_4": "QQ-700 110V 수동",
|
||||
"trans_option_5": "QQ-700 리모컨 수동",
|
||||
"trans_option_6": "QQ-700 블루 탱크 수동",
|
||||
"trans_option_7": "QQ-700 블루 탱크 발판",
|
||||
"trans_option_8": "HHB-700A 220V 발판"
|
||||
}
|
||||
2024-09-27 14:45:59,227 - vertexAI.py:107 - default_logger - DEBUG - 번역된 데이터: {'trans_option_1': 'QQ-700 220V 수동', 'trans_option_2': 'QQ-700 220V 발판', 'trans_option_3': 'QQ-700 110V 발판', 'trans_option_4': 'QQ-700 110V 수동', 'trans_option_5': 'QQ-700 리모컨 수동', 'trans_option_6': 'QQ-700 블루 탱크 수동', 'trans_option_7': 'QQ-700 블루 탱크 발판', 'trans_option_8': 'HHB-700A 220V 발판'}
|
||||
2024-09-27 14:45:59,228 - option.py:37 - default_logger - DEBUG - 번역된 옵션 정보: {'trans_option_1': 'QQ-700 220V 수동', 'trans_option_2': 'QQ-700 220V 발판', 'trans_option_3': 'QQ-700 110V 발판', 'trans_option_4': 'QQ-700 110V 수동', 'trans_option_5': 'QQ-700 리모컨 수동', 'trans_option_6': 'QQ-700 블루 탱크 수동', 'trans_option_7': 'QQ-700 블루 탱크 발판', 'trans_option_8': 'HHB-700A 220V 발판'}
|
||||
2024-09-27 14:45:59,230 - option.py:40 - default_logger - DEBUG - 번역된 옵션명을 입력합니다.
|
||||
2024-09-27 14:45:59,230 - option.py:189 - default_logger - DEBUG - trans_option_1번째 translated_name : QQ-700 220V 수동
|
||||
2024-09-27 14:45:59,231 - option.py:197 - default_logger - DEBUG - trans_option_1번째 번역옵션 필드 : JSHandle@<input type="text" value="QQ-700 전동펌프 수동 스위치" class="ant-input css-1li46mu"/>
|
||||
2024-09-27 14:45:59,249 - option.py:201 - default_logger - DEBUG - trans_option_1번째 translated_name : [QQ-700 220V 수동] 입력 완료
|
||||
2024-09-27 14:45:59,249 - option.py:189 - default_logger - DEBUG - trans_option_2번째 translated_name : QQ-700 220V 발판
|
||||
2024-09-27 14:45:59,250 - option.py:197 - default_logger - DEBUG - trans_option_2번째 번역옵션 필드 : JSHandle@<input type="text" class="ant-input css-1li46mu" value="QQ-700 블루 오일탱크 수동 스위치"/>
|
||||
2024-09-27 14:45:59,276 - option.py:201 - default_logger - DEBUG - trans_option_2번째 translated_name : [QQ-700 220V 발판] 입력 완료
|
||||
2024-09-27 14:45:59,277 - option.py:189 - default_logger - DEBUG - trans_option_3번째 translated_name : QQ-700 110V 발판
|
||||
2024-09-27 14:45:59,277 - option.py:197 - default_logger - DEBUG - trans_option_3번째 번역옵션 필드 : JSHandle@<input type="text" class="ant-input css-1li46mu" value="QQ-700 블루 오일탱크 발판 스위치"/>
|
||||
2024-09-27 14:45:59,305 - option.py:201 - default_logger - DEBUG - trans_option_3번째 translated_name : [QQ-700 110V 발판] 입력 완료
|
||||
2024-09-27 14:45:59,305 - option.py:189 - default_logger - DEBUG - trans_option_4번째 translated_name : QQ-700 110V 수동
|
||||
2024-09-27 14:45:59,306 - option.py:197 - default_logger - DEBUG - trans_option_4번째 번역옵션 필드 : JSHandle@<input type="text" value="QQ-700 220V 수동 스위치" class="ant-input css-1li46mu"/>
|
||||
2024-09-27 14:45:59,333 - option.py:201 - default_logger - DEBUG - trans_option_4번째 translated_name : [QQ-700 110V 수동] 입력 완료
|
||||
2024-09-27 14:45:59,334 - option.py:189 - default_logger - DEBUG - trans_option_5번째 translated_name : QQ-700 리모컨 수동
|
||||
2024-09-27 14:45:59,335 - option.py:197 - default_logger - DEBUG - trans_option_5번째 번역옵션 필드 : JSHandle@<input type="text" value="QQ-700 220V 발판 스위치" class="ant-input css-1li46mu"/>
|
||||
2024-09-27 14:45:59,379 - option.py:201 - default_logger - DEBUG - trans_option_5번째 translated_name : [QQ-700 리모컨 수동] 입력 완료
|
||||
2024-09-27 14:45:59,379 - option.py:189 - default_logger - DEBUG - trans_option_6번째 translated_name : QQ-700 블루 탱크 수동
|
||||
2024-09-27 14:45:59,379 - option.py:197 - default_logger - DEBUG - trans_option_6번째 번역옵션 필드 : JSHandle@<input type="text" class="ant-input css-1li46mu" value="HHB-700A 전자밸브 펌프 220V 발판 스위치"/>
|
||||
2024-09-27 14:45:59,407 - option.py:201 - default_logger - DEBUG - trans_option_6번째 translated_name : [QQ-700 블루 탱크 수동] 입력 완료
|
||||
2024-09-27 14:45:59,407 - option.py:189 - default_logger - DEBUG - trans_option_7번째 translated_name : QQ-700 블루 탱크 발판
|
||||
2024-09-27 14:45:59,413 - option.py:197 - default_logger - DEBUG - trans_option_7번째 번역옵션 필드 : JSHandle@<input type="text" value="QQ-700 110V 발판 스위치" class="ant-input css-1li46mu"/>
|
||||
2024-09-27 14:45:59,446 - option.py:201 - default_logger - DEBUG - trans_option_7번째 translated_name : [QQ-700 블루 탱크 발판] 입력 완료
|
||||
2024-09-27 14:45:59,446 - option.py:189 - default_logger - DEBUG - trans_option_8번째 translated_name : HHB-700A 220V 발판
|
||||
2024-09-27 14:45:59,446 - option.py:197 - default_logger - DEBUG - trans_option_8번째 번역옵션 필드 : JSHandle@<input type="text" value="QQ-700 110V 수동 스위치" class="ant-input css-1li46mu"/>
|
||||
2024-09-27 14:45:59,472 - option.py:201 - default_logger - DEBUG - trans_option_8번째 translated_name : [HHB-700A 220V 발판] 입력 완료
|
||||
2024-09-27 14:45:59,472 - option.py:213 - default_logger - DEBUG - 옵션이 3개 이상이므로 가장 낮은 옵션을 체크 해제합니다.
|
||||
2024-09-27 14:45:59,742 - option.py:253 - default_logger - DEBUG - 가격 낮은 순 정렬을 클릭합니다.
|
||||
2024-09-27 14:46:00,381 - option.py:50 - default_logger - DEBUG - 저장 버튼을 클릭합니다.
|
||||
2024-09-27 14:46:00,685 - option.py:53 - default_logger - DEBUG - 옵션 처리 완료.
|
||||
2024-09-27 14:46:01,009 - option.py:261 - default_logger - DEBUG - 옵션 수정 내용 저장 완료.
|
||||
2024-09-27 14:46:01,392 - browser_control.py:318 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
|
||||
2024-09-27 14:46:01,586 - browser_control.py:335 - default_logger - DEBUG - 소스 버튼 클릭 완료.
|
||||
2024-09-27 14:46:01,607 - browser_control.py:343 - default_logger - DEBUG - 추출된 이미지 URL 수: 12
|
||||
2024-09-27 14:46:01,609 - browser_control.py:346 - default_logger - DEBUG - img 태그를 삭제 중...
|
||||
2024-09-27 14:46:01,634 - browser_control.py:357 - default_logger - DEBUG - Updated data-value:
|
||||
2024-09-27 14:46:01,634 - browser_control.py:360 - default_logger - DEBUG - img 태그 삭제 완료.
|
||||
2024-09-27 14:46:01,757 - browser_control.py:365 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
|
||||
2024-09-27 14:46:01,762 - gui.py:495 - default_logger - DEBUG - 현재 상품의 총 이미지 수 : 12개
|
||||
2024-09-27 14:46:01,821 - whale_translator.py:106 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 14:46:17,444 - whale_translator.py:150 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/143741434/O1CN01Lsea7w1MSoh2hy0Nx_!!143741434.png?v=1641956906350_Q75.jpg
|
||||
2024-09-27 14:46:17,492 - whale_translator.py:115 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 14:46:18,495 - browser_control.py:444 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
|
||||
2024-09-27 14:46:18,495 - browser_control.py:445 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
|
||||
2024-09-27 14:46:18,502 - clipboardImageManager.py:176 - default_logger - INFO - 클립보드 이미지 확인
|
||||
2024-09-27 14:46:18,537 - clipboardImageManager.py:180 - default_logger - DEBUG - 클립보드에 있는 이미지 크기: 750px
|
||||
2024-09-27 14:46:18,537 - clipboardImageManager.py:183 - default_logger - DEBUG - 이미지 가로 크기 200픽셀 이상: 크롭 진행 중...
|
||||
2024-09-27 14:46:18,607 - clipboardImageManager.py:253 - default_logger - DEBUG - 크롭 전 이미지 저장됨: H:\py\autoTrans\original_image_20240927_144618.png
|
||||
2024-09-27 14:46:18,679 - clipboardImageManager.py:266 - default_logger - DEBUG - 1% 크롭된 이미지 저장됨: H:\py\autoTrans\cropped_image_1_20240927_144618.png
|
||||
2024-09-27 14:46:18,745 - clipboardImageManager.py:266 - default_logger - DEBUG - 2% 크롭된 이미지 저장됨: H:\py\autoTrans\cropped_image_2_20240927_144618.png
|
||||
2024-09-27 14:46:18,807 - clipboardImageManager.py:266 - default_logger - DEBUG - 3% 크롭된 이미지 저장됨: H:\py\autoTrans\cropped_image_3_20240927_144618.png
|
||||
2024-09-27 14:46:18,807 - clipboardImageManager.py:281 - default_logger - DEBUG - 이미지가 클립보드에 저장되었습니다.
|
||||
2024-09-27 14:46:19,040 - browser_control.py:389 - default_logger - DEBUG - 이미지 붙여넣기 완료.
|
||||
2024-09-27 14:46:19,040 - browser_control.py:390 - default_logger - DEBUG - 이미지 붙여넣기 완료로 클립보드 비우기.
|
||||
2024-09-27 14:46:19,040 - clipboardImageManager.py:232 - default_logger - DEBUG - 클립보드가 비워졌습니다.
|
||||
2024-09-27 14:46:19,091 - whale_translator.py:106 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:25:40,808 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:25:40,808 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:25:40,819 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:25:40,819 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:25:40,951 - whale_translator.py:110 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:25:41,052 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:25:44,203 - whale_translator.py:220 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:25:45,229 - whale_translator.py:223 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:25:45,229 - whale_translator.py:91 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:25:46,609 - whale_translator.py:60 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 15:28:57,820 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:28:57,820 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:28:57,830 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:28:57,831 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:28:58,023 - whale_translator.py:86 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 15:28:58,136 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:35:24,891 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:35:24,891 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:35:24,903 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:35:24,904 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:35:25,101 - whale_translator.py:120 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:35:25,120 - whale_translator.py:120 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:35:25,164 - whale_translator.py:129 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:35:26,103 - whale_translator.py:230 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:35:26,136 - whale_translator.py:236 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:35:26,136 - whale_translator.py:101 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:35:29,343 - whale_translator.py:233 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:35:29,343 - whale_translator.py:101 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:35:31,799 - whale_translator.py:129 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:39:15,791 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:39:16,117 - whale_translator.py:117 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:39:16,419 - whale_translator.py:101 - default_logger - DEBUG - 가상 데스크톱 확인/생성 중 오류 발생: object NoneType can't be used in 'await' expression
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 96, in ensure_virtual_desktop_2_exists
|
||||
await self.switch_to_virtual_desktop_2()
|
||||
TypeError: object NoneType can't be used in 'await' expression
|
||||
2024-09-27 15:39:22,084 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:40:31,460 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:40:31,760 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:40:31,761 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:40:31,772 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:40:31,773 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:42:20,757 - whale_translator.py:117 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:42:21,068 - whale_translator.py:227 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:42:22,070 - whale_translator.py:230 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:42:22,070 - whale_translator.py:98 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:42:22,095 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:42:22,397 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:42:22,397 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:42:22,404 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:42:22,404 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:42:46,004 - whale_translator.py:117 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:42:46,306 - whale_translator.py:233 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:42:46,306 - whale_translator.py:98 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:42:46,306 - whale_translator.py:117 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:42:46,610 - whale_translator.py:233 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:42:46,610 - whale_translator.py:98 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:42:52,283 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:42:52,584 - whale_translator.py:126 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:42:52,885 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:42:52,885 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:42:52,897 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:42:52,897 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:43:51,323 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:43:51,623 - whale_translator.py:228 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:43:52,626 - whale_translator.py:231 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:43:52,626 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:43:52,628 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:43:52,930 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:43:52,930 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:43:58,150 - whale_translator.py:64 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 15:43:58,171 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:43:58,473 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:43:58,774 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:43:58,774 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:43:58,788 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:43:58,788 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:45:03,863 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:45:04,165 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:45:04,165 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:45:04,170 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:45:04,470 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:45:04,470 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:45:09,732 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:45:10,034 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:45:10,336 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:45:10,336 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:45:10,349 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:45:10,350 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:46:25,745 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:46:26,048 - whale_translator.py:228 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:46:27,051 - whale_translator.py:231 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:46:27,051 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:46:27,051 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:46:27,355 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:46:27,355 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:46:32,586 - whale_translator.py:64 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 15:46:32,610 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:46:32,912 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:46:33,214 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:46:33,214 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:46:33,223 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:46:33,223 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:46:46,800 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:46:47,101 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:46:47,101 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:46:47,105 - whale_translator.py:118 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:46:47,406 - whale_translator.py:234 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:46:47,406 - whale_translator.py:99 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:46:52,650 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:46:52,961 - whale_translator.py:127 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:46:53,264 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:46:53,264 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:46:53,271 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:46:53,280 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:53:52,576 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:53:52,879 - whale_translator.py:229 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 찾았습니다. 종료 중...
|
||||
2024-09-27 15:53:53,881 - whale_translator.py:232 - default_logger - DEBUG - '새 시크릿 탭 - Whale' 창을 종료했습니다.
|
||||
2024-09-27 15:53:53,881 - whale_translator.py:100 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:53:53,883 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:53:54,184 - whale_translator.py:235 - default_logger - DEBUG - '새 탭 - Whale' 또는 '새 시크릿 탭 - Whale' 창을 찾지 못했습니다.
|
||||
2024-09-27 15:53:54,184 - whale_translator.py:100 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:53:54,191 - whale_translator.py:42 - default_logger - DEBUG - Whale 브라우저 실행, PID: 6176
|
||||
2024-09-27 15:56:44,002 - whale_translator.py:111 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 15:56:45,003 - whale_translator.py:135 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:56:45,306 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 확인/생성 중 오류 발생: 'WhaleTranslator' object has no attribute 'find_window_by_title'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 115, in ensure_virtual_desktop_2_exists
|
||||
self.close_whale_window_if_exists()
|
||||
File "H:\py\autoTrans\whale_translator.py", line 236, in close_whale_window_if_exists
|
||||
whale_hwnd = self.find_window_by_title(whale_window_name)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: 'WhaleTranslator' object has no attribute 'find_window_by_title'
|
||||
2024-09-27 15:56:45,311 - whale_translator.py:42 - default_logger - DEBUG - Whale 브라우저 실행, PID: 24964
|
||||
2024-09-27 15:56:48,426 - whale_translator.py:64 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 15:56:48,445 - whale_translator.py:144 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:56:48,751 - whale_translator.py:144 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:56:49,052 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:56:49,052 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:56:49,063 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:56:49,063 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 15:58:40,566 - whale_translator.py:135 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:58:40,873 - whale_translator.py:255 - default_logger - ERROR - 웨일 창을 종료하는 중 오류 발생: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 233, in close_whale_window_if_exists
|
||||
if not self.whale_pid:
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
2024-09-27 15:58:40,873 - whale_translator.py:116 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:58:40,873 - whale_translator.py:135 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 15:58:41,176 - whale_translator.py:255 - default_logger - ERROR - 웨일 창을 종료하는 중 오류 발생: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 233, in close_whale_window_if_exists
|
||||
if not self.whale_pid:
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
2024-09-27 15:58:41,177 - whale_translator.py:116 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 15:58:41,181 - whale_translator.py:42 - default_logger - DEBUG - Whale 브라우저 실행, PID: 24376
|
||||
2024-09-27 15:58:44,296 - whale_translator.py:64 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 15:58:44,314 - whale_translator.py:144 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:58:44,619 - whale_translator.py:144 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 15:58:44,920 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 15:58:44,920 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 15:58:44,931 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 15:58:44,932 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:01:32,583 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:01:32,885 - whale_translator.py:258 - default_logger - ERROR - 웨일 창을 종료하는 중 오류 발생: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 236, in close_whale_window_if_exists
|
||||
if not self.whale_pid:
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
2024-09-27 16:01:32,885 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:01:32,887 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:01:33,188 - whale_translator.py:258 - default_logger - ERROR - 웨일 창을 종료하는 중 오류 발생: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
Traceback (most recent call last):
|
||||
File "H:\py\autoTrans\whale_translator.py", line 236, in close_whale_window_if_exists
|
||||
if not self.whale_pid:
|
||||
^^^^^^^^^^^^^^
|
||||
AttributeError: 'WhaleTranslator' object has no attribute 'whale_pid'
|
||||
2024-09-27 16:01:33,188 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:01:33,191 - whale_translator.py:45 - default_logger - DEBUG - Whale 브라우저 실행, PID: 13748
|
||||
2024-09-27 16:01:36,307 - whale_translator.py:67 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 16:01:36,331 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:01:36,636 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:01:36,938 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:01:36,938 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:01:36,947 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:01:36,947 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:02:19,598 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:02:19,900 - whale_translator.py:237 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 16:02:19,900 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:02:19,900 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:02:20,203 - whale_translator.py:237 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 16:02:20,203 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:02:20,205 - whale_translator.py:45 - default_logger - DEBUG - Whale 브라우저 실행, PID: 16764
|
||||
2024-09-27 16:02:23,324 - whale_translator.py:67 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 16:02:23,350 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:02:23,651 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:02:23,953 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:02:23,953 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:02:23,963 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:02:23,965 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:02:58,996 - whale_translator.py:114 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 16:03:00,000 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:03:00,301 - whale_translator.py:237 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 16:03:00,301 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:03:00,304 - whale_translator.py:45 - default_logger - DEBUG - Whale 브라우저 실행, PID: 17060
|
||||
2024-09-27 16:03:03,421 - whale_translator.py:67 - default_logger - DEBUG - Whale 창을 찾을 수 없습니다.
|
||||
2024-09-27 16:03:03,440 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:03:03,746 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:03:04,046 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:03:04,046 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:03:04,052 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:03:04,052 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:11:20,099 - whale_translator.py:138 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:11:20,400 - whale_translator.py:237 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 16:11:20,400 - whale_translator.py:119 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:11:20,428 - whale_translator.py:147 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:11:20,730 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:11:20,730 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:11:20,736 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:11:20,736 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:13:06,527 - whale_translator.py:134 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 16:13:06,829 - whale_translator.py:233 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 16:13:06,829 - whale_translator.py:115 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 16:13:06,865 - whale_translator.py:143 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 16:13:07,167 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:13:07,167 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:13:07,178 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:13:07,179 - gui.py:67 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:17:29,068 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:17:29,068 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:17:29,082 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:17:29,083 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:17:49,737 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:17:49,739 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:17:49,748 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:17:49,748 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:22:38,328 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:22:38,328 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:22:38,333 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:22:38,333 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:35:07,951 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:35:07,956 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:35:07,960 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:35:07,960 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:35:34,735 - gui.py:489 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 16:35:34,738 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 16:35:42,633 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:35:42,633 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:35:42,643 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:35:42,644 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:36:48,758 - gui.py:489 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 16:36:48,761 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 16:37:15,621 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:37:15,621 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:37:15,632 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:37:15,634 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:37:19,186 - gui.py:489 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 16:37:19,188 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 16:37:44,031 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 16:37:44,031 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 16:37:44,041 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 16:37:44,041 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 16:37:51,341 - gui.py:489 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 16:37:51,344 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:01:55,241 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:01:55,241 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:01:55,251 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:01:55,252 - gui.py:68 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:04:59,793 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:04:59,793 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:04:59,797 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:04:59,797 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:05:03,424 - gui.py:490 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:05:03,426 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:06:29,320 - whale_translator.py:89 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 17:07:00,925 - whale_translator.py:113 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 17:07:01,229 - whale_translator.py:212 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 17:07:01,230 - whale_translator.py:94 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 17:07:01,232 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 9592
|
||||
2024-09-27 17:07:03,278 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:07:15,727 - whale_translator.py:113 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 17:07:16,028 - whale_translator.py:212 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 17:07:16,028 - whale_translator.py:94 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 17:07:16,031 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 17896
|
||||
2024-09-27 17:07:18,060 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:07:18,378 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:07:18,378 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:07:18,386 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:07:18,389 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:07:42,451 - whale_translator.py:113 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 17:07:42,752 - whale_translator.py:212 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 17:07:42,752 - whale_translator.py:94 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 17:07:42,755 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 16000
|
||||
2024-09-27 17:07:44,794 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:07:45,110 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:07:45,110 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:07:45,119 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:07:45,121 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:08:19,466 - gui.py:490 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:08:19,472 - whale_translator.py:230 - default_logger - DEBUG - 웨일 창을 찾을 수 없습니다.
|
||||
2024-09-27 17:08:20,577 - whale_translator.py:248 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
|
||||
2024-09-27 17:08:20,578 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:10:02,955 - whale_translator.py:89 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 17:10:03,961 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 27276
|
||||
2024-09-27 17:10:06,002 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:10:06,320 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:10:06,320 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:10:06,328 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:10:06,328 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:10:08,785 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:10:08,787 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:10:08,787 - browser_control.py:27 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:11:11,189 - gui.py:502 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:11:11,191 - whale_translator.py:230 - default_logger - DEBUG - 웨일 창을 찾을 수 없습니다.
|
||||
2024-09-27 17:11:12,298 - whale_translator.py:248 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
|
||||
2024-09-27 17:11:12,298 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:11:16,131 - whale_translator.py:89 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 17:11:17,134 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 5848
|
||||
2024-09-27 17:11:19,193 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:11:19,508 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:11:19,508 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:11:19,521 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:11:19,523 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:11:20,888 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:11:20,888 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:11:20,888 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:11:24,933 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:11:24,944 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:11:24,944 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 2231546
|
||||
2024-09-27 17:11:53,962 - whale_translator.py:113 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 17:11:54,272 - whale_translator.py:212 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 17:11:54,272 - whale_translator.py:94 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 17:11:54,277 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 27360
|
||||
2024-09-27 17:11:56,325 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:11:56,637 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:11:56,637 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:11:56,651 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:11:56,652 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:12:00,732 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:12:00,732 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:12:00,732 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:12:04,557 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:12:04,567 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:12:04,569 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 10226020
|
||||
2024-09-27 17:12:05,611 - browser_control.py:61 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 17:12:25,641 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:12:25,643 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:12:25,643 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:12:29,749 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:12:29,761 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:12:29,761 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 3738120
|
||||
2024-09-27 17:12:30,632 - browser_control.py:61 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 17:15:18,444 - whale_translator.py:113 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
|
||||
2024-09-27 17:15:18,745 - whale_translator.py:212 - default_logger - DEBUG - 웨일 프로세스 ID가 설정되지 않았습니다.
|
||||
2024-09-27 17:15:18,745 - whale_translator.py:94 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
|
||||
2024-09-27 17:15:18,749 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 4980
|
||||
2024-09-27 17:15:20,782 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:15:21,096 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:15:21,097 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:15:21,107 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:15:21,108 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:15:22,817 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:15:22,819 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:15:22,819 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:15:26,767 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:15:26,777 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:15:26,780 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 11141514
|
||||
2024-09-27 17:15:27,685 - browser_control.py:61 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 17:15:47,132 - gui.py:502 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:15:47,138 - whale_translator.py:230 - default_logger - DEBUG - 웨일 창을 찾을 수 없습니다.
|
||||
2024-09-27 17:15:48,241 - whale_translator.py:248 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
|
||||
2024-09-27 17:15:48,242 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:16:53,166 - whale_translator.py:89 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 17:16:54,167 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 8164
|
||||
2024-09-27 17:16:56,399 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:16:56,723 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:16:56,723 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:16:56,736 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:16:56,741 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:16:58,085 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:16:58,087 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:16:58,087 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:17:02,363 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:17:02,372 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:17:02,375 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 1771492
|
||||
2024-09-27 17:17:03,770 - browser_control.py:61 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 17:17:18,802 - gui.py:502 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:17:18,808 - whale_translator.py:230 - default_logger - DEBUG - 웨일 창을 찾을 수 없습니다.
|
||||
2024-09-27 17:17:19,912 - whale_translator.py:248 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
|
||||
2024-09-27 17:17:19,912 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
2024-09-27 17:17:26,435 - whale_translator.py:89 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
|
||||
2024-09-27 17:17:27,437 - whale_translator.py:34 - default_logger - DEBUG - Whale 브라우저 실행, PID: 21756
|
||||
2024-09-27 17:17:29,486 - whale_translator.py:122 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
|
||||
2024-09-27 17:17:29,806 - vertexAI.py:18 - default_logger - DEBUG - GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정: leensoo1nt.json
|
||||
2024-09-27 17:17:29,806 - vertexAI.py:22 - default_logger - DEBUG - Vertex AI 모델 초기화 중...
|
||||
2024-09-27 17:17:29,818 - vertexAI.py:26 - default_logger - DEBUG - prompt.json 파일을 불러옵니다.
|
||||
2024-09-27 17:17:29,819 - gui.py:69 - default_logger - DEBUG - 로그기록이 설정되었습니다.
|
||||
2024-09-27 17:17:30,971 - gui.py:256 - default_logger - DEBUG - 크롬 실행 버튼 클릭됨
|
||||
2024-09-27 17:17:30,973 - gui.py:262 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
|
||||
2024-09-27 17:17:30,973 - browser_control.py:28 - default_logger - DEBUG - 크롬 브라우저 실행 중...
|
||||
2024-09-27 17:17:34,581 - browser_control.py:43 - default_logger - DEBUG - newPage 로딩 ...
|
||||
2024-09-27 17:17:34,593 - browser_control.py:48 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
|
||||
2024-09-27 17:17:34,594 - browser_control.py:55 - default_logger - DEBUG - 크롬 창 핸들: 338757512
|
||||
2024-09-27 17:17:36,093 - browser_control.py:61 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
|
||||
2024-09-27 17:17:36,300 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 직원 계정
|
||||
2024-09-27 17:17:38,077 - browser_control.py:254 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
|
||||
2024-09-27 17:17:38,201 - browser_control.py:260 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
|
||||
2024-09-27 17:19:44,844 - gui.py:502 - default_logger - DEBUG - 프로그램을 종료합니다...
|
||||
2024-09-27 17:19:44,851 - whale_translator.py:230 - default_logger - DEBUG - 웨일 창을 찾을 수 없습니다.
|
||||
2024-09-27 17:19:45,956 - whale_translator.py:248 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
|
||||
2024-09-27 17:19:45,957 - whale_translator.py:250 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
from playwright.sync_api import sync_playwright
|
||||
# from playwright.sync_api import sync_playwright
|
||||
from playwright.async_api import async_playwright
|
||||
import re
|
||||
import pyautogui
|
||||
import time
|
||||
import win32gui, win32con
|
||||
from bs4 import BeautifulSoup
|
||||
import pyperclip
|
||||
import asyncio
|
||||
|
||||
class BrowserController:
|
||||
def __init__(self, app, logger):
|
||||
|
|
@ -22,28 +23,28 @@ class BrowserController:
|
|||
def get_page(self):
|
||||
return self.page
|
||||
|
||||
def start_browser(self):
|
||||
async def start_browser(self):
|
||||
"""크롬 브라우저 실행 및 페이지 로딩"""
|
||||
self.logger.debug('크롬 브라우저 실행 중...')
|
||||
|
||||
# Playwright를 수동으로 실행하여 브라우저 유지
|
||||
self.playwright = sync_playwright().start()
|
||||
self.browser = self.playwright.chromium.launch(headless=False) # 브라우저 비헤드리스 모드 실행
|
||||
self.playwright = await async_playwright().start()
|
||||
self.browser = await self.playwright.chromium.launch(headless=False) # 브라우저 비헤드리스 모드 실행
|
||||
|
||||
# 창 크기 설정 (1920x1080)
|
||||
context = self.browser.new_context(
|
||||
context = await self.browser.new_context(
|
||||
viewport={"width": 1920, "height": 1080}
|
||||
)
|
||||
|
||||
# 페이지 열기
|
||||
self.page = context.new_page()
|
||||
self.page = await context.new_page()
|
||||
# self.page.goto('https://percenty.co.kr/') # 원하는 페이지로 이동
|
||||
self.page.goto('https://percenty.co.kr/signin') # 원하는 페이지로 이동
|
||||
await self.page.goto('https://percenty.co.kr/signin') # 원하는 페이지로 이동
|
||||
self.logger.debug('newPage 로딩 ...')
|
||||
# 사용자는 이 시점에 로그인 및 상세페이지 편집 모드로 들어감
|
||||
|
||||
# 페이지 제목을 가져와서 창 제목으로 활용
|
||||
page_title = self.page.title()
|
||||
page_title = await self.page.title()
|
||||
self.logger.debug(f'페이지 제목: {page_title}')
|
||||
|
||||
# 창 핸들 찾기 (동적으로 얻은 페이지 제목 사용)
|
||||
|
|
@ -53,40 +54,40 @@ class BrowserController:
|
|||
else:
|
||||
self.logger.debug(f'크롬 창 핸들: {self.chrome_hwnd}')
|
||||
|
||||
self.page.wait_for_load_state('networkidle')
|
||||
await self.page.wait_for_load_state('networkidle')
|
||||
|
||||
def login(self, admin_id, user_id, admin_password, user_password, is_admin=False):
|
||||
async def login(self, admin_id, user_id, admin_password, user_password, is_admin=False):
|
||||
"""로그인 처리"""
|
||||
self.logger.debug(f'로그인 시도 중: {"관리자" if is_admin else "직원"} 계정')
|
||||
|
||||
if is_admin:
|
||||
# 관리자 로그인 처리
|
||||
self.page.fill('input[placeholder="이메일 주소 입력"]', admin_id) # 관리자 ID 입력
|
||||
self.page.fill('input[placeholder="영문/숫자/특수문자의 조합 (6~15자리)"]', admin_password) # 관리자 비밀번호 입력
|
||||
self.page.click('button:has-text("로그인 하기")') # 관리자 로그인 버튼 클릭
|
||||
await self.page.fill('input[placeholder="이메일 주소 입력"]', admin_id) # 관리자 ID 입력
|
||||
await self.page.fill('input[placeholder="영문/숫자/특수문자의 조합 (6~15자리)"]', admin_password) # 관리자 비밀번호 입력
|
||||
await self.page.click('button:has-text("로그인 하기")') # 관리자 로그인 버튼 클릭
|
||||
else:
|
||||
# 관리자 토글 버튼을 클릭해서 직원 로그인 화면 활성화
|
||||
admin_toggle = self.page.locator('button[role="switch"]')
|
||||
if admin_toggle.get_attribute("aria-checked") == "true":
|
||||
admin_toggle.click() # 관리자 모드에서 직원 모드로 전환
|
||||
if await admin_toggle.get_attribute("aria-checked") == "true":
|
||||
await admin_toggle.click() # 관리자 모드에서 직원 모드로 전환
|
||||
|
||||
self.page.fill('input[placeholder="이메일 주소 입력"]', admin_id) # 관리자 ID 입력
|
||||
self.page.fill('input[placeholder="직원 아이디 입력"]', user_id) # 직원 ID 입력
|
||||
self.page.fill('input[placeholder="영문/숫자/특수문자의 조합 (6~15자리)"]', user_password) # 직원 비밀번호 입력
|
||||
self.page.click('button:has-text("직원 로그인 하기")') # 직원 로그인 버튼 클릭
|
||||
await self.page.fill('input[placeholder="이메일 주소 입력"]', admin_id) # 관리자 ID 입력
|
||||
await self.page.fill('input[placeholder="직원 아이디 입력"]', user_id) # 직원 ID 입력
|
||||
await self.page.fill('input[placeholder="영문/숫자/특수문자의 조합 (6~15자리)"]', user_password) # 직원 비밀번호 입력
|
||||
await self.page.click('button:has-text("직원 로그인 하기")') # 직원 로그인 버튼 클릭
|
||||
|
||||
self.logger.debug(f'로그인 완료: {"관리자" if is_admin else "직원"} 계정')
|
||||
|
||||
self.page.wait_for_load_state('networkidle')
|
||||
await self.page.wait_for_load_state('networkidle')
|
||||
|
||||
self.close_ad_if_exists()
|
||||
await self.close_ad_if_exists()
|
||||
|
||||
|
||||
def close_browser(self):
|
||||
async def close_browser(self):
|
||||
"""브라우저 종료"""
|
||||
if self.browser:
|
||||
self.browser.close()
|
||||
self.playwright.stop()
|
||||
await self.browser.close()
|
||||
await self.playwright.stop()
|
||||
self.logger.debug('브라우저 종료됨.')
|
||||
|
||||
def find_window_by_title(self, window_name):
|
||||
|
|
@ -108,10 +109,10 @@ class BrowserController:
|
|||
self.logger.debug('크롬 창을 찾을 수 없습니다.')
|
||||
|
||||
|
||||
def get_total_product_count(self):
|
||||
async def get_total_product_count(self):
|
||||
try:
|
||||
# JavaScript로 해당 요소의 텍스트를 가져옴
|
||||
element_text = self.page.evaluate('''() => {
|
||||
element_text = await self.page.evaluate('''() => {
|
||||
let element = document.querySelector('#root > div > div > div > div > main > div > div.sc-ezreuY.kYrYVh > div.sc-dChVcU.cRrUlt > div.sc-izQBue.dxiUJm > div > div:nth-child(1) > label > span:nth-child(2)');
|
||||
return element ? element.innerText : null;
|
||||
}''')
|
||||
|
|
@ -129,17 +130,17 @@ class BrowserController:
|
|||
return 0
|
||||
|
||||
|
||||
def get_total_product_count1(self):
|
||||
async def get_total_product_count1(self):
|
||||
"""총 상품 개수를 반환"""
|
||||
try:
|
||||
self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
await self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
|
||||
total_count_css_selector = '//label/span[contains(text(),"총")]'
|
||||
total_element = self.page.wait_for_selector('//*[@id="root"]/div/div/div/div/main/div/div[2]/div[3]/div[2]/div/div[1]/label/span[2]', timeout=5000)
|
||||
total_element2 = self.page.query_selector(total_count_css_selector)
|
||||
total_element = await self.page.wait_for_selector('//*[@id="root"]/div/div/div/div/main/div/div[2]/div[3]/div[2]/div/div[1]/label/span[2]', timeout=5000)
|
||||
total_element2 = await self.page.query_selector(total_count_css_selector)
|
||||
|
||||
# JavaScript로 해당 요소의 텍스트를 가져옴
|
||||
total_count_text3 = self.page.evaluate('''() => {
|
||||
total_count_text3 = await self.page.evaluate('''() => {
|
||||
let element = document.querySelector('#root > div > div > div > div > main > div > div.sc-ezreuY.kYrYVh > div.sc-dChVcU.cRrUlt > div.sc-izQBue.dxiUJm > div > div:nth-child(1) > label > span:nth-child(2)');
|
||||
return element ? element.innerText : null;
|
||||
}''')
|
||||
|
|
@ -156,27 +157,27 @@ class BrowserController:
|
|||
self.logger.debug(f"총 상품 개수 수집 중 오류 발생: {e}", exc_info=True)
|
||||
return 0
|
||||
|
||||
def get_product_name(self, index):
|
||||
async def get_product_name(self, index):
|
||||
"""해당 상품의 이름을 가져옵니다. 오류 발생 시 '수집 오류 발생' 반환"""
|
||||
try:
|
||||
product_name_xpath = f"//div[{index}]/li/div/div/div[2]/div/div/div[1]/div[1]/span[2]"
|
||||
product_name_element = self.page.query_selector(product_name_xpath)
|
||||
return product_name_element.inner_text().strip()
|
||||
product_name_element = await self.page.query_selector(product_name_xpath)
|
||||
return await product_name_element.inner_text().strip()
|
||||
except Exception as e:
|
||||
self.logger.debug(f"상품명 수집 중 오류: {e}", exc_info=True)
|
||||
return "수집 오류 발생"
|
||||
|
||||
def extract_image_urls(self):
|
||||
async def extract_image_urls(self):
|
||||
"""HTML에서 이미지 URL 추출 및 img 태그 삭제 후 소스 버튼 다시 클릭"""
|
||||
self.logger.debug('이미지 URL을 추출 중...')
|
||||
|
||||
# 소스 버튼 클릭
|
||||
self.page.click("button[data-cke-tooltip-text='소스']")
|
||||
await self.page.click("button[data-cke-tooltip-text='소스']")
|
||||
self.logger.debug('소스 버튼 클릭 완료.')
|
||||
|
||||
# 'data-value' 속성 값을 추출 (textarea 요소)
|
||||
textarea = self.page.wait_for_selector('div.ck-source-editing-area')
|
||||
data_value = textarea.get_attribute("data-value")
|
||||
textarea = await self.page.wait_for_selector('div.ck-source-editing-area')
|
||||
data_value = await textarea.get_attribute("data-value")
|
||||
|
||||
if data_value:
|
||||
self.logger.debug('data-value 속성에서 HTML 수집 완료.')
|
||||
|
|
@ -187,20 +188,20 @@ class BrowserController:
|
|||
# 추출된 URL 반환
|
||||
self.logger.debug('img 태그를 삭제 중...')
|
||||
|
||||
self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
await self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
|
||||
# data-value 속성을 가진 요소 선택
|
||||
data_value_element = self.page.query_selector('div.ck-source-editing-area')
|
||||
data_value_element = await self.page.query_selector('div.ck-source-editing-area')
|
||||
|
||||
new_value = ""
|
||||
|
||||
if data_value_element:
|
||||
# 속성 변경 (원하는 텍스트로 변경하거나 ""으로 변경)
|
||||
# self.page.evaluate('(element, value) => element.setAttribute("data-value", value)', data_value_element, new_value)
|
||||
self.page.evaluate(f'() => document.querySelector("div.ck-source-editing-area").setAttribute("data-value", "{new_value}")')
|
||||
await self.page.evaluate(f'() => document.querySelector("div.ck-source-editing-area").setAttribute("data-value", "{new_value}")')
|
||||
|
||||
# 데이터가 제대로 변경되었는지 확인
|
||||
updated_value = data_value_element.get_attribute('data-value')
|
||||
updated_value = await data_value_element.get_attribute('data-value')
|
||||
self.logger(f'Updated data-value: {updated_value}')
|
||||
|
||||
else:
|
||||
|
|
@ -210,7 +211,7 @@ class BrowserController:
|
|||
self.logger.debug('img 태그 삭제 완료.')
|
||||
|
||||
# 소스 버튼 다시 클릭
|
||||
self.page.click("button[data-cke-tooltip-text='소스']")
|
||||
await self.page.click("button[data-cke-tooltip-text='소스']")
|
||||
self.logger.debug('소스 버튼 재 클릭 완료.')
|
||||
|
||||
return image_urls
|
||||
|
|
@ -240,7 +241,7 @@ class BrowserController:
|
|||
|
||||
return image_urls
|
||||
|
||||
def close_ad_if_exists(self):
|
||||
async def close_ad_if_exists(self):
|
||||
|
||||
"""광고 다이얼로그가 있으면 닫기 버튼을 클릭하는 메서드"""
|
||||
try:
|
||||
|
|
@ -249,13 +250,13 @@ class BrowserController:
|
|||
close_button_selector = "div.ant-modal-footer > div > div > button[type='button'].ant-btn.css-1li46mu.ant-btn-default"
|
||||
|
||||
# 3초 동안 다이얼로그 대기
|
||||
self.page.wait_for_selector(dialog_selector, timeout=3000)
|
||||
await self.page.wait_for_selector(dialog_selector, timeout=3000)
|
||||
self.logger.debug("다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.")
|
||||
|
||||
# 닫기 버튼 클릭
|
||||
close_button = self.page.query_selector(close_button_selector)
|
||||
close_button = await self.page.query_selector(close_button_selector)
|
||||
if close_button:
|
||||
close_button.click()
|
||||
await close_button.click()
|
||||
self.logger.debug("다이얼로그를 성공적으로 닫았습니다.")
|
||||
else:
|
||||
self.logger.debug("닫기 버튼을 찾지 못했습니다.")
|
||||
|
|
@ -264,22 +265,22 @@ class BrowserController:
|
|||
# 다이얼로그가 없거나 다른 문제가 발생한 경우
|
||||
self.logger.debug(f"다이얼로그가 발견되지 않았거나 오류 발생: {e}", exc_info=True)
|
||||
|
||||
def go_to_new_product_page(self):
|
||||
async def go_to_new_product_page(self):
|
||||
"""신규 상품 등록 페이지로 이동"""
|
||||
try:
|
||||
self.page.click('span.ant-menu-title-content:has-text("신규 상품 등록")')
|
||||
await self.page.click('span.ant-menu-title-content:has-text("신규 상품 등록")')
|
||||
self.logger.debug("신규 상품 등록 페이지로 이동 완료.")
|
||||
except Exception as e:
|
||||
self.logger.debug(f"신규 상품 등록 페이지 이동 중 오류: {e}", exc_info=True)
|
||||
|
||||
def get_product_edit_buttons(self):
|
||||
async def get_product_edit_buttons(self):
|
||||
"""현재 페이지의 세부사항 수정 및 업로드 버튼을 찾기"""
|
||||
try:
|
||||
# 페이지 로딩을 기다림
|
||||
self.page.wait_for_load_state('networkidle') # 네트워크 요청이 모두 끝날 때까지 대기
|
||||
await self.page.wait_for_load_state('networkidle') # 네트워크 요청이 모두 끝날 때까지 대기
|
||||
|
||||
# 페이지 끝까지 스크롤하여 모든 동적 요소 로드
|
||||
self.scroll_page_to_bottom()
|
||||
await self.scroll_page_to_bottom()
|
||||
|
||||
|
||||
# # 스크롤하여 모든 버튼을 화면에 표시 (가장 하단까지 스크롤)
|
||||
|
|
@ -288,72 +289,72 @@ class BrowserController:
|
|||
|
||||
# 버튼 선택 (확실한 선택자를 사용하여 확인)
|
||||
buttons = self.page.locator('button:has-text("세부사항 수정 및 업로드")')
|
||||
count = buttons.count()
|
||||
count = await buttons.count()
|
||||
self.logger.debug(f"수정할 상품 개수: {count}")
|
||||
|
||||
# 모든 버튼을 리스트로 반환
|
||||
return [buttons.nth(i) for i in range(count)]
|
||||
return [await buttons.nth(i) for i in range(count)]
|
||||
|
||||
except Exception as e:
|
||||
self.logger.debug(f"상품 수정 버튼을 찾는 중 오류: {e}", exc_info=True)
|
||||
return []
|
||||
|
||||
def open_product_edit_dialog(self, button):
|
||||
async def open_product_edit_dialog(self, button):
|
||||
"""상품 수정 다이얼로그 열기"""
|
||||
try:
|
||||
# 요소가 화면에 없을 경우 스크롤하여 보이도록 함
|
||||
button.scroll_into_view_if_needed()
|
||||
await button.scroll_into_view_if_needed()
|
||||
self.logger.debug("상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.")
|
||||
|
||||
button.click()
|
||||
await button.click()
|
||||
self.logger.debug("세부사항 수정 다이얼로그 열기 완료.")
|
||||
self.page.wait_for_selector('div.ant-tabs-nav') # 다이얼로그가 완전히 로딩될 때까지 기다림
|
||||
await self.page.wait_for_selector('div.ant-tabs-nav') # 다이얼로그가 완전히 로딩될 때까지 기다림
|
||||
except Exception as e:
|
||||
self.logger.debug(f"세부사항 수정 다이얼로그 열기 중 오류: {e}", exc_info=True)
|
||||
|
||||
def click_detail_tab(self):
|
||||
async def click_detail_tab(self):
|
||||
"""상세페이지 탭 클릭"""
|
||||
try:
|
||||
self.page.click('div.ant-tabs-tab:has-text("상세페이지")')
|
||||
await self.page.click('div.ant-tabs-tab:has-text("상세페이지")')
|
||||
self.logger.debug("상세페이지 탭 클릭 완료.")
|
||||
except Exception as e:
|
||||
self.logger.debug(f"상세페이지 탭 클릭 중 오류: {e}", exc_info=True)
|
||||
|
||||
def click_option_tab(self):
|
||||
async def click_option_tab(self):
|
||||
"""상세페이지 탭 클릭"""
|
||||
try:
|
||||
self.page.click('div.ant-tabs-tab:has-text("옵션")')
|
||||
await self.page.click('div.ant-tabs-tab:has-text("옵션")')
|
||||
self.logger.debug("옵션 탭 클릭 완료.")
|
||||
except Exception as e:
|
||||
self.logger.debug(f"옵션 탭 클릭 중 오류: {e}", exc_info=True)
|
||||
|
||||
def extract_image_urls(self):
|
||||
async def extract_image_urls(self):
|
||||
"""상세페이지에서 이미지 URL 추출"""
|
||||
try:
|
||||
# 소스 편집 모드로 전환
|
||||
self.page.click('button[data-cke-tooltip-text="소스"]')
|
||||
await self.page.click('button[data-cke-tooltip-text="소스"]')
|
||||
self.logger.debug("소스 버튼 클릭 완료.")
|
||||
|
||||
# 'data-value' 속성 값을 추출 (textarea 요소)
|
||||
textarea = self.page.wait_for_selector('div.ck-source-editing-area')
|
||||
data_value = textarea.get_attribute("data-value")
|
||||
textarea = await self.page.wait_for_selector('div.ck-source-editing-area')
|
||||
data_value = await textarea.get_attribute("data-value")
|
||||
|
||||
# HTML 소스에서 이미지 URL 추출
|
||||
image_urls = self.fetch_image_urls(data_value)
|
||||
image_urls = await self.fetch_image_urls(data_value)
|
||||
self.logger.debug(f'추출된 이미지 URL 수: {len(image_urls)}')
|
||||
|
||||
# HTML 소스에서 이미지 URL 삭제
|
||||
self.logger.debug('img 태그를 삭제 중...')
|
||||
self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
await self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
|
||||
# data-value 속성을 가진 요소 선택
|
||||
data_value_element = self.page.query_selector('div.ck-source-editing-area')
|
||||
data_value_element = await self.page.query_selector('div.ck-source-editing-area')
|
||||
new_value = ""
|
||||
if data_value_element:
|
||||
# 속성 변경 (원하는 텍스트로 변경하거나 ""으로 변경)
|
||||
# self.page.evaluate('(element, value) => element.setAttribute("data-value", value)', data_value_element, new_value)
|
||||
self.page.evaluate(f'() => document.querySelector("div.ck-source-editing-area").setAttribute("data-value", "{new_value}")')
|
||||
await self.page.evaluate(f'() => document.querySelector("div.ck-source-editing-area").setAttribute("data-value", "{new_value}")')
|
||||
# 데이터가 제대로 변경되었는지 확인
|
||||
updated_value = data_value_element.get_attribute('data-value')
|
||||
updated_value = await data_value_element.get_attribute('data-value')
|
||||
self.logger.debug(f'Updated data-value: {updated_value}')
|
||||
else:
|
||||
self.logger.debug('Element with data-value not found.')
|
||||
|
|
@ -361,7 +362,7 @@ class BrowserController:
|
|||
|
||||
|
||||
# img 태그의 class 삭제 후 다시 소스 버튼 클릭
|
||||
self.page.click('button[data-cke-tooltip-text="소스"]')
|
||||
await self.page.click('button[data-cke-tooltip-text="소스"]')
|
||||
self.logger.debug('소스 버튼 재 클릭 완료.')
|
||||
|
||||
return image_urls
|
||||
|
|
@ -369,14 +370,6 @@ class BrowserController:
|
|||
self.logger.debug(f"이미지 URL 추출 중 오류: {e}", exc_info=True)
|
||||
return []
|
||||
|
||||
def translate_image(self, url):
|
||||
"""이미지 번역 진행"""
|
||||
try:
|
||||
self.whale_translator.translate_image(url)
|
||||
self.logger.debug(f"이미지 번역 완료: {url}")
|
||||
except Exception as e:
|
||||
self.logger.debug(f"이미지 번역 중 오류: {e}", exc_info=True)
|
||||
|
||||
def paste_image_in_chrome(self, clipboardImageManager, url):
|
||||
"""크롬으로 포커스를 옮기고 클립보드의 이미지를 붙여넣고 엔터 입력"""
|
||||
try:
|
||||
|
|
@ -394,35 +387,35 @@ class BrowserController:
|
|||
except Exception as e:
|
||||
self.logger.debug(f"이미지 붙여넣기 중 오류: {e}", exc_info=True)
|
||||
|
||||
def save_product_edit(self):
|
||||
async def save_product_edit(self):
|
||||
"""상품 수정 후 저장 버튼 클릭"""
|
||||
try:
|
||||
self.page.click('button:has-text("저장하기")')
|
||||
await self.page.click('button:has-text("저장하기")')
|
||||
self.logger.debug("상품 수정 내용 저장 완료.")
|
||||
self.page.keyboard.press("Escape") # ESC로 다이얼로그 닫기
|
||||
await self.page.keyboard.press("Escape") # ESC로 다이얼로그 닫기
|
||||
except Exception as e:
|
||||
self.logger.debug(f"저장 버튼 클릭 중 오류: {e}", exc_info=True)
|
||||
|
||||
def go_to_next_page(self):
|
||||
async def go_to_next_page(self):
|
||||
"""다음 페이지로 이동"""
|
||||
try:
|
||||
# 현재 페이지가 몇 번째 페이지인지 확인 (클래스에 'ant-pagination-item-active'가 있는 요소)
|
||||
current_page = self.page.query_selector('li.ant-pagination-item.ant-pagination-item-active')
|
||||
current_page = await self.page.query_selector('li.ant-pagination-item.ant-pagination-item-active')
|
||||
|
||||
if not current_page:
|
||||
self.logger.debug("현재 페이지 정보를 찾을 수 없습니다.")
|
||||
return False
|
||||
|
||||
# 현재 활성화된 페이지 번호를 가져옴
|
||||
current_page_number = int(current_page.get_attribute("title"))
|
||||
current_page_number = int(await current_page.get_attribute("title"))
|
||||
next_page_number = current_page_number + 1
|
||||
|
||||
# 다음 페이지 버튼을 찾음 (title 속성으로 다음 페이지를 찾음)
|
||||
next_page_button = self.page.query_selector(f'li.ant-pagination-item[title="{next_page_number}"]')
|
||||
next_page_button = await self.page.query_selector(f'li.ant-pagination-item[title="{next_page_number}"]')
|
||||
|
||||
if next_page_button:
|
||||
next_page_button.click() # 페이지 버튼 클릭
|
||||
self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩이 완료될 때까지 대기
|
||||
await next_page_button.click() # 페이지 버튼 클릭
|
||||
await self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩이 완료될 때까지 대기
|
||||
self.logger.debug(f"페이지 {next_page_number}로 이동 완료.")
|
||||
return True
|
||||
else:
|
||||
|
|
@ -452,7 +445,7 @@ class BrowserController:
|
|||
|
||||
|
||||
|
||||
def scroll_with_wheel(self, direction="down", pause_time=0.5, max_scrolls=20):
|
||||
async def scroll_with_wheel(self, direction="down", pause_time=0.5, max_scrolls=20):
|
||||
"""
|
||||
휠 스크롤을 사용하여 페이지를 위나 아래로 천천히 스크롤.
|
||||
|
||||
|
|
@ -462,7 +455,7 @@ class BrowserController:
|
|||
- max_scrolls: 최대 스크롤 횟수.
|
||||
"""
|
||||
scroll_count = 0
|
||||
last_height = self.page.evaluate("document.body.scrollHeight")
|
||||
last_height = await self.page.evaluate("document.body.scrollHeight")
|
||||
|
||||
while scroll_count < max_scrolls:
|
||||
if direction == "down":
|
||||
|
|
@ -474,10 +467,10 @@ class BrowserController:
|
|||
else:
|
||||
raise ValueError("direction 인자는 'down' 또는 'up'만 허용됩니다.")
|
||||
|
||||
time.sleep(pause_time)
|
||||
asyncio.sleep(pause_time)
|
||||
|
||||
# 스크롤 후 높이 확인
|
||||
new_height = self.page.evaluate("document.body.scrollHeight")
|
||||
new_height = await self.page.evaluate("document.body.scrollHeight")
|
||||
|
||||
# 아래로 스크롤 시, 페이지의 끝에 도달한 경우 종료
|
||||
if direction == "down" and new_height == last_height:
|
||||
|
|
@ -488,14 +481,14 @@ class BrowserController:
|
|||
last_height = new_height
|
||||
scroll_count += 1
|
||||
|
||||
def collect_product_info(self):
|
||||
async def collect_product_info(self):
|
||||
"""
|
||||
상품 정보를 수집하는 메서드
|
||||
"""
|
||||
try:
|
||||
# 페이지를 아래로 스크롤하여 모든 상품 로드
|
||||
self.scroll_with_wheel('down')
|
||||
self.scroll_with_wheel('up')
|
||||
await self.scroll_with_wheel('down')
|
||||
await self.scroll_with_wheel('up')
|
||||
|
||||
product_infos = []
|
||||
for i in range(1, 51): # 1부터 최대 50까지 상품 처리
|
||||
|
|
@ -511,9 +504,9 @@ class BrowserController:
|
|||
|
||||
if product_name_element and product_price_element and product_image_element:
|
||||
product_info = {
|
||||
"name": product_name_element.text_content().strip(),
|
||||
"price": product_price_element.text_content().strip(),
|
||||
"image_url": product_image_element.get_attribute('src')
|
||||
"name": await product_name_element.text_content().strip(),
|
||||
"price": await product_price_element.text_content().strip(),
|
||||
"image_url": await product_image_element.get_attribute('src')
|
||||
}
|
||||
self.logger.debug(f"상품 {i}: {product_info}")
|
||||
product_infos.append(product_info)
|
||||
|
|
@ -526,16 +519,16 @@ class BrowserController:
|
|||
self.logger.error(f"상품 정보 수집 중 오류 발생: {e}", exc_info=True)
|
||||
return []
|
||||
|
||||
def click_modify_button_by_text(self, index):
|
||||
async def click_modify_button_by_text(self, index):
|
||||
"""인덱스에 해당하는 '세부사항 수정 및 업로드' 버튼 클릭"""
|
||||
try:
|
||||
button_selector = f'(//button[span[text()="세부사항 수정 및 업로드"]])[{index}]'
|
||||
|
||||
# 버튼이 화면에 보이도록 스크롤 후 클릭
|
||||
button = self.page.query_selector(button_selector)
|
||||
button = await self.page.query_selector(button_selector)
|
||||
if button:
|
||||
button.scroll_into_view_if_needed()
|
||||
self.page.evaluate('arguments[0].click();', button)
|
||||
await button.scroll_into_view_if_needed()
|
||||
await self.page.evaluate('arguments[0].click();', button)
|
||||
self.logger.debug(f'{index}번째 상품의 수정 버튼 클릭 완료')
|
||||
else:
|
||||
self.logger.debug(f'{index}번째 상품의 수정 버튼을 찾지 못했습니다.')
|
||||
|
|
@ -543,15 +536,15 @@ class BrowserController:
|
|||
self.logger.debug(f'{index}번째 상품의 수정 버튼 클릭 중 오류: {str(e)}')
|
||||
|
||||
|
||||
def scroll_page_to_bottom(self, pause_time=1):
|
||||
async def scroll_page_to_bottom(self, pause_time=1):
|
||||
"""페이지의 맨 아래까지 스크롤하여 모든 동적 요소를 로드"""
|
||||
self.logger.debug('페이지 스크롤 시작...')
|
||||
previous_height = self.page.evaluate("() => document.body.scrollHeight")
|
||||
previous_height = await self.page.evaluate("() => document.body.scrollHeight")
|
||||
|
||||
while True:
|
||||
self.page.evaluate("window.scrollBy(0, window.innerHeight);") # 한 화면씩 스크롤
|
||||
time.sleep(pause_time) # 페이지 로딩 대기
|
||||
current_height = self.page.evaluate("() => document.body.scrollHeight")
|
||||
await self.page.evaluate("window.scrollBy(0, window.innerHeight);") # 한 화면씩 스크롤
|
||||
asyncio.sleep(pause_time) # 페이지 로딩 대기
|
||||
current_height = await self.page.evaluate("() => document.body.scrollHeight")
|
||||
if current_height == previous_height:
|
||||
break # 더 이상 스크롤할 내용이 없으면 종료
|
||||
previous_height = current_height
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import time
|
|||
import os
|
||||
from datetime import datetime
|
||||
import random
|
||||
import asyncio
|
||||
|
||||
class ClipboardImageManager:
|
||||
def __init__(self, app, logger, browser_controller, debug=False):
|
||||
|
|
@ -20,7 +21,7 @@ class ClipboardImageManager:
|
|||
|
||||
self.debug = True
|
||||
|
||||
def get_clipboard_data(self):
|
||||
async def get_clipboard_data(self):
|
||||
"""클립보드의 텍스트 데이터를 가져옵니다."""
|
||||
try:
|
||||
return pyperclip.paste() # 클립보드의 텍스트 데이터를 가져옴
|
||||
|
|
@ -41,7 +42,7 @@ class ClipboardImageManager:
|
|||
# win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
|
||||
# win32clipboard.CloseClipboard()
|
||||
|
||||
def set_image_to_clipboard(self, image, crop_percentage=0.03, debug=False):
|
||||
async def set_image_to_clipboard(self, image, crop_percentage=0.03, debug=False):
|
||||
"""
|
||||
이미지를 클립보드에 넣는 함수 (Windows 전용, 크롭 후)
|
||||
|
||||
|
|
@ -93,7 +94,7 @@ class ClipboardImageManager:
|
|||
|
||||
self.logger.debug(f"{crop_percentage*100}% 크롭된 이미지가 클립보드에 저장되었습니다.")
|
||||
|
||||
def base64_to_image(self, base64_data):
|
||||
async def base64_to_image(self, base64_data):
|
||||
"""Base64 데이터를 이미지로 변환하는 함수"""
|
||||
if base64_data.startswith('data:image'):
|
||||
header, encoded = base64_data.split(',', 1)
|
||||
|
|
@ -104,7 +105,7 @@ class ClipboardImageManager:
|
|||
self.logger.debug("유효하지 않은 Base64 이미지 데이터입니다.")
|
||||
return None
|
||||
|
||||
def download_image_from_url(self, url, max_retries=3):
|
||||
async def download_image_from_url(self, url, max_retries=3):
|
||||
"""URL에서 이미지를 다운로드하고 PIL 이미지 객체로 반환"""
|
||||
headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
|
||||
|
|
@ -139,23 +140,23 @@ class ClipboardImageManager:
|
|||
else:
|
||||
self.logger.debug(f"이미지 로딩 실패, HTTP 상태 코드: {response.status_code}. 재시도 {retries + 1}/{max_retries}")
|
||||
retries += 1
|
||||
time.sleep(random.randint(2, 5)) # 2~5초 대기 후 재시도
|
||||
await asyncio.sleep(random.randint(2, 5)) # 2~5초 대기 후 재시도
|
||||
except Exception as e:
|
||||
self.logger.debug(f"이미지 로딩 중 오류 발생: {e}. 재시도 {retries + 1}/{max_retries}")
|
||||
retries += 1
|
||||
time.sleep(random.randint(2, 5)) # 예외 발생 시 대기 후 재시도
|
||||
await asyncio.sleep(random.randint(2, 5)) # 예외 발생 시 대기 후 재시도
|
||||
|
||||
self.logger.debug("이미지 다운로드 최대 재시도 횟수를 초과했습니다.")
|
||||
return None
|
||||
|
||||
def process_clipboard(self, original_url):
|
||||
async def process_clipboard(self, original_url):
|
||||
"""클립보드의 내용을 처리하고, 필요한 경우 이미지 변환, 크롭 또는 클립보드 비우기"""
|
||||
clipboard_data = self.get_clipboard_data()
|
||||
clipboard_data = await self.get_clipboard_data()
|
||||
|
||||
# 1. 클립보드의 데이터가 Base64 이미지일 경우
|
||||
if clipboard_data.startswith('data:image'):
|
||||
self.logger.info("data:image 감지 : 이미지 데이터로 변환")
|
||||
image = self.base64_to_image(clipboard_data)
|
||||
image = await self.base64_to_image(clipboard_data)
|
||||
if image:
|
||||
width, _ = image.size
|
||||
self.logger.debug(f"Base64 이미지 크기: {width}px")
|
||||
|
|
@ -164,10 +165,10 @@ class ClipboardImageManager:
|
|||
if width >= 200:
|
||||
self.logger.debug("이미지 가로 크기 200픽셀 이상: 크롭 진행 중...")
|
||||
cropped_image = self.crop_image(image) # 크롭 메서드 사용
|
||||
self.set_image_to_clipboard(cropped_image) # 클립보드에 저장
|
||||
await self.set_image_to_clipboard(cropped_image) # 클립보드에 저장
|
||||
else:
|
||||
self.logger.debug("이미지 가로 크기 200픽셀 이하: 클립보드 비움.")
|
||||
self.clear_clipboard()
|
||||
await self.clear_clipboard()
|
||||
else:
|
||||
self.logger.debug("Base64 이미지 변환 실패.")
|
||||
|
||||
|
|
@ -182,19 +183,19 @@ class ClipboardImageManager:
|
|||
if width >= 200:
|
||||
self.logger.debug("이미지 가로 크기 200픽셀 이상: 크롭 진행 중...")
|
||||
cropped_image = self.crop_image(image) # 크롭 메서드 사용
|
||||
self.set_image_to_clipboard(cropped_image) # 클립보드에 저장
|
||||
await self.set_image_to_clipboard(cropped_image) # 클립보드에 저장
|
||||
else:
|
||||
self.logger.debug("이미지 가로 크기 200픽셀 이하: 클립보드 비움.")
|
||||
self.clear_clipboard()
|
||||
await self.clear_clipboard()
|
||||
|
||||
# 3. html > whale-ocr 처리
|
||||
elif clipboard_data.strip() == "html > whale-ocr":
|
||||
self.logger.info("html > whale-ocr 감지 : 이미지 번역 실패 확인")
|
||||
if original_url:
|
||||
image = self.download_image_from_url(original_url)
|
||||
image = await self.download_image_from_url(original_url)
|
||||
if image:
|
||||
self.logger.debug("원본 이미지 다운로드 성공, 클립보드에 저장 중...")
|
||||
self.set_image_to_clipboard(image) # 크롭 없이 저장
|
||||
await self.set_image_to_clipboard(image) # 크롭 없이 저장
|
||||
else:
|
||||
self.logger.debug("원본 이미지 다운로드 실패.")
|
||||
else:
|
||||
|
|
@ -224,7 +225,7 @@ class ClipboardImageManager:
|
|||
|
||||
return None
|
||||
|
||||
def clear_clipboard(self):
|
||||
async def clear_clipboard(self):
|
||||
"""클립보드를 비우는 함수"""
|
||||
try:
|
||||
win32clipboard.OpenClipboard()
|
||||
|
|
@ -265,32 +266,4 @@ class ClipboardImageManager:
|
|||
cropped_alt_image.save(cropped_image_path)
|
||||
self.logger.debug(f"{int(crop*100)}% 크롭된 이미지 저장됨: {cropped_image_path}")
|
||||
|
||||
return cropped_image
|
||||
|
||||
def set_image_to_clipboard(self, image):
|
||||
"""이미지를 클립보드에 넣는 함수"""
|
||||
output = BytesIO()
|
||||
image.save(output, "BMP")
|
||||
data = output.getvalue()[14:] # BMP 헤더 제거
|
||||
output.close()
|
||||
|
||||
try:
|
||||
win32clipboard.OpenClipboard()
|
||||
win32clipboard.EmptyClipboard()
|
||||
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
|
||||
self.logger.debug("이미지가 클립보드에 저장되었습니다.")
|
||||
except Exception as e:
|
||||
self.logger.error(f"이미지를 클립보드에 저장하는 중 오류 발생: {e}", exc_info=True)
|
||||
finally:
|
||||
win32clipboard.CloseClipboard()
|
||||
|
||||
def base64_to_image(self, base64_data):
|
||||
"""Base64 데이터를 이미지로 변환하는 함수"""
|
||||
try:
|
||||
header, encoded = base64_data.split(',', 1)
|
||||
img_data = base64.b64decode(encoded)
|
||||
image = Image.open(BytesIO(img_data))
|
||||
return image
|
||||
except Exception as e:
|
||||
self.logger.error(f"Base64 이미지를 변환하는 중 오류 발생: {e}", exc_info=True)
|
||||
return None
|
||||
return cropped_image
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 310 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 303 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 297 KiB |
68
gui.py
68
gui.py
|
|
@ -8,16 +8,19 @@ from vertexAI import VertexAITranslator
|
|||
from option import OptionHandler
|
||||
from logger_module import QTextEditLogger # 추가
|
||||
import logging
|
||||
import asyncio
|
||||
|
||||
class TranslationApp(QWidget):
|
||||
def __init__(self, logger=None):
|
||||
def __init__(self, logger=None, whale_translator=None):
|
||||
super().__init__()
|
||||
self.initUI()
|
||||
self.logger = logger
|
||||
key_path = 'leensoo1nt.json'
|
||||
self.settings = QSettings("WhenRideMycar", "TranslationApp") # QSettings 초기화
|
||||
self.browser_controller = BrowserController(self, self.logger)
|
||||
self.whale_translator = WhaleTranslator(self, self.logger, secret_mode=True,vd_mode=True) # 디버그 모드 켜기
|
||||
# self.whale_translator = WhaleTranslator(self, self.logger, secret_mode=True,vd_mode=True) # 디버그 모드 켜기
|
||||
self.whale_translator = whale_translator
|
||||
|
||||
self.vertexAI = VertexAITranslator(self.logger, key_path)
|
||||
self.optionHandler = None
|
||||
|
||||
|
|
@ -50,6 +53,11 @@ class TranslationApp(QWidget):
|
|||
# 프로그래스바 초기화
|
||||
self.update_total_progress(0,0)
|
||||
|
||||
async def run_async_tasks(self):
|
||||
"""비동기 작업을 실행"""
|
||||
while True:
|
||||
await asyncio.sleep(0.1) # 비동기적으로 잠시 대기하여 응답성을 유지
|
||||
|
||||
def add_text_edit_logger(self):
|
||||
"""QTextEdit에 로그를 출력하기 위한 핸들러 추가"""
|
||||
text_edit_logger = QTextEditLogger()
|
||||
|
|
@ -213,11 +221,18 @@ class TranslationApp(QWidget):
|
|||
self.on_toggle_clicked(False)
|
||||
|
||||
# 버튼 이벤트 연결
|
||||
self.start_chrome_button.clicked.connect(self.start_browser)
|
||||
# self.start_chrome_button.clicked.connect(self.start_browser)
|
||||
self.start_chrome_button.clicked.connect(self.on_start_chrome_button_clicked)
|
||||
|
||||
self.translate_button.clicked.connect(self.start_translation)
|
||||
self.pause_button.clicked.connect(self.pause_translation)
|
||||
self.exit_button.clicked.connect(self.close)
|
||||
|
||||
async def run_async_tasks(self):
|
||||
"""비동기 작업을 실행"""
|
||||
while True:
|
||||
await asyncio.sleep(0.1) # 비동기적으로 잠시 대기하여 응답성을 유지
|
||||
|
||||
def on_toggle_clicked(self, is_checked):
|
||||
"""관리자 토글 상태에 따라 관리자와 직원 필드를 표시/숨김"""
|
||||
if is_checked:
|
||||
|
|
@ -236,11 +251,18 @@ class TranslationApp(QWidget):
|
|||
if widget:
|
||||
widget.setVisible(visible)
|
||||
|
||||
def on_start_chrome_button_clicked(self):
|
||||
"""크롬 실행 버튼 클릭 시 호출"""
|
||||
self.logger.debug('크롬 실행 버튼 클릭됨')
|
||||
# 비동기 함수 실행을 위해 asyncio.create_task 사용
|
||||
asyncio.create_task(self.start_browser())
|
||||
|
||||
def start_browser(self):
|
||||
async def start_browser(self):
|
||||
"""크롬 브라우저 실행 후 로그인"""
|
||||
self.logger.debug('크롬 브라우저를 실행합니다...')
|
||||
self.browser_controller.start_browser()
|
||||
# await self.whale_translator.start_whale_browser()
|
||||
|
||||
await self.browser_controller.start_browser()
|
||||
|
||||
# 관리자 토글 상태에 따라 로그인
|
||||
|
||||
|
|
@ -249,13 +271,13 @@ class TranslationApp(QWidget):
|
|||
admin_pw = self.admin_pw_input.text()
|
||||
user_id = self.user_id_input.text()
|
||||
user_pw = self.user_pw_input.text()
|
||||
self.browser_controller.login(admin_id, user_id, admin_pw, user_pw, is_admin=True)
|
||||
await self.browser_controller.login(admin_id, user_id, admin_pw, user_pw, is_admin=True)
|
||||
else:
|
||||
admin_id = self.admin_id_input.text()
|
||||
admin_pw = self.admin_pw_input.text()
|
||||
user_id = self.user_id_input.text()
|
||||
user_pw = self.user_pw_input.text()
|
||||
self.browser_controller.login(admin_id, user_id, admin_pw, user_pw, is_admin=False)
|
||||
await self.browser_controller.login(admin_id, user_id, admin_pw, user_pw, is_admin=False)
|
||||
|
||||
# 로그인 정보 저장
|
||||
self.save_settings()
|
||||
|
|
@ -386,17 +408,17 @@ class TranslationApp(QWidget):
|
|||
# self.logger.debug(f"번역 작업 중 오류 발생: {e}", exc_info=True)
|
||||
# self.running = False
|
||||
|
||||
def start_translation(self):
|
||||
async def start_translation(self):
|
||||
self.logger.debug('번역 작업을 시작합니다...')
|
||||
self.running = True # 번역 작업이 시작됨
|
||||
|
||||
try:
|
||||
# 1. "신규 상품 등록" 페이지로 이동
|
||||
self.logger.debug('신규 상품 등록 페이지로 이동 중...')
|
||||
self.browser_controller.go_to_new_product_page()
|
||||
await self.browser_controller.go_to_new_product_page()
|
||||
|
||||
# 2. 총 상품 수 수집
|
||||
self.browser_controller.scroll_page_to_bottom()
|
||||
await self.browser_controller.scroll_page_to_bottom()
|
||||
total_products = self.browser_controller.get_total_product_count()
|
||||
if total_products == 0:
|
||||
self.logger.debug('수집할 상품이 없습니다. 작업을 종료합니다.')
|
||||
|
|
@ -412,7 +434,7 @@ class TranslationApp(QWidget):
|
|||
while self.running or completed_count < total_products:
|
||||
# 4. 현재 페이지의 모든 "세부사항 수정 및 업로드" 버튼 찾기
|
||||
self.logger.debug(f'현재 페이지: {page_number}')
|
||||
product_buttons = self.browser_controller.get_product_edit_buttons()
|
||||
product_buttons = await self.browser_controller.get_product_edit_buttons()
|
||||
|
||||
if not product_buttons:
|
||||
self.logger.debug('수정할 상품이 없습니다. 번역 작업을 종료합니다.')
|
||||
|
|
@ -427,27 +449,27 @@ class TranslationApp(QWidget):
|
|||
self.logger.debug(f'{index}/{len(product_buttons)}: 세부사항 수정 작업 중...')
|
||||
|
||||
# 상품명 수집 및 수집 오류 처리
|
||||
product_name = self.browser_controller.get_product_name(index)
|
||||
product_name = await self.browser_controller.get_product_name(index)
|
||||
if product_name == "수집 오류 발생":
|
||||
self.logger.debug('상품 수집 오류, 다음 상품으로 넘어갑니다.')
|
||||
continue
|
||||
|
||||
# 상품 수정 다이얼로그 열기
|
||||
self.browser_controller.open_product_edit_dialog(button)
|
||||
await self.browser_controller.open_product_edit_dialog(button)
|
||||
|
||||
# 옵션 수정
|
||||
self.start_stage(0)
|
||||
self.edit_option()
|
||||
await self.edit_option()
|
||||
self.complete_stage(0)
|
||||
|
||||
# 상세페이지 수정
|
||||
self.start_stage(1)
|
||||
self.detail_trans()
|
||||
await self.detail_trans()
|
||||
self.complete_stage(1)
|
||||
|
||||
# 수정 후 저장
|
||||
self.logger.debug('상품 세부사항 저장 중...')
|
||||
self.browser_controller.save_product_edit()
|
||||
await self.browser_controller.save_product_edit()
|
||||
|
||||
completed_count += 1
|
||||
self.update_total_progress(completed_count, total_products)
|
||||
|
|
@ -459,7 +481,7 @@ class TranslationApp(QWidget):
|
|||
break
|
||||
|
||||
# 6. 다음 페이지로 이동 (있으면)
|
||||
if not self.browser_controller.go_to_next_page():
|
||||
if not await self.browser_controller.go_to_next_page():
|
||||
self.logger.debug('더 이상 페이지가 없습니다. 작업을 종료합니다.')
|
||||
break
|
||||
page_number += 1
|
||||
|
|
@ -483,9 +505,9 @@ class TranslationApp(QWidget):
|
|||
self.whale_translator.close_all_virtual_desktops()
|
||||
super().close()
|
||||
|
||||
def detail_trans(self):
|
||||
async def detail_trans(self):
|
||||
# 상세페이지 탭 클릭
|
||||
self.browser_controller.click_detail_tab()
|
||||
await self.browser_controller.click_detail_tab()
|
||||
self.detail_progress_bar.setValue(0)
|
||||
self.detail_progress_bar.setVisible(True)
|
||||
|
||||
|
|
@ -505,21 +527,21 @@ class TranslationApp(QWidget):
|
|||
break
|
||||
|
||||
self.whale_translator.translate_image(url)
|
||||
self.browser_controller.paste_image_in_chrome(self.clipboardImageManager, url)
|
||||
await self.browser_controller.paste_image_in_chrome(self.clipboardImageManager, url)
|
||||
self.update_detail_progress(i,total_images)
|
||||
|
||||
current_image_count += 1
|
||||
|
||||
# 수정 후 저장
|
||||
self.logger.debug('상품 세부사항 저장 중...')
|
||||
self.browser_controller.save_product_edit()
|
||||
await self.browser_controller.save_product_edit()
|
||||
|
||||
self.detail_progress_bar.setVisible(False)
|
||||
self.detail_progress_bar.setValue(0)
|
||||
|
||||
def edit_option(self):
|
||||
async def edit_option(self):
|
||||
# 상세페이지 탭 클릭
|
||||
self.browser_controller.click_option_tab()
|
||||
await self.browser_controller.click_option_tab()
|
||||
self.detail_progress_bar.setVisible(True)
|
||||
|
||||
# 옵션 최대선택갯수
|
||||
|
|
|
|||
37
main.py
37
main.py
|
|
@ -1,7 +1,11 @@
|
|||
import ctypes
|
||||
from PySide6.QtWidgets import QApplication
|
||||
from gui import TranslationApp
|
||||
from gui import TranslationApp # 기존 TranslationApp UI 사용
|
||||
from logger_module import setup_logger
|
||||
import asyncio
|
||||
import os
|
||||
from whale_translator import WhaleTranslator
|
||||
|
||||
|
||||
# 절전모드를 방지하는 설정 값
|
||||
ES_CONTINUOUS = 0x80000000
|
||||
|
|
@ -15,7 +19,13 @@ def allow_sleep():
|
|||
"""절전모드 방지 설정을 해제"""
|
||||
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)
|
||||
|
||||
def main():
|
||||
async def process_qt_events(app):
|
||||
"""PySide6의 이벤트를 처리하는 비동기 함수"""
|
||||
while True:
|
||||
app.processEvents()
|
||||
await asyncio.sleep(0.01) # 10ms마다 Qt 이벤트 처리
|
||||
|
||||
async def main():
|
||||
# 로깅 설정
|
||||
logger = setup_logger('default_logger', f'appTranslator.log')
|
||||
|
||||
|
|
@ -25,12 +35,29 @@ def main():
|
|||
try:
|
||||
# PySide6 앱 실행
|
||||
app = QApplication([])
|
||||
window = TranslationApp(logger) # 로거를 TranslationApp에 전달
|
||||
|
||||
# DPI 설정
|
||||
try:
|
||||
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
|
||||
ctypes.windll.shcore.SetProcessDpiAwareness(2)
|
||||
except Exception as e:
|
||||
print(f"DPI 인식 설정 실패: {e}")
|
||||
|
||||
# 기존 TranslationApp UI 사용
|
||||
whale_translator = WhaleTranslator(app, logger, secret_mode=True,vd_mode=True) # 디버그 모드 켜기
|
||||
await whale_translator.start_whale_browser()
|
||||
window = TranslationApp(logger, whale_translator) # PySide6 UI
|
||||
window.show()
|
||||
app.exec_()
|
||||
|
||||
# asyncio와 PySide6 이벤트 루프를 통합
|
||||
await asyncio.gather(
|
||||
process_qt_events(app), # PySide6 이벤트 처리
|
||||
window.run_async_tasks() # 비동기 작업
|
||||
)
|
||||
|
||||
finally:
|
||||
# 앱 종료 시 절전모드 방지 해제
|
||||
allow_sleep()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
asyncio.run(main()) # 비동기 함수는 asyncio.run()으로 실행
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 314 KiB |
|
|
@ -1,9 +1,9 @@
|
|||
from PySide6.QtCore import Qt, QRect, QPropertyAnimation, pyqtProperty, pyqtSignal, QPoint
|
||||
from PySide6.QtCore import Qt, QRect, QPropertyAnimation, Property, Signal, QPoint
|
||||
from PySide6.QtGui import QPainter, QColor
|
||||
from PySide6.QtWidgets import QWidget
|
||||
|
||||
class ToggleSwitch(QWidget):
|
||||
clicked = pyqtSignal(bool)
|
||||
clicked = Signal(bool)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(ToggleSwitch, self).__init__(parent)
|
||||
|
|
@ -18,7 +18,7 @@ class ToggleSwitch(QWidget):
|
|||
|
||||
self._init_position()
|
||||
|
||||
@pyqtProperty(QPoint)
|
||||
@Property(QPoint)
|
||||
def circle_pos(self):
|
||||
return self._circle_pos
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
import re
|
||||
from playwright.sync_api import sync_playwright
|
||||
|
||||
def fetch_image_urls():
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=False)
|
||||
page = browser.new_page()
|
||||
page.goto('https://percentry.co.kr')
|
||||
# 추가적인 로그인 및 네비게이션 로직
|
||||
|
||||
# 이미지 URL 수집
|
||||
content = page.locator("div.ck-source-editing-area").inner_html()
|
||||
urls = re.findall(r'src="(https://file\.percenty\.co\.kr[^"]+\.(?:jpg|jpeg|png|gif))"', content)
|
||||
browser.close()
|
||||
return urls
|
||||
|
||||
def translate_images(app, image_urls):
|
||||
for index, url in enumerate(image_urls):
|
||||
app.log.append(f'{index+1}/{len(image_urls)} 이미지 번역 중...')
|
||||
# 번역 로직
|
||||
14
vertexAI.py
14
vertexAI.py
|
|
@ -1,5 +1,7 @@
|
|||
import os
|
||||
import json
|
||||
import asyncio
|
||||
|
||||
from vertexai.generative_models import GenerativeModel
|
||||
|
||||
class VertexAITranslator:
|
||||
|
|
@ -24,7 +26,7 @@ class VertexAITranslator:
|
|||
self.logger.debug("prompt.json 파일을 불러옵니다.")
|
||||
self.prompt_data = self.load_prompt()
|
||||
|
||||
def load_prompt(self):
|
||||
async def load_prompt(self):
|
||||
"""
|
||||
prompt.json 파일을 읽어와 파싱하는 메서드.
|
||||
|
||||
|
|
@ -33,7 +35,7 @@ class VertexAITranslator:
|
|||
try:
|
||||
prompt_path = os.path.join(os.path.dirname(__file__), 'prompt.json')
|
||||
self.logger.debug(f"프롬프트 파일 경로: {prompt_path}")
|
||||
with open(prompt_path, 'r', encoding='utf-8') as file:
|
||||
async with open(prompt_path, 'r', encoding='utf-8') as file:
|
||||
prompt_data = json.load(file)
|
||||
self.logger.debug("prompt.json 파일이 성공적으로 로드되었습니다.")
|
||||
return prompt_data
|
||||
|
|
@ -44,7 +46,7 @@ class VertexAITranslator:
|
|||
self.logger.error(f"prompt.json 파일 파싱 중 오류 발생: {e}", exc_info=True)
|
||||
raise e
|
||||
|
||||
def clean_special_chars(self, text):
|
||||
async def clean_special_chars(self, text):
|
||||
"""
|
||||
텍스트에서 허용되지 않는 특수 문자를 제거하고,
|
||||
필요한 특수 문자를 대체하는 메서드.
|
||||
|
|
@ -73,7 +75,7 @@ class VertexAITranslator:
|
|||
self.logger.debug(f"정리된 텍스트: {cleaned_text_str}")
|
||||
return cleaned_text_str
|
||||
|
||||
def translate_options(self, original_data):
|
||||
async def translate_options(self, original_data):
|
||||
"""
|
||||
주어진 옵션 데이터를 Vertex AI 모델을 통해 번역하는 메서드.
|
||||
|
||||
|
|
@ -83,7 +85,7 @@ class VertexAITranslator:
|
|||
self.logger.debug(f"옵션 데이터를 번역 중: {original_data}")
|
||||
|
||||
# 데이터 정리
|
||||
cleaned_data = {key: self.clean_special_chars(value) for key, value in original_data.items()}
|
||||
cleaned_data = {key: await self.clean_special_chars(value) for key, value in original_data.items()}
|
||||
self.logger.debug(f"정리된 옵션 데이터: {cleaned_data}")
|
||||
|
||||
# 원본 데이터를 프롬프트 템플릿에 넣는다.
|
||||
|
|
@ -93,7 +95,7 @@ class VertexAITranslator:
|
|||
|
||||
# Vertex AI 모델에 프롬프트 전달하여 응답 받기
|
||||
self.logger.debug("Vertex AI 모델에 프롬프트를 전달하여 응답을 기다리는 중...")
|
||||
response = self.model.generate_content(prompt)
|
||||
response = await self.model.generate_content(prompt)
|
||||
self.logger.debug(f"모델 응답: {response.text}")
|
||||
|
||||
# 응답 데이터에서 JSON 형식 추출
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import pyautogui
|
||||
import ctypes
|
||||
import time
|
||||
import win32gui, win32con
|
||||
import win32gui, win32con, win32process
|
||||
from pyvda import VirtualDesktop, get_virtual_desktops
|
||||
import subprocess
|
||||
import asyncio
|
||||
|
||||
class WhaleTranslator:
|
||||
def __init__(self, app, logger, secret_mode=True, vd_mode=False):
|
||||
|
|
@ -11,7 +12,7 @@ class WhaleTranslator:
|
|||
self.logger = logger
|
||||
self.vd_mode = vd_mode
|
||||
self.newtab = "about:newtab"
|
||||
|
||||
self.whale_pid = None
|
||||
isSecret = secret_mode
|
||||
|
||||
if isSecret:
|
||||
|
|
@ -21,53 +22,59 @@ class WhaleTranslator:
|
|||
|
||||
self.whale_hwnd = None
|
||||
|
||||
async def start_whale_browser(self):
|
||||
"""비동기 브라우저 시작 및 가상 데스크탑 처리"""
|
||||
if self.vd_mode:
|
||||
self.ensure_virtual_desktop_2_exists()
|
||||
self.ensure_virtual_desktop_2_exists() # 가상 데스크탑 2 생성
|
||||
|
||||
self.start_whale_browser()
|
||||
|
||||
if self.vd_mode:
|
||||
self.return_to_virtual_desktop_1()
|
||||
|
||||
def start_whale_browser(self):
|
||||
# Whale 브라우저 실행
|
||||
whale_path = r"C:\\Program Files\\Naver\\Naver Whale\\Application\\whale.exe" # whale.exe 경로 지정
|
||||
# 웨일을 시크릿 모드로 실행
|
||||
subprocess.Popen([whale_path, '--incognito'])
|
||||
self.find_whale_window()
|
||||
whale_path = r"C:\\Program Files\\Naver\\Naver Whale\\Application\\whale.exe"
|
||||
process = subprocess.Popen([whale_path, '--incognito'])
|
||||
self.whale_pid = process.pid
|
||||
self.logger.debug(f"Whale 브라우저 실행, PID: {self.whale_pid}")
|
||||
|
||||
pyautogui.hotkey('ctrl', 'l') # 혹은 'ctrl', 'shift'를 사용할 수도 있음
|
||||
await asyncio.sleep(2) # 브라우저가 실행될 때까지 대기
|
||||
|
||||
"""입력기를 영어로 전환한 후 pyautogui로 URL 입력"""
|
||||
# 입력기를 영어로 전환 (한영 전환키 사용)
|
||||
self.switch_language()
|
||||
time.sleep(0.3)
|
||||
pyautogui.typewrite(self.newtab)
|
||||
|
||||
# subprocess.Popen(["C:\\Program Files\\Naver\\Naver Whale\\Application\\whale.exe", '--incognito']) # 경로 확인 필요
|
||||
|
||||
# 창 크기 조정
|
||||
time.sleep(2) # 창이 뜰 때까지 대기
|
||||
hwnd = win32gui.FindWindow(None, self.whale_window_name) # Whale 브라우저 창 이름
|
||||
hwnd = win32gui.FindWindow(None, self.whale_window_name)
|
||||
if hwnd:
|
||||
win32gui.ShowWindow(hwnd, win32con.SW_NORMAL)
|
||||
win32gui.SetWindowPos(hwnd, None, 0, 0, 1920, 1080, win32con.SWP_NOZORDER)
|
||||
else:
|
||||
self.logger.debug("Whale 창을 찾을 수 없습니다.")
|
||||
|
||||
if self.vd_mode:
|
||||
self.return_to_virtual_desktop_1() # 가상 데스크탑 1로 복귀
|
||||
|
||||
def find_window_by_pid(self, pid):
|
||||
"""프로세스 ID를 기반으로 창 핸들을 찾는 메서드"""
|
||||
def enum_windows_callback(hwnd, pid_list):
|
||||
tid, found_pid = win32process.GetWindowThreadProcessId(hwnd)
|
||||
if found_pid == pid:
|
||||
pid_list.append(hwnd)
|
||||
|
||||
hwnd_list = []
|
||||
win32gui.EnumWindows(enum_windows_callback, hwnd_list)
|
||||
return hwnd_list[0] if hwnd_list else None
|
||||
|
||||
def find_whale_window(self):
|
||||
"""웨일 창 핸들을 찾는 메서드"""
|
||||
"""프로세스 ID를 기반으로 웨일 창 핸들을 찾는 메서드"""
|
||||
if not self.whale_hwnd:
|
||||
self.whale_hwnd = self.find_window_by_title(self.whale_window_name)
|
||||
self.whale_hwnd = self.find_window_by_pid(self.whale_pid)
|
||||
return self.whale_hwnd
|
||||
|
||||
def find_window_by_title(self, window_name):
|
||||
def enum_windows_callback(hwnd, result):
|
||||
if win32gui.IsWindowVisible(hwnd) and window_name in win32gui.GetWindowText(hwnd):
|
||||
result.append(hwnd)
|
||||
result = []
|
||||
win32gui.EnumWindows(enum_windows_callback, result)
|
||||
return result[0] if result else None
|
||||
# def find_whale_window(self):
|
||||
# """웨일 창 핸들을 찾는 메서드"""
|
||||
# if not self.whale_hwnd:
|
||||
# self.whale_hwnd = self.find_window_by_title(self.whale_window_name)
|
||||
# return self.whale_hwnd
|
||||
|
||||
# def find_window_by_title(self, window_name):
|
||||
# def enum_windows_callback(hwnd, result):
|
||||
# if win32gui.IsWindowVisible(hwnd) and window_name in win32gui.GetWindowText(hwnd):
|
||||
# result.append(hwnd)
|
||||
# result = []
|
||||
# win32gui.EnumWindows(enum_windows_callback, result)
|
||||
# return result[0] if result else None
|
||||
|
||||
def ensure_virtual_desktop_2_exists(self):
|
||||
"""가상 데스크톱 2가 존재하는지 확인하고, 없으면 생성"""
|
||||
|
|
@ -104,7 +111,7 @@ class WhaleTranslator:
|
|||
try:
|
||||
VirtualDesktop(2).go()
|
||||
self.logger.debug("가상 데스크톱 2로 전환되었습니다.")
|
||||
time.sleep(1)
|
||||
time.sleep(0.3)
|
||||
except Exception as e:
|
||||
self.logger.debug(f"가상 데스크톱 전환 중 오류 발생: {e}", exc_info=True)
|
||||
|
||||
|
|
@ -113,36 +120,36 @@ class WhaleTranslator:
|
|||
try:
|
||||
VirtualDesktop(1).go()
|
||||
self.logger.debug("가상 데스크톱 1로 전환되었습니다.")
|
||||
time.sleep(1)
|
||||
time.sleep(0.3)
|
||||
except Exception as e:
|
||||
self.logger.debug(f"가상 데스크톱 전환 중 오류 발생: {e}", exc_info=True)
|
||||
|
||||
def translate_image(self, url):
|
||||
async def translate_image(self, url):
|
||||
if self.vd_mode:
|
||||
self.switch_to_virtual_desktop_2()
|
||||
await self.switch_to_virtual_desktop_2()
|
||||
|
||||
if self.find_whale_window():
|
||||
win32gui.ShowWindow(self.whale_hwnd, win32con.SW_RESTORE) # 웨일 창 활성화
|
||||
win32gui.SetForegroundWindow(self.whale_hwnd)
|
||||
|
||||
pyautogui.moveTo(960,580) # 마우스 센터로 이동
|
||||
pyautogui.moveTo(960,580) # 마우스 센터로 이동
|
||||
|
||||
pyautogui.hotkey('ctrl', 'l') # 웨일 브라우저의 주소창으로 이동
|
||||
self.enter_url(url)
|
||||
time.sleep(1) # page Loading
|
||||
await asyncio.sleep(1) # 페이지 로딩 대기
|
||||
|
||||
# pyautogui.rightClick()
|
||||
# await asyncio.sleep(0.2) # 페이지 로딩 대기
|
||||
# pyautogui.press('c') # 원본 이미지 클립보드에 복사
|
||||
# await asyncio.sleep(1) # 페이지 로딩 대기
|
||||
|
||||
pyautogui.rightClick()
|
||||
time.sleep(0.2) # 컨텍스트 메뉴 대기
|
||||
pyautogui.press('c') # 번역된 이미지 클립보드에 복사
|
||||
time.sleep(1) # 이미지 로딩 대기
|
||||
|
||||
pyautogui.rightClick()
|
||||
time.sleep(0.2) # 컨텍스트 메뉴 대기
|
||||
await asyncio.sleep(0.2) # 페이지 로딩 대기
|
||||
pyautogui.press('r') # 번역 클릭
|
||||
time.sleep(7) # 번역 완료 대기
|
||||
await asyncio.sleep(7) # 페이지 로딩 대기
|
||||
|
||||
pyautogui.rightClick()
|
||||
time.sleep(0.2) # 컨텍스트 메뉴 대기
|
||||
await asyncio.sleep(0.2) # 페이지 로딩 대기
|
||||
pyautogui.press('c') # 번역된 이미지 클립보드에 복사
|
||||
pyautogui.hotkey('ctrl', 'l') # 새 탭으로 이동
|
||||
pyautogui.typewrite(self.newtab) # URL을 입력
|
||||
|
|
@ -150,7 +157,7 @@ class WhaleTranslator:
|
|||
self.logger.debug(f'번역 완료: {url}')
|
||||
|
||||
if self.vd_mode:
|
||||
self.return_to_virtual_desktop_1()
|
||||
await self.return_to_virtual_desktop_1()
|
||||
else:
|
||||
self.logger.debug('웨일 창을 찾을 수 없습니다.')
|
||||
|
||||
|
|
@ -188,7 +195,7 @@ class WhaleTranslator:
|
|||
# 주소창에 URL 입력하기 전에 영어로 변경
|
||||
# self.set_input_language('EN')
|
||||
|
||||
# time.sleep(0.5) # 입력 모드 전환 후 잠시 대기
|
||||
# await asyncio.sleep(0.5) # 입력 모드 전환 후 잠시 대기
|
||||
|
||||
# 주소창으로 이동 후 URL 입력
|
||||
pyautogui.hotkey('ctrl', 'l') # 주소창으로 이동
|
||||
|
|
@ -199,28 +206,31 @@ class WhaleTranslator:
|
|||
|
||||
|
||||
def close_whale_window_if_exists(self):
|
||||
"""'새 탭 - Whale' 창이 존재하면 종료"""
|
||||
"""'새 시크릿 탭 - Whale' 창이 존재하면 종료"""
|
||||
whale_window_name = "새 탭 - Whale"
|
||||
sec_whale_window_name = "새 시크릿 탭 - Whale"
|
||||
"""웨일 브라우저 창을 프로세스 ID(pid)로 찾아 종료"""
|
||||
try:
|
||||
if not self.whale_pid:
|
||||
self.logger.debug("웨일 프로세스 ID가 설정되지 않았습니다.")
|
||||
return
|
||||
|
||||
def enum_windows_callback(hwnd, result):
|
||||
_, found_pid = win32process.GetWindowThreadProcessId(hwnd)
|
||||
if found_pid == self.whale_pid and win32gui.IsWindowVisible(hwnd):
|
||||
result.append(hwnd)
|
||||
|
||||
whale_hwnd = self.find_window_by_title(whale_window_name)
|
||||
sec_whale_hwnd = self.find_window_by_title(sec_whale_window_name)
|
||||
|
||||
if whale_hwnd:
|
||||
self.logger.debug(f"'{whale_window_name}' 창을 찾았습니다. 종료 중...")
|
||||
win32gui.PostMessage(whale_hwnd, win32con.WM_CLOSE, 0, 0) # 창을 종료하는 메시지 전송
|
||||
time.sleep(1)
|
||||
self.logger.debug(f"'{whale_window_name}' 창을 종료했습니다.")
|
||||
elif sec_whale_hwnd:
|
||||
self.logger.debug(f"'{sec_whale_window_name}' 창을 찾았습니다. 종료 중...")
|
||||
win32gui.PostMessage(sec_whale_hwnd, win32con.WM_CLOSE, 0, 0) # 창을 종료하는 메시지 전송
|
||||
time.sleep(1)
|
||||
self.logger.debug(f"'{sec_whale_window_name}' 창을 종료했습니다.")
|
||||
result = []
|
||||
win32gui.EnumWindows(enum_windows_callback, result)
|
||||
|
||||
else:
|
||||
self.logger.debug(f"'{whale_window_name}' 또는 '{sec_whale_window_name}' 창을 찾지 못했습니다.")
|
||||
if result:
|
||||
hwnd = result[0]
|
||||
self.logger.debug(f"웨일 창을 찾았습니다. 핸들: {hwnd}. 종료 중...")
|
||||
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) # 창을 종료하는 메시지 전송
|
||||
time.sleep(1)
|
||||
self.logger.debug(f"웨일 창이 성공적으로 종료되었습니다.")
|
||||
else:
|
||||
self.logger.debug("웨일 창을 찾을 수 없습니다.")
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"웨일 창을 종료하는 중 오류 발생: {e}", exc_info=True)
|
||||
|
||||
def close_all_virtual_desktops(self):
|
||||
"""모든 가상 데스크톱을 종료"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue