테스트를 하다보면 가끔 국내 환경 외 국외 환경을 봐야 하는 경우가 있습니다. (미국, 일본, 대만 등..)
이럴때 AWS 무료 인스턴스 환경을 세팅하여 간단하게 확인 후 다시 종료를 하는 작업을 반복하는데요.
이걸 자동화로 구현하면 괜찮을 거 같아서 구현 시도해보았습니다.
(예전에 환경 세팅 후 종료하지 않아서 4만원인가 결제했던 아픈 기억이 떠오릅니다 ㅠㅠ)
AWS EC2 URL로 진입 후 최대창으로 변경합니다.
최대창으로 변경하지 않으면 추후 버튼이 우측이 아닌 하단에서 노출되어 스크롤 하는 동작을 줄이기 위해 변경하였습니다.
driver.get('https://console.aws.amazon.com/ec2/v2/home')
driver.maximize_window()
time.sleep(2)
로그인 동작 이후에는 driver.get으로 인스턴스 시작 화면으로 URL을 이동하였습니다.
저는 미국 서부 URL을 사용하였는데 원하는 지역의 URL를 사용하시면 됩니다.
(인스턴스 시작 버튼 누르는 시간보다 바로 이동하는게 더 빨랐습니다.)
AWS 인스턴스 시작 화면에서는 iframe이 여러개이므로 element들을 찾기 위해 해당 프레임으로 변경하였습니다.
driver.get('https://us-west-1.console.aws.amazon.com/ec2/v2/home?region=us-west-1#LaunchInstances:')
time.sleep(5)
driver.switch_to.frame('instance-lx-react-frame')
time.sleep(2)
입력하는 화면의 class_name이 동일한걸로 확인되어 find_elements로 찾은 후 각 입력창에 텍스트를 입력하였습니다.
중간마다 필요한 키보드 키 입력은 pyautogui를 사용하였습니다.
저는 주로 Windows 환경을 사용하기 때문에 Windows로 구현하였는데 원하시는 OS에 따라 코드를 변경하여 사용하면 됩니다.
(기본 설정값이 Linux입니다.)
driver.find_elements(By.CLASS_NAME, 'awsui_input_2rhyz_7fj5p_97')[0].send_keys('SeleniumAWS')
pyautogui.press('pagedown')
driver.find_elements(By.CLASS_NAME, 'awsui_input_2rhyz_7fj5p_97')[1].send_keys('Windows')
pyautogui.press('enter')
time.sleep(5)
키페어 화면 위치로 이동하기 위해 인스턴스 시작 버튼을 눌러서 넘어가는 동작으로 구현하였는데 막히는 부분이 있었습니다.
바로 OS를 추가할 때 사용되는 버튼 class_name과 마지막 인스턴스 시작 버튼의 class_name이 일치하는 경우가 있었습니다.
그로 인해 코드를 실행할 때마다 2가지 케이스로 구분되는 걸 확인하였습니다.
- OS 선택하는 elements들이 find_elements에 잡히는 경우
- OS 선택하는 elements들이 find_elements에 잡히지 않는 경우
2가지 경우에 따라 find_elements length값이 달라지므로 2가지 모두 동작되기 위해 len값을 통해 if문으로 구현하였습니다.
elements_len = len(driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206'))
if elements_len > 120:
submit_button = driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206')[121]
else:
submit_button = driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206')[0]
기존에 1번이라도 AWS EC2를 사용하였다면 키페어 파일을 가지고 있을텐데요.
해당 키페어 파일로 설정하기 위해 입력창 클릭 후 pyautogui로 키보드를 조작하여 설정할 수 있게 구현하였습니다.
(저는 키페어 파일이 1개라 down을 2번만 내리면 되었는데 설정에 따라 down 개수를 조정하여 사용하면 됩니다.)
driver.find_element(By.CLASS_NAME, 'awsui_button-trigger_18eso_m1vk3_97.awsui_invalid_18eso_m1vk3_186.awsui_has-caret_18eso_m1vk3_135').click()
time.sleep(2)
pyautogui.press('down')
pyautogui.press('down')
pyautogui.press('enter')
전체 코드입니다. 해당 코드 실행시 인스턴스 환경 세팅이 자동으로 되어 편하게 AWS EC2 Windows 환경을 사용할 수 있습니다.
(인스턴스 실행 후 사용이 완료되었으면 반드시 종료하시는걸 추천드립니다. 생각지도 못하게 결제 금액이 청구되는 경우가 있습니다.)
이번 코드를 작성할 때는 다른 페이지와 다르게 HTML 코드가 상당히 복잡하게 되어있어서 구현하는데 어려움이 있었습니다.
다양한 삽질 끝에 구현하였고 많은 공부가 되어서 좋은 경험으로 남을 수 있어서 좋은거 같습니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time
import pyautogui
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://console.aws.amazon.com/ec2/v2/home')
driver.maximize_window()
time.sleep(2)
# 로그인 입력창
driver.find_element(By.ID, 'resolving_input').send_keys('ID입력란')
driver.find_element(By.ID, 'next_button').click()
time.sleep(2)
driver.find_element(By.ID, 'password').send_keys('PW입력란')
driver.find_element(By.ID, 'signin_button').click()
time.sleep(10)
# 인스턴스 시작 화면으로 이동
driver.get('https://us-west-1.console.aws.amazon.com/ec2/v2/home?region=us-west-1#LaunchInstances:')
time.sleep(5)
# iframe 변경
driver.switch_to.frame('instance-lx-react-frame')
time.sleep(2)
# 이름값 입력
driver.find_elements(By.CLASS_NAME, 'awsui_input_2rhyz_7fj5p_97')[0].send_keys('SeleniumAWS')
pyautogui.press('pagedown')
# OS Windows로 변경
driver.find_elements(By.CLASS_NAME, 'awsui_input_2rhyz_7fj5p_97')[1].send_keys('Windows')
pyautogui.press('enter')
time.sleep(5)
driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206')[0].click()
time.sleep(5)
# find_elements len값 구한 후 시작 값 누르기
elements_len = len(driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206'))
if elements_len > 120:
submit_button = driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206')[121]
else:
submit_button = driver.find_elements(By.CLASS_NAME, 'awsui_button_vjswe_17xsg_101.awsui_variant-primary_vjswe_17xsg_206')[0]
submit_button.click()
# 키페어 파일로 세팅
driver.find_element(By.CLASS_NAME, 'awsui_button-trigger_18eso_m1vk3_97.awsui_invalid_18eso_m1vk3_186.awsui_has-caret_18eso_m1vk3_135').click()
time.sleep(2)
pyautogui.press('down')
pyautogui.press('down')
pyautogui.press('enter')
time.sleep(5)
# 인스턴스 시작 다시 누르기
submit_button.click()
time.sleep(10)
driver.close()
코드 실행 후 몇분 후 확인해보면 인스턴스가 생성되어 실행중으로 변경된 걸 확인할 수 있습니다.
기존에 가지고 계신 키 페어를 사용하여 접속하면 외국 환경의 Windows Server 환경으로 간단하게 테스트가 가능합니다.
'자동화 > Selenium' 카테고리의 다른 글
밴드웹에서 밴드 글을 자동으로 써보기 (1) | 2024.02.03 |
---|---|
지역 맛집 리스트 자동화로 추출해서 확인하기 (with 카카오맵) (2) | 2024.02.03 |
Selenium 텍스트 입력창 지우는 방법들 (Clear, Keys..) (1) | 2024.02.02 |
Selenium으로 밴드웹 자동 로그인 해보기 (0) | 2024.02.02 |
Selenium 대기 방식 실행 시간 비교해보기 (Wait, Sleep) (0) | 2024.02.01 |