first commit
This commit is contained in:
commit
569c382825
|
|
@ -0,0 +1,4 @@
|
||||||
|
Inclode/
|
||||||
|
Lib/
|
||||||
|
Scripts/
|
||||||
|
pyvenv.cfg
|
||||||
|
|
@ -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.
|
|
@ -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', '잘못된 창 핸들입니다.')
|
||||||
|
|
@ -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' 데이터가 없습니다.")
|
||||||
|
|
@ -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('페이지 스크롤 완료.')
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -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 # 필요 시 정리 작업 수행
|
||||||
|
|
@ -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()
|
||||||
Binary file not shown.
|
|
@ -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()
|
||||||
|
|
@ -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)} 이미지 번역 중...')
|
||||||
|
# 번역 로직
|
||||||
|
|
@ -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}")
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue