first commit

This commit is contained in:
R5600U_PC 2024-09-23 23:57:58 +09:00
commit 569c382825
19 changed files with 2247 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
Inclode/
Lib/
Scripts/
pyvenv.cfg

View File

@ -0,0 +1,164 @@
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */
/* Greenlet object interface */
#ifndef Py_GREENLETOBJECT_H
#define Py_GREENLETOBJECT_H
#include <Python.h>
#ifdef __cplusplus
extern "C" {
#endif
/* This is deprecated and undocumented. It does not change. */
#define GREENLET_VERSION "1.0.0"
#ifndef GREENLET_MODULE
#define implementation_ptr_t void*
#endif
typedef struct _greenlet {
PyObject_HEAD
PyObject* weakreflist;
PyObject* dict;
implementation_ptr_t pimpl;
} PyGreenlet;
#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type))
/* C API functions */
/* Total number of symbols that are exported */
#define PyGreenlet_API_pointers 12
#define PyGreenlet_Type_NUM 0
#define PyExc_GreenletError_NUM 1
#define PyExc_GreenletExit_NUM 2
#define PyGreenlet_New_NUM 3
#define PyGreenlet_GetCurrent_NUM 4
#define PyGreenlet_Throw_NUM 5
#define PyGreenlet_Switch_NUM 6
#define PyGreenlet_SetParent_NUM 7
#define PyGreenlet_MAIN_NUM 8
#define PyGreenlet_STARTED_NUM 9
#define PyGreenlet_ACTIVE_NUM 10
#define PyGreenlet_GET_PARENT_NUM 11
#ifndef GREENLET_MODULE
/* This section is used by modules that uses the greenlet C API */
static void** _PyGreenlet_API = NULL;
# define PyGreenlet_Type \
(*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM])
# define PyExc_GreenletError \
((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM])
# define PyExc_GreenletExit \
((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM])
/*
* PyGreenlet_New(PyObject *args)
*
* greenlet.greenlet(run, parent=None)
*/
# define PyGreenlet_New \
(*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \
_PyGreenlet_API[PyGreenlet_New_NUM])
/*
* PyGreenlet_GetCurrent(void)
*
* greenlet.getcurrent()
*/
# define PyGreenlet_GetCurrent \
(*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM])
/*
* PyGreenlet_Throw(
* PyGreenlet *greenlet,
* PyObject *typ,
* PyObject *val,
* PyObject *tb)
*
* g.throw(...)
*/
# define PyGreenlet_Throw \
(*(PyObject * (*)(PyGreenlet * self, \
PyObject * typ, \
PyObject * val, \
PyObject * tb)) \
_PyGreenlet_API[PyGreenlet_Throw_NUM])
/*
* PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args)
*
* g.switch(*args, **kwargs)
*/
# define PyGreenlet_Switch \
(*(PyObject * \
(*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \
_PyGreenlet_API[PyGreenlet_Switch_NUM])
/*
* PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent)
*
* g.parent = new_parent
*/
# define PyGreenlet_SetParent \
(*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \
_PyGreenlet_API[PyGreenlet_SetParent_NUM])
/*
* PyGreenlet_GetParent(PyObject* greenlet)
*
* return greenlet.parent;
*
* This could return NULL even if there is no exception active.
* If it does not return NULL, you are responsible for decrementing the
* reference count.
*/
# define PyGreenlet_GetParent \
(*(PyGreenlet* (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_GET_PARENT_NUM])
/*
* deprecated, undocumented alias.
*/
# define PyGreenlet_GET_PARENT PyGreenlet_GetParent
# define PyGreenlet_MAIN \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_MAIN_NUM])
# define PyGreenlet_STARTED \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_STARTED_NUM])
# define PyGreenlet_ACTIVE \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_ACTIVE_NUM])
/* Macro that imports greenlet and initializes C API */
/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we
keep the older definition to be sure older code that might have a copy of
the header still works. */
# define PyGreenlet_Import() \
{ \
_PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \
}
#endif /* GREENLET_MODULE */
#ifdef __cplusplus
}
#endif
#endif /* !Py_GREENLETOBJECT_H */

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

846
appTranslator.log Normal file
View File

@ -0,0 +1,846 @@
2024-09-23 20:57:09,904 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 20:57:33,487 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 20:57:40,422 - browser_control.py:23 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 20:57:45,171 - browser_control.py:38 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 20:57:45,173 - browser_control.py:44 - default_logger - DEBUG - 크롬 창을 찾을 수 없습니다.
2024-09-23 20:57:45,173 - browser_control.py:49 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 20:57:45,345 - browser_control.py:66 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 20:58:00,056 - browser_control.py:106 - default_logger - DEBUG - 이미지 URL을 추출 중...
2024-09-23 20:58:00,195 - browser_control.py:110 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 20:58:00,235 - browser_control.py:117 - default_logger - DEBUG - data-value 속성에서 HTML 수집 완료.
2024-09-23 20:58:00,235 - browser_control.py:121 - default_logger - DEBUG - 추출된 이미지 URL 수: 23
2024-09-23 20:58:00,237 - browser_control.py:123 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 20:58:00,263 - browser_control.py:137 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 20:58:00,345 - browser_control.py:141 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 20:58:00,381 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 20:58:14,186 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/d03d7458-8840-4d5d-9bf3-3cf612ce9c5d.jpg
2024-09-23 20:58:14,222 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 20:58:15,223 - browser_control.py:91 - default_logger - DEBUG - 크롬 창을 찾을 수 없습니다.
2024-09-23 20:58:15,426 - browser_control.py:176 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 20:58:15,456 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 20:58:29,255 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/2a138f30-bf7d-4c7f-8999-a729b7f4a396.jpg
2024-09-23 20:58:29,285 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 20:58:30,286 - browser_control.py:91 - default_logger - DEBUG - 크롬 창을 찾을 수 없습니다.
2024-09-23 20:58:30,488 - browser_control.py:176 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 20:58:30,523 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 20:58:44,855 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/785b254b-2971-4e54-91a4-f75f38929acc.jpg
2024-09-23 20:58:44,866 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 20:58:45,868 - browser_control.py:91 - default_logger - DEBUG - 크롬 창을 찾을 수 없습니다.
2024-09-23 20:58:46,072 - browser_control.py:176 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 20:58:46,072 - whale_translator.py:56 - default_logger - DEBUG - 가상 데스크톱 전환 중 오류 발생: Desktop number 2 exceeds the number of desktops, 1.
2024-09-23 21:00:03,115 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:00:06,915 - browser_control.py:23 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 21:00:11,559 - browser_control.py:38 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 21:00:11,561 - browser_control.py:44 - default_logger - DEBUG - 크롬 창을 찾을 수 없습니다.
2024-09-23 21:00:11,561 - browser_control.py:49 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 21:00:11,698 - browser_control.py:66 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 21:16:24,532 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:16:29,339 - browser_control.py:23 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 21:16:33,553 - browser_control.py:38 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 21:16:33,564 - browser_control.py:44 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 21:16:33,565 - browser_control.py:51 - default_logger - DEBUG - 크롬 창 핸들: 481694866
2024-09-23 21:16:33,566 - browser_control.py:57 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 21:16:33,689 - browser_control.py:74 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 21:16:43,114 - browser_control.py:114 - default_logger - DEBUG - 이미지 URL을 추출 중...
2024-09-23 21:16:43,269 - browser_control.py:118 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 21:16:43,298 - browser_control.py:125 - default_logger - DEBUG - data-value 속성에서 HTML 수집 완료.
2024-09-23 21:16:43,299 - browser_control.py:129 - default_logger - DEBUG - 추출된 이미지 URL 수: 23
2024-09-23 21:16:43,299 - browser_control.py:131 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 21:16:43,318 - browser_control.py:145 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 21:16:43,401 - browser_control.py:149 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 21:16:43,436 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:16:57,247 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/d03d7458-8840-4d5d-9bf3-3cf612ce9c5d.jpg
2024-09-23 21:16:57,272 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:16:58,279 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:16:58,486 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:16:58,514 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:17:12,320 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/2a138f30-bf7d-4c7f-8999-a729b7f4a396.jpg
2024-09-23 21:17:12,340 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:17:13,342 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:17:13,544 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:17:13,572 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:17:27,379 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/785b254b-2971-4e54-91a4-f75f38929acc.jpg
2024-09-23 21:17:27,401 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:17:28,402 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:17:28,605 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:17:28,630 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:17:42,432 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/6bf2fa9a-062b-4fa5-aea6-3ea34367d0ca.jpg
2024-09-23 21:17:42,451 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:17:43,453 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:17:43,656 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:17:43,683 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:17:57,479 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/552f4047-a926-401e-82a0-18ef0f57a506.jpg
2024-09-23 21:17:57,500 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:17:58,501 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:17:58,705 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:17:58,747 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:18:12,550 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/3a2ecf1e-5763-4413-a713-74db0c3a65d2.jpg
2024-09-23 21:18:12,571 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:18:13,572 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:18:13,776 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:18:13,802 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:18:27,616 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/bc45eb79-1e9f-45d8-811d-bc11f4a6dfce.jpg
2024-09-23 21:18:27,635 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:18:28,636 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:18:28,840 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:18:28,876 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:18:42,668 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/0c624ab7-2f66-4935-8f0e-97808fc3c05c.jpg
2024-09-23 21:18:42,689 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:18:43,691 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:18:43,894 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:18:43,918 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:18:57,722 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/5b753750-e8f4-49c5-850e-53386d4652f1.jpg
2024-09-23 21:18:57,744 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:18:58,746 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:18:58,949 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:18:58,979 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:19:12,766 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/3d529607-ca26-426c-851b-50fd48c31239.jpg
2024-09-23 21:19:12,791 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:19:13,792 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:19:13,995 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:19:14,025 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:19:27,834 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/d3c58ca2-2ea0-48ef-8ba7-9d3c2c4e727a.jpg
2024-09-23 21:19:27,859 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:19:28,861 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:19:29,063 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:19:29,088 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:19:42,902 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/14d463e1-ed35-41ae-ba6d-dd82cd2d7bc1.jpg
2024-09-23 21:19:42,923 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:19:43,925 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:19:44,128 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:19:44,154 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:19:57,956 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/8cf16fce-7511-4c0e-a446-786984065d12.jpg
2024-09-23 21:19:57,979 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:19:58,980 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:19:59,183 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:19:59,204 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:20:13,021 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/128b1cbe-59fc-4255-bb3d-36ce1b27cff7.jpg
2024-09-23 21:20:13,046 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:20:14,047 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:20:14,251 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:20:14,277 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:20:28,090 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/2fc3bc9c-ad1b-4cef-8e4c-f3883834b14e.jpg
2024-09-23 21:20:28,115 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:20:29,116 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:20:29,319 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:20:29,344 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:20:43,157 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/d33bba73-27b3-4fd8-baf9-ab205383cee3.jpg
2024-09-23 21:20:43,179 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:20:44,180 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:20:44,384 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:20:44,414 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:20:58,237 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/291e462d-7cb7-4f56-a9c7-1a5caab2dc5c.jpg
2024-09-23 21:20:58,256 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:20:59,257 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:20:59,465 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:20:59,492 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:21:13,291 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/6547638e-cb21-4f5d-a82b-4991d8cdbb13.jpg
2024-09-23 21:21:13,312 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:21:14,313 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:21:14,516 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:21:14,582 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:21:28,392 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/fb02de39-0b8e-403f-a37e-30f705f467e4.jpg
2024-09-23 21:21:28,411 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:21:29,412 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:21:29,615 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:21:29,641 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:21:43,455 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/56b60dec-1606-4708-a7e2-243740b6a940.jpg
2024-09-23 21:21:43,480 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:21:44,482 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:21:44,686 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:21:44,718 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:21:58,508 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/087001ba-5b28-4828-8f60-3c8de3b6fbf4.jpg
2024-09-23 21:21:58,530 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:21:59,531 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:21:59,735 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:21:59,762 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:22:13,562 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/a7150f7c-ce28-4153-8e18-76bbe1856ba8.jpg
2024-09-23 21:22:13,582 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:22:14,584 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:22:14,787 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:22:14,814 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 21:22:28,643 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/5a8ad00a-6fe1-4732-9301-e60c74f53e81.jpg
2024-09-23 21:22:28,668 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 21:22:29,669 - browser_control.py:97 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 21:22:29,872 - browser_control.py:184 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 21:33:19,472 - browser_control.py:81 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 22:04:11,612 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:04:54,232 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:05:00,522 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 22:05:04,823 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 22:05:04,833 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 22:05:04,835 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 529238
2024-09-23 22:05:04,835 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 22:05:04,981 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 22:05:17,915 - browser_control.py:117 - default_logger - DEBUG - 이미지 URL을 추출 중...
2024-09-23 22:05:18,061 - browser_control.py:121 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 22:05:18,087 - browser_control.py:128 - default_logger - DEBUG - data-value 속성에서 HTML 수집 완료.
2024-09-23 22:05:18,088 - browser_control.py:132 - default_logger - DEBUG - 추출된 이미지 URL 수: 23
2024-09-23 22:05:18,089 - browser_control.py:134 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 22:06:22,933 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:06:25,469 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 22:06:29,800 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 22:06:29,811 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 22:06:29,812 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 280105178
2024-09-23 22:06:29,813 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 22:06:29,935 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 22:07:10,860 - browser_control.py:117 - default_logger - DEBUG - 이미지 URL을 추출 중...
2024-09-23 22:07:11,021 - browser_control.py:121 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 22:07:11,049 - browser_control.py:128 - default_logger - DEBUG - data-value 속성에서 HTML 수집 완료.
2024-09-23 22:07:11,050 - browser_control.py:132 - default_logger - DEBUG - 추출된 이미지 URL 수: 23
2024-09-23 22:07:11,050 - browser_control.py:134 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 22:07:11,082 - browser_control.py:165 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 22:07:11,188 - browser_control.py:169 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 22:07:11,216 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:07:25,010 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/d03d7458-8840-4d5d-9bf3-3cf612ce9c5d.jpg
2024-09-23 22:07:25,028 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:07:26,033 - browser_control.py:100 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 22:07:26,034 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 22:07:26,238 - browser_control.py:205 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 22:07:26,252 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:07:40,046 - whale_translator.py:96 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66f116b385dd2b47260f4025/2a138f30-bf7d-4c7f-8999-a729b7f4a396.jpg
2024-09-23 22:07:40,053 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:07:41,060 - browser_control.py:100 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 22:07:41,060 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 22:07:41,270 - browser_control.py:205 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 22:07:41,287 - whale_translator.py:53 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:35:58,514 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 22:36:01,551 - whale_translator.py:81 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:36:04,526 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 22:36:04,527 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 22:36:09,554 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 22:36:09,566 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 22:36:09,568 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 2557266
2024-09-23 22:36:13,588 - browser_control.py:199 - default_logger - DEBUG - 광고 다이알로그가 없어서 바로 진행합니다.
2024-09-23 22:36:13,589 - browser_control.py:62 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 22:36:13,719 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 22:38:12,258 - gui.py:253 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 22:38:12,445 - browser_control.py:86 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 22:38:36,947 - whale_translator.py:62 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 22:38:38,955 - whale_translator.py:81 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:39:12,784 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:39:13,787 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 22:39:15,807 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:39:40,167 - gui.py:253 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 22:41:03,112 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:41:04,114 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 22:41:06,176 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:41:18,430 - gui.py:253 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 22:41:19,534 - whale_translator.py:146 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 22:41:19,535 - whale_translator.py:148 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 22:44:45,969 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 22:44:49,011 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:44:52,942 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 22:44:52,942 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 22:44:56,990 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 22:44:56,999 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 22:44:56,999 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 1219233078
2024-09-23 22:45:01,394 - browser_control.py:199 - default_logger - DEBUG - 광고 다이알로그가 없어서 바로 진행합니다.
2024-09-23 22:45:01,394 - browser_control.py:62 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 22:45:01,517 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 22:45:17,110 - gui.py:154 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 22:45:17,110 - gui.py:163 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 22:45:17,456 - browser_control.py:205 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 22:45:17,456 - gui.py:169 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 22:45:17,557 - browser_control.py:213 - default_logger - DEBUG - 수정할 상품 개수: 0
2024-09-23 22:45:17,558 - gui.py:175 - default_logger - DEBUG - 수정할 상품이 없습니다. 번역 작업을 종료합니다.
2024-09-23 22:45:17,558 - gui.py:217 - default_logger - DEBUG - 모든 상품 번역 및 저장 완료.
2024-09-23 22:45:38,553 - gui.py:253 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 22:45:38,751 - browser_control.py:86 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 22:45:38,757 - whale_translator.py:167 - default_logger - DEBUG - 가상 데스크톱 종료 중 오류 발생: WhaleTranslator.close_whale_window_if_exists() takes 1 positional argument but 2 were given
2024-09-23 22:50:16,363 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 22:50:17,365 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 22:50:19,384 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 22:50:22,652 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 22:50:22,653 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 22:50:26,907 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 22:50:26,918 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 22:50:26,919 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 1339953450
2024-09-23 22:50:31,308 - browser_control.py:199 - default_logger - DEBUG - 광고 다이알로그가 없어서 바로 진행합니다.
2024-09-23 22:50:31,308 - browser_control.py:62 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 22:50:31,435 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:00:08,410 - gui.py:253 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:00:08,617 - browser_control.py:86 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:00:08,619 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:00:09,620 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:00:10,723 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:00:10,724 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:04:25,717 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:04:28,758 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:04:33,337 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:04:33,338 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:04:37,966 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:04:37,975 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:04:37,977 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 1315664
2024-09-23 23:04:44,074 - browser_control.py:199 - default_logger - DEBUG - 광고 다이알로그가 없어서 바로 진행합니다.
2024-09-23 23:04:44,074 - browser_control.py:62 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 23:04:44,217 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:06:41,531 - gui.py:262 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:06:41,723 - browser_control.py:86 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:06:41,725 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:06:42,726 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:06:43,828 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:06:43,829 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:07:58,181 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:08:01,222 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:08:03,853 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:08:03,854 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:08:08,192 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:08:08,202 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:08:08,203 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 790834
2024-09-23 23:08:12,821 - browser_control.py:213 - default_logger - DEBUG - 다이얼로그가 발견되지 않았거나 오류 발생: Page.wait_for_selector: Timeout 3000ms exceeded.
Call log:
waiting for locator("div.ant-modal-wrap.ant-modal-centered") to be visible
2024-09-23 23:08:12,822 - browser_control.py:62 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 23:08:12,960 - browser_control.py:79 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:09:03,280 - gui.py:262 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:09:03,468 - browser_control.py:86 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:09:03,470 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:09:04,472 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:09:05,575 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:09:05,577 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:09:32,341 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:09:35,377 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:09:38,000 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:09:38,001 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:09:42,294 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:09:42,303 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:09:42,305 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 193532504
2024-09-23 23:09:43,753 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 23:09:43,905 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:09:45,851 - browser_control.py:204 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:09:45,962 - browser_control.py:210 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:09:49,712 - gui.py:154 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:09:49,712 - gui.py:163 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:09:50,015 - browser_control.py:222 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:09:50,015 - gui.py:230 - default_logger - DEBUG - 번역 작업 중 오류 발생: 'BrowserController' object has no attribute 'scroll_page_to_bottom'
2024-09-23 23:10:51,468 - gui.py:262 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:10:51,649 - browser_control.py:89 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:10:51,651 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:10:52,652 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:10:53,756 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:10:53,756 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:10:55,077 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:10:58,118 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:11:01,202 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:11:01,202 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:11:05,243 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:11:05,261 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:11:05,263 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 4003134
2024-09-23 23:11:07,090 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 23:11:07,222 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:11:08,941 - browser_control.py:204 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:11:09,032 - browser_control.py:210 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:11:10,554 - gui.py:154 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:11:10,555 - gui.py:163 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:11:10,852 - browser_control.py:222 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:11:10,853 - browser_control.py:468 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:11:14,986 - browser_control.py:478 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:11:14,996 - browser_control.py:468 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:11:16,014 - browser_control.py:478 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:11:16,019 - browser_control.py:238 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:11:16,041 - browser_control.py:243 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:11:16,042 - gui.py:178 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:11:16,051 - browser_control.py:468 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:11:17,067 - browser_control.py:478 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:11:17,071 - browser_control.py:238 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:11:17,078 - browser_control.py:243 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:11:17,078 - gui.py:193 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:11:17,120 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:11:17,733 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:11:18,750 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:11:19,126 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:11:19,136 - browser_control.py:283 - default_logger - DEBUG - 추출된 이미지 URL 수: 0
2024-09-23 23:11:19,136 - browser_control.py:286 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:11:19,177 - browser_control.py:309 - default_logger - DEBUG - 이미지 URL 추출 중 오류: 'Logger' object is not callable
2024-09-23 23:11:19,178 - gui.py:214 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:11:19,354 - browser_control.py:335 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:11:19,469 - gui.py:217 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:11:19,470 - gui.py:193 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
2024-09-23 23:11:19,559 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:11:19,970 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:11:20,802 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:11:21,029 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:11:21,037 - browser_control.py:283 - default_logger - DEBUG - 추출된 이미지 URL 수: 0
2024-09-23 23:11:21,037 - browser_control.py:286 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:11:21,062 - browser_control.py:309 - default_logger - DEBUG - 이미지 URL 추출 중 오류: 'Logger' object is not callable
2024-09-23 23:11:21,063 - gui.py:214 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:11:21,149 - browser_control.py:335 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:11:21,167 - gui.py:217 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:11:21,167 - gui.py:193 - default_logger - DEBUG - 3/20: 세부사항 수정 작업 중...
2024-09-23 23:11:21,337 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:11:21,812 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:11:22,658 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:11:22,886 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:11:22,900 - browser_control.py:283 - default_logger - DEBUG - 추출된 이미지 URL 수: 0
2024-09-23 23:11:22,900 - browser_control.py:286 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:11:22,930 - browser_control.py:309 - default_logger - DEBUG - 이미지 URL 추출 중 오류: 'Logger' object is not callable
2024-09-23 23:11:22,930 - gui.py:214 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:11:23,015 - browser_control.py:335 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:11:23,035 - gui.py:217 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:11:23,035 - gui.py:193 - default_logger - DEBUG - 4/20: 세부사항 수정 작업 중...
2024-09-23 23:11:23,288 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:11:23,659 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:11:24,520 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:11:24,769 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:11:24,779 - browser_control.py:283 - default_logger - DEBUG - 추출된 이미지 URL 수: 0
2024-09-23 23:11:24,779 - browser_control.py:286 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:11:24,806 - browser_control.py:309 - default_logger - DEBUG - 이미지 URL 추출 중 오류: 'Logger' object is not callable
2024-09-23 23:11:24,806 - gui.py:214 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:11:24,899 - browser_control.py:335 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:11:24,920 - gui.py:217 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:11:24,920 - gui.py:193 - default_logger - DEBUG - 5/20: 세부사항 수정 작업 중...
2024-09-23 23:11:25,130 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:11:25,553 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:16:00,259 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:16:01,262 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 23:16:03,283 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:16:07,034 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:16:07,034 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:16:10,969 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:16:10,979 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:16:10,980 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 4461072
2024-09-23 23:16:12,537 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 관리자 계정
2024-09-23 23:16:12,667 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 관리자 계정
2024-09-23 23:16:14,368 - browser_control.py:204 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:16:14,592 - browser_control.py:210 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:16:16,370 - gui.py:154 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:16:16,370 - gui.py:163 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:16:16,631 - browser_control.py:222 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:16:16,632 - gui.py:172 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:16:16,639 - browser_control.py:471 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:16:20,752 - browser_control.py:481 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:16:20,756 - browser_control.py:238 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:16:20,765 - browser_control.py:243 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:16:20,766 - gui.py:187 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:16:20,806 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:16:21,366 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:16:22,462 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:16:22,811 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:16:22,835 - browser_control.py:286 - default_logger - DEBUG - 추출된 이미지 URL 수: 23
2024-09-23 23:16:22,836 - browser_control.py:289 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:16:22,891 - browser_control.py:300 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:16:22,891 - browser_control.py:303 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:16:23,021 - browser_control.py:308 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:16:23,021 - browser_control.py:312 - default_logger - DEBUG - 이미지 URL 추출 중 오류: name 'urls' is not defined
2024-09-23 23:16:23,022 - gui.py:208 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:16:23,113 - browser_control.py:338 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:16:23,140 - gui.py:211 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:16:23,140 - gui.py:187 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
2024-09-23 23:16:23,385 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:16:23,796 - browser_control.py:260 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:16:24,608 - browser_control.py:269 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:16:24,830 - browser_control.py:278 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:16:24,856 - browser_control.py:286 - default_logger - DEBUG - 추출된 이미지 URL 수: 10
2024-09-23 23:16:24,857 - browser_control.py:289 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:16:24,883 - browser_control.py:300 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:16:24,884 - browser_control.py:303 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:16:24,983 - browser_control.py:308 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:16:24,983 - browser_control.py:312 - default_logger - DEBUG - 이미지 URL 추출 중 오류: name 'urls' is not defined
2024-09-23 23:16:24,984 - gui.py:208 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:16:25,065 - browser_control.py:338 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:16:25,086 - gui.py:211 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:16:25,086 - gui.py:187 - default_logger - DEBUG - 3/20: 세부사항 수정 작업 중...
2024-09-23 23:16:25,342 - browser_control.py:257 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:17:45,837 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:17:46,838 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 23:17:48,854 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:18:10,517 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:18:10,517 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:18:14,875 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:18:14,888 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:18:14,890 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 921572508
2024-09-23 23:18:16,545 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:18:16,749 - browser_control.py:77 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:18:19,769 - browser_control.py:216 - default_logger - DEBUG - 다이얼로그가 발견되지 않았거나 오류 발생: Page.wait_for_selector: Timeout 3000ms exceeded.
Call log:
waiting for locator("div.ant-modal-wrap.ant-modal-centered") to be visible
2024-09-23 23:18:23,764 - gui.py:256 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:18:23,964 - browser_control.py:89 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:18:23,966 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:18:24,967 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:18:26,071 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:18:26,071 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:18:43,632 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:18:46,667 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:18:50,021 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:18:50,021 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:18:54,552 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:18:54,561 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:18:54,563 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 450303078
2024-09-23 23:18:55,532 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:18:55,752 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:18:58,030 - browser_control.py:217 - default_logger - DEBUG - 다이얼로그가 발견되지 않았거나 오류 발생: Page.wait_for_selector: Target page, context or browser has been closed
Call log:
waiting for locator("div.ant-modal-wrap.ant-modal-centered") to be visible
2024-09-23 23:21:56,741 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:21:57,742 - whale_translator.py:63 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 23:21:59,763 - whale_translator.py:82 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:22:04,930 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:22:04,930 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:22:09,335 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:22:09,348 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:22:09,350 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 1388320088
2024-09-23 23:22:10,450 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:22:10,674 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:22:12,506 - browser_control.py:205 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:22:12,593 - browser_control.py:211 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:22:19,603 - gui.py:159 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:22:19,603 - gui.py:168 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:22:19,918 - browser_control.py:223 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:22:19,919 - gui.py:177 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:22:19,926 - browser_control.py:472 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:22:24,072 - browser_control.py:482 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:22:24,076 - browser_control.py:239 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:22:24,085 - browser_control.py:244 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:22:24,085 - gui.py:192 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:22:24,119 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:22:24,626 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:22:25,701 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:22:26,029 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:22:26,055 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 13
2024-09-23 23:22:26,056 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:22:26,083 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:22:26,083 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:22:26,202 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:22:26,225 - whale_translator.py:73 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:22:27,228 - gui.py:229 - default_logger - DEBUG - 번역 작업 중 오류 발생: (0, 'SetForegroundWindow', 'No error message is available')
2024-09-23 23:23:02,685 - gui.py:261 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:23:02,913 - browser_control.py:90 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:23:02,916 - whale_translator.py:141 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:23:03,917 - whale_translator.py:144 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:23:05,019 - whale_translator.py:162 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:23:05,020 - whale_translator.py:164 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:25:06,753 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:25:09,786 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:25:20,238 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:25:20,240 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:25:24,548 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:25:24,558 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:25:24,561 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 194122328
2024-09-23 23:25:25,812 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:25:26,045 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:25:27,573 - browser_control.py:205 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:25:27,720 - browser_control.py:211 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:25:30,031 - gui.py:159 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:25:30,031 - gui.py:168 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:25:30,325 - browser_control.py:223 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:25:30,326 - gui.py:177 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:25:30,332 - browser_control.py:472 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:25:34,480 - browser_control.py:482 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:25:34,482 - browser_control.py:239 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:25:34,482 - browser_control.py:244 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:25:34,482 - gui.py:192 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:25:34,527 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:25:35,049 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:25:36,081 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:25:36,369 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:25:36,392 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 13
2024-09-23 23:25:36,392 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:25:36,419 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:25:36,419 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:25:36,507 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:25:36,526 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:25:50,326 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i4/2206582812176/O1CN01SYsODm1RweY6CPI1V_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:25:50,344 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:25:51,346 - gui.py:229 - default_logger - DEBUG - 번역 작업 중 오류 발생: BrowserController.paste_image_in_chrome() missing 1 required positional argument: 'base64toimage'
2024-09-23 23:26:11,823 - gui.py:261 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:26:12,043 - browser_control.py:90 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:26:12,050 - whale_translator.py:142 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:26:13,050 - whale_translator.py:145 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:26:14,152 - whale_translator.py:163 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:26:14,153 - whale_translator.py:165 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:28:48,095 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:28:51,140 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:29:00,685 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:29:00,685 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:29:05,103 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:29:05,115 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:29:05,117 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 4658494
2024-09-23 23:29:06,515 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:29:06,762 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:29:08,432 - browser_control.py:205 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:29:08,638 - browser_control.py:211 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:29:22,837 - gui.py:159 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:29:22,837 - gui.py:168 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:29:23,195 - browser_control.py:223 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:29:23,195 - gui.py:177 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:29:23,205 - browser_control.py:472 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:29:27,348 - browser_control.py:482 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:29:27,352 - browser_control.py:239 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:29:27,361 - browser_control.py:244 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:29:27,361 - gui.py:192 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:29:27,385 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:29:27,892 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:29:28,827 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:29:29,107 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:29:29,127 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 13
2024-09-23 23:29:29,128 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:29:29,154 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:29:29,155 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:29:29,240 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:29:29,267 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:29:43,051 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i4/2206582812176/O1CN01SYsODm1RweY6CPI1V_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:29:43,059 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:29:44,072 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:29:44,072 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:29:44,075 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:29:44,279 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:29:44,293 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:29:58,103 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01L3VUEA1RwebqQZTNp_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:29:58,117 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:29:59,118 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:29:59,118 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:29:59,118 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:29:59,322 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:29:59,333 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:30:13,153 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01skPWr91RweboBW080_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:30:13,167 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:30:14,168 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:14,168 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:14,168 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:30:14,372 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:30:14,387 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:30:28,186 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i3/2206582812176/O1CN01rBLHIW1RwebzHvrgo_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:30:28,201 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:30:29,202 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:29,202 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:29,202 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:30:29,406 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:30:29,419 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:30:43,236 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i1/2206582812176/O1CN01hGOPTO1RweboBV3v1_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:30:43,248 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:30:44,249 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:44,249 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:44,249 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:30:44,453 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:30:44,465 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:30:58,284 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01B0BcfX1RwebspygRX_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:30:58,298 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:30:59,299 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:59,299 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:30:59,299 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:30:59,503 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:30:59,518 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:31:13,321 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01qfHQ251Rwebsq0lLQ_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:31:13,332 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:31:14,335 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:14,335 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:14,335 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:31:14,539 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:31:14,551 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:31:28,356 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i4/2206582812176/O1CN01Zql22i1RweboBVOiK_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:31:28,370 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:31:29,370 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:29,371 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:29,371 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:31:29,574 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:31:29,588 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:31:43,406 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i1/2206582812176/O1CN01CI6VCl1RwebqQYjgt_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:31:43,419 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:31:44,421 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:44,421 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:44,421 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:31:44,624 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:31:44,636 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:31:58,458 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01l9pD8C1RwebtXCxT3_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:31:58,474 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:31:59,476 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:59,476 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:31:59,476 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:31:59,679 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:31:59,694 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:32:13,505 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01GkvW771Rwec03MpH2_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:32:13,517 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:32:14,519 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:14,519 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:14,519 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:32:14,722 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:32:14,735 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:32:28,559 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i3/2206582812176/O1CN01OTK20e1RwebsioiUX_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:32:28,571 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:32:29,575 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:29,575 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:29,575 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:32:29,779 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:32:29,791 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:32:43,609 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2206582812176/O1CN01cl2rSG1RwebsioW16_!!2206582812176.jpg_Q75.jpg
2024-09-23 23:32:43,621 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:32:44,623 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:44,623 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:32:44,623 - base64_to_image.py:59 - default_logger - DEBUG - 클립보드에 Base64 이미지가 없습니다.
2024-09-23 23:32:44,828 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:32:44,828 - gui.py:213 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:32:44,973 - browser_control.py:339 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:32:45,014 - gui.py:216 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:32:45,014 - gui.py:192 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
2024-09-23 23:32:45,382 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:32:45,912 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:32:46,947 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:32:47,237 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:32:47,262 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 33
2024-09-23 23:32:47,262 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:32:47,305 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:32:47,306 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:32:47,440 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:32:47,454 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:32:48,456 - gui.py:229 - default_logger - DEBUG - 번역 작업 중 오류 발생: (1400, 'SetForegroundWindow', '잘못된 창 핸들입니다.')
2024-09-23 23:40:02,630 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:40:05,674 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:40:33,985 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:40:34,987 - whale_translator.py:142 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾았습니다. 종료 중...
2024-09-23 23:40:35,990 - whale_translator.py:145 - default_logger - DEBUG - '새 탭 - Whale' 창을 종료했습니다.
2024-09-23 23:40:35,990 - whale_translator.py:64 - default_logger - DEBUG - 가상 데스크톱 2가 이미 존재합니다.
2024-09-23 23:40:38,026 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:40:45,454 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:40:45,455 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:40:49,761 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:40:49,772 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:40:49,773 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 2888424
2024-09-23 23:40:51,390 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:40:51,586 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:40:53,137 - browser_control.py:205 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:40:53,298 - browser_control.py:211 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:41:11,126 - gui.py:159 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:41:11,126 - gui.py:168 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:41:11,534 - browser_control.py:223 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:41:11,534 - gui.py:177 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:41:11,543 - browser_control.py:472 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:41:15,676 - browser_control.py:482 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:41:15,681 - browser_control.py:239 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:41:15,690 - browser_control.py:244 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:41:15,690 - gui.py:192 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:41:15,729 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:41:16,392 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:41:17,523 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:41:17,868 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:41:17,895 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 3
2024-09-23 23:41:17,896 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:41:17,925 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:41:17,926 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:41:18,031 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:41:18,047 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:41:19,049 - gui.py:229 - default_logger - DEBUG - 번역 작업 중 오류 발생: (0, 'SetForegroundWindow', 'No error message is available')
2024-09-23 23:41:37,957 - gui.py:261 - default_logger - DEBUG - 프로그램을 종료합니다...
2024-09-23 23:41:38,174 - browser_control.py:90 - default_logger - DEBUG - 브라우저 종료됨.
2024-09-23 23:41:38,181 - whale_translator.py:147 - default_logger - DEBUG - '새 탭 - Whale' 창을 찾지 못했습니다.
2024-09-23 23:41:39,288 - whale_translator.py:163 - default_logger - DEBUG - 남은 가상 데스크톱 수: 1
2024-09-23 23:41:39,288 - whale_translator.py:165 - default_logger - DEBUG - 모든 가상 데스크톱이 종료되었습니다.
2024-09-23 23:42:01,858 - whale_translator.py:59 - default_logger - DEBUG - 가상 데스크톱 2가 생성되었습니다.
2024-09-23 23:42:04,896 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:42:07,975 - gui.py:119 - default_logger - DEBUG - 크롬 브라우저를 실행합니다...
2024-09-23 23:42:07,976 - browser_control.py:26 - default_logger - DEBUG - 크롬 브라우저 실행 중...
2024-09-23 23:42:12,333 - browser_control.py:41 - default_logger - DEBUG - newPage 로딩 ...
2024-09-23 23:42:12,342 - browser_control.py:47 - default_logger - DEBUG - 페이지 제목: 퍼센티 - 셀러들을 위한 AI 구매대행 솔루션
2024-09-23 23:42:12,344 - browser_control.py:54 - default_logger - DEBUG - 크롬 창 핸들: 12326284
2024-09-23 23:42:13,441 - browser_control.py:60 - default_logger - DEBUG - 로그인 시도 중: 직원 계정
2024-09-23 23:42:13,647 - browser_control.py:78 - default_logger - DEBUG - 로그인 완료: 직원 계정
2024-09-23 23:42:15,419 - browser_control.py:205 - default_logger - DEBUG - 다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.
2024-09-23 23:42:15,623 - browser_control.py:211 - default_logger - DEBUG - 다이얼로그를 성공적으로 닫았습니다.
2024-09-23 23:42:18,016 - gui.py:159 - default_logger - DEBUG - 번역 작업을 시작합니다...
2024-09-23 23:42:18,016 - gui.py:168 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 중...
2024-09-23 23:42:18,311 - browser_control.py:223 - default_logger - DEBUG - 신규 상품 등록 페이지로 이동 완료.
2024-09-23 23:42:18,311 - gui.py:177 - default_logger - DEBUG - 현재 페이지: 1
2024-09-23 23:42:18,315 - browser_control.py:472 - default_logger - DEBUG - 페이지 스크롤 시작...
2024-09-23 23:42:22,444 - browser_control.py:482 - default_logger - DEBUG - 페이지 스크롤 완료.
2024-09-23 23:42:22,449 - browser_control.py:239 - default_logger - DEBUG - 페이지를 아래로 스크롤했습니다.
2024-09-23 23:42:22,453 - browser_control.py:244 - default_logger - DEBUG - 수정할 상품 개수: 20
2024-09-23 23:42:22,453 - gui.py:192 - default_logger - DEBUG - 1/20: 세부사항 수정 작업 중...
2024-09-23 23:42:22,480 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:42:23,031 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:42:24,072 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:42:24,458 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:42:24,482 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 3
2024-09-23 23:42:24,482 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:42:24,508 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:42:24,508 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:42:24,630 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:42:24,650 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:42:38,463 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66e43a3be0c01035ed0be546/62d18e17-0621-43d8-8344-f05bd5a0dd71.jpg
2024-09-23 23:42:38,473 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:42:39,492 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:42:39,492 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:42:40,374 - base64_to_image.py:75 - default_logger - DEBUG - 원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...
2024-09-23 23:42:40,390 - base64_to_image.py:77 - default_logger - DEBUG - 원본 이미지가 클립보드에 저장되었습니다.
2024-09-23 23:42:40,594 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:42:40,618 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:42:54,414 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66e43a3be0c01035ed0be546/300d789a-a43f-4d60-8026-83d76c3a32f1.jpg
2024-09-23 23:42:54,429 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:42:55,431 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:42:55,431 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:42:56,055 - base64_to_image.py:75 - default_logger - DEBUG - 원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...
2024-09-23 23:42:56,055 - base64_to_image.py:77 - default_logger - DEBUG - 원본 이미지가 클립보드에 저장되었습니다.
2024-09-23 23:42:56,269 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:42:56,284 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:43:10,099 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/66e43a3be0c01035ed0be546/51e9c6ce-3a3b-4882-bf26-89596f13483e.jpg
2024-09-23 23:43:10,113 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:43:11,114 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:11,114 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:11,815 - base64_to_image.py:75 - default_logger - DEBUG - 원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...
2024-09-23 23:43:11,821 - base64_to_image.py:77 - default_logger - DEBUG - 원본 이미지가 클립보드에 저장되었습니다.
2024-09-23 23:43:12,025 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:43:12,025 - gui.py:213 - default_logger - DEBUG - 상품 세부사항 저장 중...
2024-09-23 23:43:12,131 - browser_control.py:339 - default_logger - DEBUG - 상품 수정 내용 저장 완료.
2024-09-23 23:43:12,160 - gui.py:216 - default_logger - DEBUG - 상품 수정 완료.
2024-09-23 23:43:12,160 - gui.py:192 - default_logger - DEBUG - 2/20: 세부사항 수정 작업 중...
2024-09-23 23:43:12,502 - browser_control.py:258 - default_logger - DEBUG - 상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.
2024-09-23 23:43:12,951 - browser_control.py:261 - default_logger - DEBUG - 세부사항 수정 다이얼로그 열기 완료.
2024-09-23 23:43:13,812 - browser_control.py:270 - default_logger - DEBUG - 상세페이지 탭 클릭 완료.
2024-09-23 23:43:14,061 - browser_control.py:279 - default_logger - DEBUG - 소스 버튼 클릭 완료.
2024-09-23 23:43:14,083 - browser_control.py:287 - default_logger - DEBUG - 추출된 이미지 URL 수: 33
2024-09-23 23:43:14,083 - browser_control.py:290 - default_logger - DEBUG - img 태그를 삭제 중...
2024-09-23 23:43:14,115 - browser_control.py:301 - default_logger - DEBUG - Updated data-value:
2024-09-23 23:43:14,115 - browser_control.py:304 - default_logger - DEBUG - img 태그 삭제 완료.
2024-09-23 23:43:14,226 - browser_control.py:309 - default_logger - DEBUG - 소스 버튼 재 클릭 완료.
2024-09-23 23:43:14,242 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:43:28,035 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i1/2210213220218/O1CN01g6hvO71DTtHR2Dwwg_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:43:28,048 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:43:29,049 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:29,049 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:29,387 - base64_to_image.py:53 - default_logger - DEBUG - 이미지 다운로드 중 오류 발생: cannot identify image file <_io.BytesIO object at 0x0000029F835504A0>
2024-09-23 23:43:29,388 - base64_to_image.py:79 - default_logger - DEBUG - 원본 이미지 다운로드 실패.
2024-09-23 23:43:29,592 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:43:29,601 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:43:43,417 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i4/2210213220218/O1CN018J25xq1DTtHTtbBlK_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:43:43,429 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:43:44,431 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:44,431 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:44,605 - base64_to_image.py:53 - default_logger - DEBUG - 이미지 다운로드 중 오류 발생: cannot identify image file <_io.BytesIO object at 0x0000029F835502C0>
2024-09-23 23:43:44,608 - base64_to_image.py:79 - default_logger - DEBUG - 원본 이미지 다운로드 실패.
2024-09-23 23:43:44,811 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:43:44,825 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:43:58,638 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i1/2210213220218/O1CN01AYmhzJ1DTtHY6lpDn_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:43:58,650 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:43:59,655 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:59,655 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:43:59,888 - base64_to_image.py:53 - default_logger - DEBUG - 이미지 다운로드 중 오류 발생: cannot identify image file <_io.BytesIO object at 0x0000029F83550360>
2024-09-23 23:43:59,888 - base64_to_image.py:79 - default_logger - DEBUG - 원본 이미지 다운로드 실패.
2024-09-23 23:44:00,097 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:44:00,111 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:44:13,901 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i2/2210213220218/O1CN0175owwm1DTtHT8ohnz_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:44:13,915 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:44:14,916 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:14,916 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:15,135 - base64_to_image.py:53 - default_logger - DEBUG - 이미지 다운로드 중 오류 발생: cannot identify image file <_io.BytesIO object at 0x0000029F835503B0>
2024-09-23 23:44:15,135 - base64_to_image.py:79 - default_logger - DEBUG - 원본 이미지 다운로드 실패.
2024-09-23 23:44:15,341 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:44:15,357 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:44:29,159 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i1/2210213220218/O1CN01xXwaPe1DTtHT8mUZn_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:44:29,173 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:44:30,177 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:30,177 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:30,733 - base64_to_image.py:53 - default_logger - DEBUG - 이미지 다운로드 중 오류 발생: cannot identify image file <_io.BytesIO object at 0x0000029F83550F90>
2024-09-23 23:44:30,733 - base64_to_image.py:79 - default_logger - DEBUG - 원본 이미지 다운로드 실패.
2024-09-23 23:44:30,939 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:44:30,950 - whale_translator.py:74 - default_logger - DEBUG - 가상 데스크톱 2로 전환되었습니다.
2024-09-23 23:44:44,752 - whale_translator.py:117 - default_logger - DEBUG - 번역 완료: https://img.alicdn.com/imgextra/i3/2210213220218/O1CN01GddRXb1DTtHUrEYCO_!!2210213220218.jpg_Q75.jpg
2024-09-23 23:44:44,762 - whale_translator.py:83 - default_logger - DEBUG - 가상 데스크톱 1로 전환되었습니다.
2024-09-23 23:44:45,763 - browser_control.py:368 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:45,763 - browser_control.py:369 - default_logger - DEBUG - 크롬 창으로 포커스 이동.
2024-09-23 23:44:45,763 - base64_to_image.py:83 - default_logger - DEBUG - 클립보드에 Base64 이미지나 'html > whale-ocr' 데이터가 없습니다.
2024-09-23 23:44:45,966 - browser_control.py:331 - default_logger - DEBUG - 이미지 붙여넣기 완료.
2024-09-23 23:44:45,966 - whale_translator.py:77 - default_logger - DEBUG - 가상 데스크톱 전환 중 오류 발생: Desktop number 2 exceeds the number of desktops, 1.
2024-09-23 23:44:45,968 - gui.py:229 - default_logger - DEBUG - 번역 작업 중 오류 발생: (1400, 'SetForegroundWindow', '잘못된 창 핸들입니다.')

121
base64_to_image.py Normal file
View File

@ -0,0 +1,121 @@
import base64
import pyperclip
import win32clipboard
from io import BytesIO
from PIL import Image
import requests
import numpy as np
import cv2
import time
import random
class base64TOImage:
def __init__(self, app, logger, browser_controller):
self.app = app
self.logger = logger
self.browser_controller = browser_controller # BrowserController 인스턴스를 전달받음
def get_clipboard_data(self):
"""클립보드의 텍스트 데이터를 가져옵니다."""
try:
return pyperclip.paste() # 클립보드의 텍스트 데이터를 가져옴
except Exception as e:
self.logger.debug(f"클립보드 데이터를 가져오는 중 오류 발생: {e}")
return None
def set_image_to_clipboard(self, image):
"""이미지를 클립보드에 넣는 함수 (Windows 전용)"""
output = BytesIO()
image.save(output, "BMP")
data = output.getvalue()[14:] # BMP 헤더 제거
output.close()
# 클립보드에 이미지 데이터 넣기
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
def base64_to_image(self, base64_data):
"""Base64 데이터를 이미지로 변환하는 함수"""
if base64_data.startswith('data:image'):
header, encoded = base64_data.split(',', 1)
img_data = base64.b64decode(encoded)
image = Image.open(BytesIO(img_data))
return image
else:
self.logger.debug("유효하지 않은 Base64 이미지 데이터입니다.")
return None
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",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"DNT": "1", # Do Not Track 요청 헤더
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Cache-Control": "max-age=0"
}
retries = 0
while retries < max_retries:
try:
self.logger.debug(f"이미지 URL 다운로드 중: {url}")
response = requests.get(url, headers=headers, stream=True)
# 상태 코드가 200이 아니면 재시도
if response.status_code == 200:
# OpenCV로 이미지를 로드하여 변환
image = np.asarray(bytearray(response.content), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
# OpenCV에서 이미지를 PIL로 변환
if image is not None:
pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
return pil_image
else:
self.logger.debug(f"이미지 파일 형식이 올바르지 않습니다. 대상 URL: {url}")
return None
else:
self.logger.debug(f"이미지 로딩 실패, HTTP 상태 코드: {response.status_code}. 재시도 {retries + 1}/{max_retries}")
retries += 1
time.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)) # 예외 발생 시 대기 후 재시도
self.logger.debug("이미지 다운로드 최대 재시도 횟수를 초과했습니다.")
return None
def process_clipboard(self, original_url):
"""클립보드의 내용을 처리하고, 필요한 경우 이미지 변환 또는 URL 이미지 복사"""
clipboard_data = self.get_clipboard_data()
if clipboard_data.startswith('data:image'):
# 클립보드에 있는 Base64 데이터를 이미지로 변환
image = self.base64_to_image(clipboard_data)
if image:
self.logger.debug("Base64 이미지 변환 성공, 클립보드에 다시 저장 중...")
self.set_image_to_clipboard(image)
self.logger.debug("이미지가 클립보드에 저장되었습니다.")
else:
self.logger.debug("Base64 이미지 변환 실패.")
elif clipboard_data.strip() == "html > whale-ocr":
# 'html > whale-ocr' 감지 시 원본 이미지 URL에서 이미지를 다운로드하여 클립보드에 복사
if original_url:
image = self.download_image_from_url(original_url)
if image:
self.logger.debug("원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...")
self.set_image_to_clipboard(image)
self.logger.debug("원본 이미지가 클립보드에 저장되었습니다.")
else:
self.logger.debug("원본 이미지 다운로드 실패.")
else:
self.logger.debug("원본 이미지 URL을 찾을 수 없습니다.")
else:
self.logger.debug("클립보드에 Base64 이미지나 'html > whale-ocr' 데이터가 없습니다.")

484
browser_control.py Normal file
View File

@ -0,0 +1,484 @@
from playwright.sync_api import sync_playwright
import re
import pyautogui
import time
import win32gui, win32con
from bs4 import BeautifulSoup
class BrowserController:
def __init__(self, app, logger):
self.app = app
self.logger = logger
self.chrome_window_name = "퍼센티 - 셀러들을 위한 AI 구매대행 솔루션 - Chrome"
self.whale_window_name = "새 탭 - Whale"
self.chrome_hwnd = None
self.whale_hwnd = None
self.playwright = None
self.browser = None
self.page = None
def get_page(self):
return self.page
def start_browser(self):
"""크롬 브라우저 실행 및 페이지 로딩"""
self.logger.debug('크롬 브라우저 실행 중...')
# Playwright를 수동으로 실행하여 브라우저 유지
self.playwright = sync_playwright().start()
self.browser = self.playwright.chromium.launch(headless=False) # 브라우저 비헤드리스 모드 실행
# 창 크기 설정 (1920x1080)
context = self.browser.new_context(
viewport={"width": 1920, "height": 1080}
)
# 페이지 열기
self.page = context.new_page()
# self.page.goto('https://percenty.co.kr/') # 원하는 페이지로 이동
self.page.goto('https://percenty.co.kr/signin') # 원하는 페이지로 이동
self.logger.debug('newPage 로딩 ...')
# 사용자는 이 시점에 로그인 및 상세페이지 편집 모드로 들어감
# 페이지 제목을 가져와서 창 제목으로 활용
page_title = self.page.title()
self.logger.debug(f'페이지 제목: {page_title}')
# 창 핸들 찾기 (동적으로 얻은 페이지 제목 사용)
self.chrome_hwnd = self.find_window_by_title(page_title)
if not self.chrome_hwnd:
self.logger.debug('크롬 창을 찾을 수 없습니다.')
else:
self.logger.debug(f'크롬 창 핸들: {self.chrome_hwnd}')
self.page.wait_for_load_state('networkidle')
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("로그인 하기")') # 관리자 로그인 버튼 클릭
else:
# 관리자 토글 버튼을 클릭해서 직원 로그인 화면 활성화
admin_toggle = self.page.locator('button[role="switch"]')
if admin_toggle.get_attribute("aria-checked") == "true":
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("직원 로그인 하기")') # 직원 로그인 버튼 클릭
self.logger.debug(f'로그인 완료: {"관리자" if is_admin else "직원"} 계정')
self.page.wait_for_load_state('networkidle')
self.close_ad_if_exists()
def close_browser(self):
"""브라우저 종료"""
if self.browser:
self.browser.close()
self.playwright.stop()
self.logger.debug('브라우저 종료됨.')
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 switch_to_chrome(self):
"""크롬으로 포커스 전환"""
if self.chrome_hwnd:
win32gui.ShowWindow(self.chrome_hwnd, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(self.chrome_hwnd)
self.logger.debug('크롬 창으로 포커스 이동.')
else:
self.logger.debug('크롬 창을 찾을 수 없습니다.')
def switch_to_whale(self):
"""웨일 브라우저로 포커스 전환"""
if not self.whale_hwnd:
self.whale_hwnd = self.find_window_by_title(self.whale_window_name)
if self.whale_hwnd:
win32gui.ShowWindow(self.whale_hwnd, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(self.whale_hwnd)
self.logger.debug('웨일 창으로 포커스 이동.')
else:
self.logger.debug('웨일 창을 찾을 수 없습니다.')
def extract_image_urls(self):
"""HTML에서 이미지 URL 추출 및 img 태그 삭제 후 소스 버튼 다시 클릭"""
self.logger.debug('이미지 URL을 추출 중...')
# 소스 버튼 클릭
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")
if data_value:
self.logger.debug('data-value 속성에서 HTML 수집 완료.')
# 이미지 URL 추출
image_urls = self.fetch_image_urls(data_value)
self.logger.debug(f'추출된 이미지 URL 수: {len(image_urls)}')
# 추출된 URL 반환
self.logger.debug('img 태그를 삭제 중...')
self.page.wait_for_load_state('domcontentloaded') # 페이지 로딩 완료 대기
# data-value 속성을 가진 요소 선택
data_value_element = 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}")')
# 데이터가 제대로 변경되었는지 확인
updated_value = data_value_element.get_attribute('data-value')
self.logger(f'Updated data-value: {updated_value}')
else:
self.logger('Element with data-value not found.')
self.logger.debug('img 태그 삭제 완료.')
# 소스 버튼 다시 클릭
self.page.click("button[data-cke-tooltip-text='소스']")
self.logger.debug('소스 버튼 재 클릭 완료.')
return image_urls
else:
self.logger.debug('data-value 속성에 데이터가 없습니다.')
return []
def fetch_image_urls(self, html_content):
"""
HTML 콘텐츠에서 모든 <img> 태그의 URL을 순서대로 추출
"""
soup = BeautifulSoup(html_content, 'html.parser')
image_urls = []
# class="image_resized"를 가진 모든 <img> 태그 찾기
images_resized = soup.find_all('img', class_='image_resized')
for img in images_resized:
if img and 'src' in img.attrs and img['src'] not in image_urls:
image_urls.append(img['src'])
# <figure class="image"> 내부의 모든 <img> 태그 찾기
figures = soup.find_all('figure', class_='image')
for figure in figures:
img_tag = figure.find('img')
if img_tag and 'src' in img_tag.attrs and img_tag['src'] not in image_urls:
image_urls.append(img_tag['src'])
return image_urls
def close_ad_if_exists(self):
"""광고 다이얼로그가 있으면 닫기 버튼을 클릭하는 메서드"""
try:
# 광고 다이얼로그가 나타날 때까지 기다림
dialog_selector = "div.ant-modal-wrap.ant-modal-centered"
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)
self.logger.debug("다이얼로그가 발견되었습니다. 닫기 버튼을 클릭합니다.")
# 닫기 버튼 클릭
close_button = self.page.query_selector(close_button_selector)
if close_button:
close_button.click()
self.logger.debug("다이얼로그를 성공적으로 닫았습니다.")
else:
self.logger.debug("닫기 버튼을 찾지 못했습니다.")
except Exception as e:
# 다이얼로그가 없거나 다른 문제가 발생한 경우
self.logger.debug(f"다이얼로그가 발견되지 않았거나 오류 발생: {e}")
def go_to_new_product_page(self):
"""신규 상품 등록 페이지로 이동"""
try:
self.page.click('span.ant-menu-title-content:has-text("신규 상품 등록")')
self.logger.debug("신규 상품 등록 페이지로 이동 완료.")
except Exception as e:
self.logger.debug(f"신규 상품 등록 페이지 이동 중 오류: {str(e)}")
def get_product_edit_buttons(self):
"""현재 페이지의 세부사항 수정 및 업로드 버튼을 찾기"""
try:
# 페이지 로딩을 기다림
self.page.wait_for_load_state('networkidle') # 네트워크 요청이 모두 끝날 때까지 대기
# 페이지 끝까지 스크롤하여 모든 동적 요소 로드
self.scroll_page_to_bottom()
# 스크롤하여 모든 버튼을 화면에 표시 (가장 하단까지 스크롤)
self.page.evaluate("""window.scrollTo(0, document.body.scrollHeight);""")
self.logger.debug("페이지를 아래로 스크롤했습니다.")
# 버튼 선택 (확실한 선택자를 사용하여 확인)
buttons = self.page.locator('button:has-text("세부사항 수정 및 업로드")')
count = buttons.count()
self.logger.debug(f"수정할 상품 개수: {count}")
# 모든 버튼을 리스트로 반환
return [buttons.nth(i) for i in range(count)]
except Exception as e:
self.logger.debug(f"상품 수정 버튼을 찾는 중 오류: {str(e)}")
return []
def open_product_edit_dialog(self, button):
"""상품 수정 다이얼로그 열기"""
try:
# 요소가 화면에 없을 경우 스크롤하여 보이도록 함
button.scroll_into_view_if_needed()
self.logger.debug("상품의 '세부사항 수정 및 업로드' 버튼을 화면에 보이도록 스크롤.")
button.click()
self.logger.debug("세부사항 수정 다이얼로그 열기 완료.")
self.page.wait_for_selector('div.ant-tabs-nav') # 다이얼로그가 완전히 로딩될 때까지 기다림
except Exception as e:
self.logger.debug(f"세부사항 수정 다이얼로그 열기 중 오류: {str(e)}")
def click_detail_tab(self):
"""상세페이지 탭 클릭"""
try:
self.page.click('div.ant-tabs-tab:has-text("상세페이지")')
self.logger.debug("상세페이지 탭 클릭 완료.")
except Exception as e:
self.logger.debug(f"상세페이지 탭 클릭 중 오류: {str(e)}")
def extract_image_urls(self):
"""상세페이지에서 이미지 URL 추출"""
try:
# 소스 편집 모드로 전환
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")
# HTML 소스에서 이미지 URL 추출
image_urls = 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') # 페이지 로딩 완료 대기
# data-value 속성을 가진 요소 선택
data_value_element = 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}")')
# 데이터가 제대로 변경되었는지 확인
updated_value = 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.')
self.logger.debug('img 태그 삭제 완료.')
# img 태그의 class 삭제 후 다시 소스 버튼 클릭
self.page.click('button[data-cke-tooltip-text="소스"]')
self.logger.debug('소스 버튼 재 클릭 완료.')
return image_urls
except Exception as e:
self.logger.debug(f"이미지 URL 추출 중 오류: {str(e)}")
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"이미지 번역 중 오류: {str(e)}")
def paste_image_in_chrome(self, base64toimage, url):
"""크롬으로 포커스를 옮기고 클립보드의 이미지를 붙여넣고 엔터 입력"""
try:
self.switch_to_chrome() # 크롬으로 포커스 이동
base64toimage.process_clipboard(url) # 클립보드 내용이 base64일 경우 이미지로 변환
pyautogui.hotkey('ctrl', 'v') # 클립보드 이미지 붙여넣기
pyautogui.press('enter') # 엔터 키 입력
self.logger.debug("이미지 붙여넣기 완료.")
except Exception as e:
self.logger.debug(f"이미지 붙여넣기 중 오류: {str(e)}")
def save_product_edit(self):
"""상품 수정 후 저장 버튼 클릭"""
try:
self.page.click('button:has-text("저장하기")')
self.logger.debug("상품 수정 내용 저장 완료.")
self.page.keyboard.press("Escape") # ESC로 다이얼로그 닫기
except Exception as e:
self.logger.debug(f"저장 버튼 클릭 중 오류: {str(e)}")
def go_to_next_page(self):
"""다음 페이지로 이동"""
try:
next_button = self.page.query_selector('li.ant-pagination-item-next')
if next_button:
next_button.click()
self.page.wait_for_load_state('domcontentloaded')
self.logger.debug("다음 페이지로 이동 완료.")
return True
else:
self.logger.debug("다음 페이지가 없습니다.")
return False
except Exception as e:
self.logger.debug(f"다음 페이지로 이동 중 오류: {str(e)}")
return False
def switch_to_chrome(self):
"""크롬으로 포커스 전환"""
try:
if not self.chrome_hwnd:
self.chrome_hwnd = self.find_window_by_title(self.chrome_window_name)
if self.chrome_hwnd:
win32gui.ShowWindow(self.chrome_hwnd, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(self.chrome_hwnd)
self.logger.debug('크롬 창으로 포커스 이동.')
self.logger.debug('크롬 창으로 포커스 이동.')
else:
self.logger.debug('크롬 창을 찾을 수 없습니다.')
self.logger.debug('크롬 창을 찾을 수 없습니다.')
except Exception as e:
self.logger.debug(f"크롬 포커스 전환 중 오류: {str(e)}")
def scroll_with_wheel(self, direction="down", pause_time=0.5, max_scrolls=20):
"""
스크롤을 사용하여 페이지를 위나 아래로 천천히 스크롤.
Parameters:
- direction: 스크롤 방향 ("down" 아래로, "up" 위로).
- pause_time: 스크롤 사이의 대기 시간 ().
- max_scrolls: 최대 스크롤 횟수.
"""
scroll_count = 0
last_height = self.page.evaluate("document.body.scrollHeight")
while scroll_count < max_scrolls:
if direction == "down":
# 아래로 스크롤
self.page.mouse.wheel(0, 1000)
elif direction == "up":
# 위로 스크롤
self.page.mouse.wheel(0, -1000)
else:
raise ValueError("direction 인자는 'down' 또는 'up'만 허용됩니다.")
time.sleep(pause_time)
# 스크롤 후 높이 확인
new_height = self.page.evaluate("document.body.scrollHeight")
# 아래로 스크롤 시, 페이지의 끝에 도달한 경우 종료
if direction == "down" and new_height == last_height:
break
elif direction == "up" and new_height == 0:
break # 위로 스크롤 시, 페이지의 시작에 도달하면 종료
last_height = new_height
scroll_count += 1
def collect_product_info(self):
"""
상품 정보를 수집하는 메서드
"""
try:
# 페이지를 아래로 스크롤하여 모든 상품 로드
self.scroll_with_wheel('down')
self.scroll_with_wheel('up')
product_infos = []
for i in range(1, 51): # 1부터 최대 50까지 상품 처리
try:
# 각 상품의 CSS 선택자를 동적으로 생성하여 접근
product_name_selector = f"div#root div:nth-child({i}) > div > li > div > div > div:nth-child(2) > div > div > div.ant-col.css-1li46mu > div.sc-dPZUQH.mXDuy > span.sc-dSIIpw.Nrwqu.Body3Regular14.CharacterPrimary85"
product_price_selector = f"div#root div:nth-child({i}) > div > li > div > div > div:nth-child(2) > div > div > div.ant-col.css-1li46mu > div:nth-child(3) > div:nth-child(1) > span.sc-dSIIpw.Nrwqu.Body3Regular14.CharacterPrimary85"
product_image_selector = f"div#root div:nth-child({i}) > div > li > div > div > div:nth-child(1) > div > div:nth-child(2) > div > div > img"
product_name_element = self.page.locator(product_name_selector)
product_price_element = self.page.locator(product_price_selector)
product_image_element = self.page.locator(product_image_selector)
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')
}
self.logger.debug(f"상품 {i}: {product_info}")
product_infos.append(product_info)
except Exception as e:
self.logger.error(f"상품 {i} 정보 수집 중 오류 발생: {str(e)}")
continue
return product_infos
except Exception as e:
self.logger.error(f"상품 정보 수집 중 오류 발생: {str(e)}")
return []
def click_modify_button_by_text(self, index):
"""인덱스에 해당하는 '세부사항 수정 및 업로드' 버튼 클릭"""
try:
button_selector = f'(//button[span[text()="세부사항 수정 및 업로드"]])[{index}]'
# 버튼이 화면에 보이도록 스크롤 후 클릭
button = self.page.query_selector(button_selector)
if button:
button.scroll_into_view_if_needed()
self.page.evaluate('arguments[0].click();', button)
self.logger.debug(f'{index}번째 상품의 수정 버튼 클릭 완료')
else:
self.logger.debug(f'{index}번째 상품의 수정 버튼을 찾지 못했습니다.')
except Exception as e:
self.logger.debug(f'{index}번째 상품의 수정 버튼 클릭 중 오류: {str(e)}')
def scroll_page_to_bottom(self, pause_time=1):
"""페이지의 맨 아래까지 스크롤하여 모든 동적 요소를 로드"""
self.logger.debug('페이지 스크롤 시작...')
previous_height = 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")
if current_height == previous_height:
break # 더 이상 스크롤할 내용이 없으면 종료
previous_height = current_height
self.logger.debug('페이지 스크롤 완료.')

265
gui.py Normal file
View File

@ -0,0 +1,265 @@
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QTextEdit, QLabel, QLineEdit, QHBoxLayout
from PyQt5.QtCore import Qt, QRect, QSettings
from toggleSwitch import ToggleSwitch
from browser_control import BrowserController
from whale_translator import WhaleTranslator
from base64_to_image import base64TOImage
class TranslationApp(QWidget):
def __init__(self, logger=None):
super().__init__()
self.initUI()
self.logger = logger
self.settings = QSettings("WhenRideMycar", "TranslationApp") # QSettings 초기화
self.browser_controller = BrowserController(self, self.logger)
self.whale_translator = WhaleTranslator(self, self.logger, debug_mode=True) # 디버그 모드 켜기
self.base64TOImage = base64TOImage(self, logger, self.browser_controller)
self.running = False
# 이전에 저장된 설정 불러오기
self.load_settings()
def initUI(self):
self.setWindowFlags(Qt.WindowStaysOnTopHint)
self.setGeometry(QRect(1740, 500, 180, 400))
self.setWindowTitle('이미지 번역 도구')
# 로그
self.log = QTextEdit(self)
self.log.setReadOnly(True)
# 관리자 토글
self.admin_toggle = ToggleSwitch(self)
self.admin_toggle.clicked.connect(self.on_toggle_clicked)
# 관리자 ID 및 PW
self.admin_id_label = QLabel("관리자 ID:", self)
self.admin_id_input = QLineEdit(self)
self.admin_pw_label = QLabel("관리자 PW:", self)
self.admin_pw_input = QLineEdit(self)
self.admin_pw_input.setEchoMode(QLineEdit.Password)
# 직원 ID 및 PW
self.user_id_label = QLabel("직원 ID:", self)
self.user_id_input = QLineEdit(self)
self.user_pw_label = QLabel("직원 PW:", self)
self.user_pw_input = QLineEdit(self)
self.user_pw_input.setEchoMode(QLineEdit.Password)
# 크롬 실행 버튼 및 번역 버튼
self.start_chrome_button = QPushButton('크롬 실행', self)
self.translate_button = QPushButton('번역 시작', self)
self.pause_button = QPushButton('일시정지', self)
self.exit_button = QPushButton('종료', self)
# 레이아웃 설정
layout = QVBoxLayout()
# 관리자 토글 버튼 및 로그인 관련 필드 추가
toggle_layout = QHBoxLayout()
toggle_layout.addWidget(QLabel("관리자 여부:", self))
toggle_layout.addWidget(self.admin_toggle)
layout.addLayout(toggle_layout)
# 관리자 ID/PW
layout.addWidget(self.admin_id_label)
layout.addWidget(self.admin_id_input)
layout.addWidget(self.admin_pw_label)
layout.addWidget(self.admin_pw_input)
# 직원 ID/PW
layout.addWidget(self.user_id_label)
layout.addWidget(self.user_id_input)
layout.addWidget(self.user_pw_label)
layout.addWidget(self.user_pw_input)
# 크롬 및 번역 관련 버튼
layout.addWidget(self.start_chrome_button)
layout.addWidget(self.translate_button)
layout.addWidget(self.pause_button)
layout.addWidget(self.exit_button)
self.setLayout(layout)
layout.addWidget(self.log)
# 기본 상태 설정
self.on_toggle_clicked(False)
# 버튼 이벤트 연결
self.start_chrome_button.clicked.connect(self.start_browser)
self.translate_button.clicked.connect(self.start_translation)
self.pause_button.clicked.connect(self.pause_translation)
self.exit_button.clicked.connect(self.close)
def on_toggle_clicked(self, is_checked):
"""관리자 토글 상태에 따라 필드 활성화/비활성화"""
if is_checked:
# 관리자 모드
# self.admin_id_label.setVisible(True)
# self.admin_id_input.setVisible(True)
self.admin_pw_label.setVisible(True)
self.admin_pw_input.setVisible(True)
self.user_id_label.setVisible(False)
self.user_id_input.setVisible(False)
self.user_pw_label.setVisible(False)
self.user_pw_input.setVisible(False)
else:
# 직원 모드
# self.admin_id_label.setVisible(False)
# self.admin_id_input.setVisible(False)
self.admin_pw_label.setVisible(False)
self.admin_pw_input.setVisible(False)
self.user_id_label.setVisible(True)
self.user_id_input.setVisible(True)
self.user_pw_label.setVisible(True)
self.user_pw_input.setVisible(True)
def start_browser(self):
"""크롬 브라우저 실행 후 로그인"""
self.logger.debug('크롬 브라우저를 실행합니다...')
self.browser_controller.start_browser()
# 관리자 토글 상태에 따라 로그인
if self.admin_toggle.isChecked():
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=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)
# 로그인 정보 저장
self.save_settings()
def save_settings(self):
"""QSettings에 사용자 정보 저장"""
self.settings.setValue("admin/id", self.admin_id_input.text())
self.settings.setValue("admin/pw", self.admin_pw_input.text())
self.settings.setValue("user/id", self.user_id_input.text())
self.settings.setValue("user/pw", self.user_pw_input.text())
self.settings.setValue("admin/toggle", self.admin_toggle.isChecked())
def load_settings(self):
"""QSettings에서 사용자 정보 불러오기"""
self.admin_id_input.setText(self.settings.value("admin/id", ""))
self.admin_pw_input.setText(self.settings.value("admin/pw", ""))
self.user_id_input.setText(self.settings.value("user/id", ""))
self.user_pw_input.setText(self.settings.value("user/pw", ""))
admin_toggle_state = self.settings.value("admin/toggle", "false") == "true"
self.admin_toggle.setChecked(admin_toggle_state)
self.on_toggle_clicked(admin_toggle_state)
def start_translation(self):
self.logger.debug('번역 작업을 시작합니다...')
self.running = True # 번역 작업이 시작됨
try:
# # 1. 광고 다이얼로그가 나타날 경우 닫기 처리
# self.logger.debug('광고 다이얼로그 닫기 처리 중...')
# self.browser_controller.close_ad_dialog_if_present()
# 2. "신규 상품 등록" 페이지로 이동
self.logger.debug('신규 상품 등록 페이지로 이동 중...')
self.browser_controller.go_to_new_product_page()
# # Playwright에서 페이지 스크롤 후 "세부사항 수정 및 업로드" 버튼 수집
# self.browser_controller.scroll_page_to_bottom()
# 3. 각 상품에 대해 "세부사항 수정 및 업로드" 작업을 수행
page_number = 1
while self.running:
self.logger.debug(f'현재 페이지: {page_number}')
# 4. 현재 페이지의 모든 "세부사항 수정 및 업로드" 버튼 찾기
product_buttons = self.browser_controller.get_product_edit_buttons()
if not product_buttons:
self.logger.debug('수정할 상품이 없습니다. 번역 작업을 종료합니다.')
break
# 5. 각 상품에 대해 번역 작업 수행
for index, button in enumerate(product_buttons, start=1):
if not self.running:
self.logger.debug('번역 작업이 중단되었습니다.')
break
self.logger.debug(f'{index}/{len(product_buttons)}: 세부사항 수정 작업 중...')
# 상품 수정 다이얼로그 열기
self.browser_controller.open_product_edit_dialog(button)
# 상세페이지 탭 클릭
self.browser_controller.click_detail_tab()
# 이미지 URL 추출
image_urls = self.browser_controller.extract_image_urls()
# 이미지 번역 작업 진행
for url in image_urls:
if not self.running:
self.logger.debug('번역 작업이 중단되었습니다.')
break
self.whale_translator.translate_image(url)
self.browser_controller.paste_image_in_chrome(self.base64TOImage, url)
# 수정 후 저장
self.logger.debug('상품 세부사항 저장 중...')
self.browser_controller.save_product_edit()
self.logger.debug('상품 수정 완료.')
# 6. 다음 페이지로 이동 (있으면)
if not self.browser_controller.go_to_next_page():
self.logger.debug('더 이상 페이지가 없습니다. 작업을 종료합니다.')
break
page_number += 1
if self.running:
self.logger.debug('모든 상품 번역 및 저장 완료.')
self.running = False # 작업 종료 후 상태를 False로 전환
except Exception as e:
self.logger.debug(f'번역 작업 중 오류 발생: {str(e)}')
self.running = False
def start_translation_by_one(self):
self.logger.debug('번역 작업을 시작합니다...')
self.running = True # 번역 작업이 시작됨
# Playwright에서 이미지 URL 추출
image_urls = self.browser_controller.extract_image_urls()
# 추출된 URL을 WhaleTranslator에 전달하여 번역 진행
for url in image_urls:
if not self.running: # 작업이 중단되었는지 확인
self.logger.debug('번역 작업이 중단되었습니다.')
break
self.whale_translator.translate_image(url)
# 번역 후 크롬으로 포커스를 옮기고 이미지를 붙여넣기
self.browser_controller.paste_image_in_chrome(self.base64TOImage)
page = BrowserController.get_page()
page.click('button:has-text("저장하기")') # 모든 이미지 번역 완료 후 저장하기 클릭
if self.running:
self.logger.debug('모든 이미지 번역 및 붙여넣기 완료.')
self.running = False # 작업 종료 후 상태를 False로 전환
def pause_translation(self):
self.logger.debug('번역 작업을 중단합니다...')
self.running = False # 번역 작업 중단
def close(self):
self.logger.debug('프로그램을 종료합니다...')
self.save_settings()
self.browser_controller.close_browser() # 브라우저 종료
self.whale_translator.close_all_virtual_desktops()
super().close()

56
logger_module.py Normal file
View File

@ -0,0 +1,56 @@
import logging
import os
from logging.handlers import RotatingFileHandler
from PyQt5.QtCore import pyqtSignal, QObject
def setup_logger(name, log_file, level=logging.DEBUG, max_bytes=10*1024*1024, backup_count=5):
"""로거 설정을 위한 함수"""
formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)d - %(name)s - %(levelname)s - %(message)s')
# RotatingFileHandler를 사용하여 로그 파일 설정
handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=backup_count, encoding='utf-8')
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.addHandler(handler)
# 콘솔 로그 출력을 위한 핸들러가 이미 추가되었는지 확인
if not any(isinstance(h, logging.StreamHandler) for h in logger.handlers):
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(level)
logger.addHandler(console_handler)
return logger
class QTextEditLogger(logging.Handler, QObject):
appendHtml = pyqtSignal(str) # HTML 메시지를 전달할 시그널 정의
scrollToBottom = pyqtSignal() # 스크롤을 최하단으로 이동시키는 시그널
def __init__(self):
logging.Handler.__init__(self)
QObject.__init__(self)
def emit(self, record):
msg = self.format(record) # 로그 레코드를 문자열로 포매팅
color = {
logging.DEBUG: "black",
logging.INFO: "grey",
logging.WARNING: "orange",
logging.ERROR: "red",
logging.CRITICAL: "purple",
}.get(record.levelno, "black")
# HTML 스타일을 적용한 메시지 생성
message = f"<span style=\"color:{color};\">{msg}</span><br/>"
self.appendHtml.emit(message) # HTML 메시지로 변경
self.scrollToBottom.emit() # 스크롤 시그널 발생
def close(self):
self.flush()
logging.Handler.close(self)
def flush(self):
pass # 필요 시 정리 작업 수행

16
main.py Normal file
View File

@ -0,0 +1,16 @@
from PyQt5.QtWidgets import QApplication
from gui import TranslationApp
from logger_module import setup_logger
def main():
# 로깅 설정
logger = setup_logger('default_logger', f'appTranslator.log')
# PyQt5 앱 실행
app = QApplication([])
window = TranslationApp(logger) # 로거를 TranslationApp에 전달
window.show()
app.exec_()
if __name__ == '__main__':
main()

BIN
requirements.txt Normal file

Binary file not shown.

84
toggleSwitch.py Normal file
View File

@ -0,0 +1,84 @@
from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, pyqtProperty, pyqtSignal, QPoint
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget
class ToggleSwitch(QWidget):
clicked = pyqtSignal(bool)
def __init__(self, parent=None):
super(ToggleSwitch, self).__init__(parent)
self.setFixedSize(60, 30)
self._checked = False
self._circle_color_checked = QColor('red')
self._circle_color_unchecked = QColor('gray')
self._background_color = QColor('white')
self._circle_pos = QPoint(0, 0) # Circle's initial position.
self.animation = QPropertyAnimation(self, b"circle_pos")
self.animation.setDuration(250)
self._init_position()
@pyqtProperty(QPoint)
def circle_pos(self):
return self._circle_pos
@circle_pos.setter
def circle_pos(self, pos):
self._circle_pos = pos
self.update()
def _init_position(self):
if self._checked:
self._circle_pos.setX(30)
else:
self._circle_pos.setX(0)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self._checked = not self._checked
self.clicked.emit(self._checked)
self._update_animation()
self.update()
super(ToggleSwitch, self).mousePressEvent(event)
def _update_animation(self):
if self._checked:
self.animation.setStartValue(QPoint(0, 0))
self.animation.setEndValue(QPoint(30, 0))
else:
self.animation.setStartValue(QPoint(30, 0))
self.animation.setEndValue(QPoint(0, 0))
self.animation.start()
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(Qt.NoPen)
painter.setBrush(self._background_color)
painter.drawRoundedRect(QRect(0, 0, 60, 30), 15, 15)
circle_color = self._circle_color_checked if self._checked else self._circle_color_unchecked
painter.setBrush(circle_color)
painter.drawEllipse(self._circle_pos.x(), self._circle_pos.y(), 30, 30)
def setChecked(self, checked):
if self._checked != checked:
self._checked = checked
self._update_animation()
self.update()
def isChecked(self):
return self._checked
def setState(self, state):
"""ToggleSwitch의 상태를 설정합니다.
Args:
state (bool): True로 설정하면 스위치를 체크 상태로, False로 설정하면 언체크 상태로 변경합니다.
"""
if self._checked != state:
self._checked = state
self._update_animation()
self.clicked.emit(self._checked)
self.update()

20
translator.py Normal file
View File

@ -0,0 +1,20 @@
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)} 이미지 번역 중...')
# 번역 로직

172
whale_translator.py Normal file
View File

@ -0,0 +1,172 @@
import pyautogui
import pyperclip
import time
import win32gui, win32con
from pyvda import VirtualDesktop, get_virtual_desktops
import subprocess
class WhaleTranslator:
def __init__(self, app, logger, debug_mode=False):
self.app = app
self.logger = logger
self.debug_mode = debug_mode
self.newtab = "about:newtab"
self.whale_window_name = "새 탭 - Whale"
self.whale_hwnd = None
self.ensure_virtual_desktop_2_exists()
self.start_whale_browser()
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'])
# subprocess.Popen(["C:\\Program Files\\Naver\\Naver Whale\\Application\\whale.exe", '--incognito']) # 경로 확인 필요
# 창 크기 조정
time.sleep(2) # 창이 뜰 때까지 대기
hwnd = win32gui.FindWindow(None, self.whale_window_name) # Whale 브라우저 창 이름
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_NORMAL)
win32gui.SetWindowPos(hwnd, None, 0, 0, 1920, 1080, win32con.SWP_NOZORDER)
else:
self.logger.debug("Whale 창을 찾을 수 없습니다.")
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가 존재하는지 확인하고, 없으면 생성"""
try:
# 현재 활성화된 가상 데스크톱 수 확인
desktops = get_virtual_desktops()
number_of_desktops = len(desktops)
# 가상 데스크톱 2가 존재하지 않으면 생성
if number_of_desktops < 2:
pyautogui.hotkey('win', 'ctrl', 'd') # 새 가상데스크탑 생성
self.logger.debug("가상 데스크톱 2가 생성되었습니다.")
time.sleep(1)
else:
self.switch_to_virtual_desktop_2()
self.close_whale_window_if_exists()
self.logger.debug("가상 데스크톱 2가 이미 존재합니다.")
except Exception as e:
self.logger.debug(f"가상 데스크톱 확인/생성 중 오류 발생: {e}")
def switch_to_virtual_desktop_2(self):
"""가상 데스크톱 2로 전환"""
try:
VirtualDesktop(2).go()
self.logger.debug("가상 데스크톱 2로 전환되었습니다.")
time.sleep(1)
except Exception as e:
self.logger.debug(f"가상 데스크톱 전환 중 오류 발생: {e}")
def return_to_virtual_desktop_1(self):
"""가상 데스크톱 1로 복귀"""
try:
VirtualDesktop(1).go()
self.logger.debug("가상 데스크톱 1로 전환되었습니다.")
time.sleep(1)
except Exception as e:
self.logger.debug(f"가상 데스크톱 전환 중 오류 발생: {e}")
def translate_image(self, url):
# 가상 데스크톱 2에서 웨일 작업 수행
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.hotkey('ctrl', 'l') # 웨일 브라우저의 주소창으로 이동
self.enter_url(url)
pyautogui.rightClick()
time.sleep(0.2) # 컨텍스트 메뉴 대기
pyautogui.press('c') # 번역된 이미지 클립보드에 복사
time.sleep(1) # 이미지 로딩 대기
pyautogui.rightClick()
time.sleep(0.2) # 컨텍스트 메뉴 대기
pyautogui.press('r') # 번역 클릭
time.sleep(5) # 번역 완료 대기
pyautogui.rightClick()
time.sleep(0.2) # 컨텍스트 메뉴 대기
pyautogui.press('c') # 번역된 이미지 클립보드에 복사
pyautogui.hotkey('ctrl', 'l') # 새 탭으로 이동
pyautogui.typewrite(self.newtab) # URL을 입력
self.enter_url(self.newtab)
self.logger.debug(f'번역 완료: {url}')
self.return_to_virtual_desktop_1()
else:
self.logger.debug('웨일 창을 찾을 수 없습니다.')
def enter_url(self, url):
"""입력기를 영어로 전환한 후 pyautogui로 URL 입력"""
# 입력기를 영어로 전환 (한영 전환키 사용)
pyautogui.hotkey('alt', 'shift') # 혹은 'ctrl', 'shift'를 사용할 수도 있음
time.sleep(0.5) # 입력 모드 전환 후 잠시 대기
# 주소창으로 이동 후 URL 입력
pyautogui.hotkey('ctrl', 'l') # 주소창으로 이동
time.sleep(0.5)
pyautogui.typewrite(url) # URL 입력
pyautogui.press('enter') # Enter 키 입력
time.sleep(1) # 페이지 로딩 대기
def close_whale_window_if_exists(self):
"""'새 탭 - Whale' 창이 존재하면 종료"""
whale_window_name = "새 탭 - Whale"
whale_hwnd = self.find_window_by_title(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}' 창을 종료했습니다.")
else:
self.logger.debug(f"'{whale_window_name}' 창을 찾지 못했습니다.")
def close_all_virtual_desktops(self):
"""모든 가상 데스크톱을 종료"""
try:
desktops = get_virtual_desktops()
number_of_desktops = len(desktops)
# 가상 데스크톱이 1개 이상일 때만 종료
while number_of_desktops > 1:
self.close_whale_window_if_exists() # 웨일 브라우저 창이 있으면 종료
pyautogui.hotkey('win', 'ctrl', 'f4') # 현재 가상 데스크톱 닫기
time.sleep(1) # 각 데스크톱 닫기 사이에 짧은 대기시간 추가
desktops = get_virtual_desktops()
number_of_desktops = len(desktops)
self.logger.debug(f"남은 가상 데스크톱 수: {number_of_desktops}")
self.logger.debug("모든 가상 데스크톱이 종료되었습니다.")
except Exception as e:
self.logger.debug(f"가상 데스크톱 종료 중 오류 발생: {e}")

15
win.py Normal file
View File

@ -0,0 +1,15 @@
import win32gui
def enum_window_titles():
def callback(hwnd, results):
title = win32gui.GetWindowText(hwnd)
if title: # 제목이 있는 창만 결과에 추가
results.append(title)
titles = []
win32gui.EnumWindows(callback, titles)
return titles
# 모든 창의 제목 출력
window_titles = enum_window_titles()
for title in window_titles:
print(title)