pywin_test/tet1.py

117 lines
4.4 KiB
Python

import time
import os
from pywinauto import Application, clipboard, findwindows
def start_whale_with_devtools():
# 실행 경로 설정
whale_exe_path = os.path.join(os.getcwd(), "browsers", "whale", "whale.exe")
user_data_dir = os.path.join(os.getcwd(), "browsers", "whale", "user_data")
cache_dir = os.path.join(os.getcwd(), "browsers", "whale", "cache")
# # 유저 데이터 및 캐시 폴더 비우기
# clear_directory(user_data_dir)
# clear_directory(cache_dir)
# 웨일을 시크릿 모드로 시작
app = Application(backend="uia").start(
f'"{whale_exe_path}" --incognito --auto-open-devtools-for-tabs --user-data-dir="{user_data_dir}" --disk-cache-dir="{cache_dir}"'
)
time.sleep(1) # 웨일이 완전히 로드될 때까지 대기
return app
def find_whale_window(app):
# '새 시크릿 탭 - Whale' 창을 찾기 위해 PID 검색
whale_pid = None
windows = findwindows.find_elements()
for window in windows:
if window.name == '새 시크릿 탭 - Whale':
whale_pid = window.process_id
break
# PID가 있으면 해당 창을 연결
if whale_pid:
app = Application(backend="uia").connect(process=whale_pid)
whale_window = app.top_window()
whale_window.set_focus()
return whale_window
else:
print("'새 시크릿 탭 - Whale' 창을 찾을 수 없습니다.")
return None
def navigate_to_url(whale_window, url):
# 주소창에 URL 입력 후 이동
try:
address_bar = whale_window.child_window(title="주소창 및 검색창", control_type="Edit")
address_bar.click_input()
address_bar.type_keys(f"{url}{{ENTER}}", with_spaces=True)
time.sleep(3) # 페이지 로딩 대기
except Exception as e:
print(f"URL로 이동 중 오류 발생: {e}")
def right_click_translate_image(whale_window):
# 창의 중앙에서 우클릭하여 “이미지 번역” 옵션 클릭
try:
rect = whale_window.rectangle()
center_x = (rect.left + rect.right) // 2
center_y = (rect.top + rect.bottom) // 2
# 중앙에서 우클릭
whale_window.right_click_input(coords=(center_x, center_y))
time.sleep(1)
# “이미지 번역” 클릭
translate_menu_item = whale_window.child_window(title="이미지 번역 (R)", control_type="MenuItem")
translate_menu_item.click_input()
print("이미지 번역 명령이 실행되었습니다.")
time.sleep(2) # 번역 프로세스 대기
except Exception as e:
print(f"이미지 번역 실행 중 오류 발생: {e}")
def execute_js_via_clipboard(whale_window, js_code):
# 자바스크립트 코드를 클립보드에 복사하고 주소창에 붙여넣어 실행
try:
address_bar = whale_window.child_window(title="주소창 및 검색창", control_type="Edit")
address_bar.click_input()
# 자바스크립트 코드를 클립보드에 복사
clipboard.EmptyClipboard()
clipboard.SetData(f"javascript:{js_code}")
# 주소창에 붙여넣기 (Ctrl+V)
address_bar.type_keys("^v")
address_bar.type_keys("{ENTER}")
time.sleep(2) # 코드 실행 대기
except Exception as e:
print(f"자바스크립트 실행 오류: {e}")
def main():
app = start_whale_with_devtools()
whale_window = find_whale_window(app)
if whale_window:
url = "https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/672868c99acd550673510816/0da24e66-a33b-483d-b8a2-bd5b909d8aff.jpg"
navigate_to_url(whale_window, url)
right_click_translate_image(whale_window)
# 번역 상태 추적을 위한 JavaScript 코드
js_code = """
(function() {
const checkStatus = setInterval(() => {
const imgElement = document.querySelector("img[src*='base64']");
if (imgElement) {
console.log("번역 성공 - 이미지 src:", imgElement.src);
clearInterval(checkStatus);
} else if (document.querySelector(".error:not([hidden])")) {
console.log("번역 실패 메시지 감지됨");
clearInterval(checkStatus);
}
}, 500);
})();
"""
execute_js_via_clipboard(whale_window, js_code)
if __name__ == "__main__":
main()