from playwright.sync_api import sync_playwright import sys, os, random import time def change_group(selected_group_index: int): # Playwright 시작 및 브라우저 실행 playwright = sync_playwright().start() base_path = get_base_dir() browser_path = os.path.join(base_path, 'browsers', 'chromium-1140', 'chrome-win','chrome.exe') extension_path = os.path.join(base_path, 'browsers', 'extensions', '1.1.100_0') user_data_dir = os.path.join(base_path, 'browsers', 'user_data') # User agent 설정 user_agent = random.choice([ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.0.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 OPR/85.0.0.0", ]) # 브라우저 시작 및 설정 browser = playwright.chromium.launch_persistent_context( user_data_dir, headless=False, permissions=["geolocation", "notifications"], geolocation={"latitude": 37.5665, "longitude": 126.9780}, locale="ko-KR", args=[ '--disable-popup-blocking', f'--disable-extensions-except={extension_path}', f'--load-extension={extension_path}', '--start-maximized', '--window-size=1920,1080' ], executable_path=browser_path, user_agent=user_agent ) # 기본 페이지가 없을 수 있으므로 새로운 페이지 생성 page = browser.new_page() # 로그인 페이지로 이동 (URL을 실제 로그인 페이지로 변경) page.goto('https://percenty.co.kr/signin') # 로그인 수행 admin_toggle = page.locator('button[role="switch"]') if admin_toggle.get_attribute("aria-checked") == "true": admin_toggle.click() # 관리자 모드에서 직원 모드로 전환 page.fill('input[placeholder="이메일 주소 입력"]', 'leensoo1nt@gmail.com') page.fill('input[placeholder="직원 아이디 입력"]', 'uploader') page.fill('input[placeholder="영문/숫자/특수문자의 조합 (6~15자리)"]', 'uploader') page.click('button:has-text("직원 로그인 하기")') page.wait_for_selector('div[role="dialog"]', timeout=3000, state='visible') close_button = page.query_selector("div.ant-modal-footer > div > div > button[type='button'].ant-btn.css-1li46mu.ant-btn-default") if close_button: close_button.click() # 상품 수정 페이지로 이동 page.wait_for_load_state("networkidle") page.click('span.ant-menu-title-content:has-text("신규 상품 등록")') time.sleep(0.5) page.evaluate(""" const dropdown = document.querySelector('input#rc_select_1'); if (dropdown) { dropdown.scrollIntoView(); } """) print("해당요소 스크롤") # 그룹 드롭박스 열기 group_dropdown_css = "div.ant-select-selector" page.wait_for_selector(group_dropdown_css) print("드롭박스 상위 요소 대기") # 드롭박스 열기 group_dropdown_click_css = "div.ant-select-selector:nth-child(1)" page.click(group_dropdown_click_css) print("드롭박스 클릭") # 드롭다운 열림 상태 확인 dropdown_openstatus_css = "div.ant-select-dropdown:not(.ant-select-dropdown-hidden)" page.wait_for_selector(dropdown_openstatus_css) print("드롭다운 열림 확인") # 옵션 선택 group_index_css = f"div.ant-select-item.ant-select-item-option:nth-child({selected_group_index + 1})" page.wait_for_selector(group_index_css) page.click(group_index_css) print(f"[{selected_group_index+1}]번 그룹 선택 완료") # 변경된 그룹 이름 가져오기 selected_group_name_css = "div#root div:nth-child(4) > div > div > span.ant-select-selection-item" selected_group_name = page.inner_text(selected_group_name_css) print(f"변경된 그룹 이름: {selected_group_name}") time.sleep(1) # 브라우저 닫기 browser.close() def get_base_dir(): if getattr(sys, 'frozen', False): # 패키징된 경우 base_dir = os.path.dirname(sys.executable) internal_dir = os.path.join(base_dir, '_internal') if os.path.exists(internal_dir): return internal_dir else: base_dir = os.path.dirname(os.path.abspath(__file__)) return base_dir # 실행 예제 (2번째 그룹 선택) change_group(selected_group_index=2)