개요

AWS SAA-c03 시험을 준비하면서 덤프 문제를 많이 풀게된다.

글 작성 기준으로 특정 문제부터는(아래 링크) 프리미엄 가입을 유도하고 있다.

https://www.examtopics.com/exams/amazon/aws-certified-solutions-architect-associate-saa-c03/view/23/

 

ExamTopics - AWS Certified Solutions Architect - Associate SAA-C03 Exam Questions Limit

 

www.examtopics.com

 

하지만 구글에서 문항 하나씩 검색하면서 문제에 접근할 수 있기 때문에 Selenium을 사용하여 편하게 푸는 방법을 생각했다.

Selenium을 이용해서 각 문제를 새 탭으로 띄우기를 실행하고 물 떠오면 딱 시간이 된다.

아래의 캡쳐처럼 각 문제를 띄워놓고 문제를 풀면서 탭을 지워가면서 진행한다. (macOS 기준 cmd+w를 누르면 편하게 끌 수 있다.)

 

환경

우선 파이썬 스크립트를 실행할 환경을 만든다. venv를 사용한 가상 환경도 좋고, 그렇지 않아도 상관없다.

pip install --upgrade pip
pip install selenium
pip install webdriver_manager

 

코드

import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://www.google.com/")

start = 300
s = "examtopics saa c03 question "
N = 30

for i in range(N):
    try:
        # 검색어 입력 필드가 로드될 때까지 대기
        search_box = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "APjFqb"))
        )

        # JavaScript를 사용하여 검색어 초기화 및 입력
        driver.execute_script("arguments[0].value = '';", search_box)
        driver.execute_script("arguments[0].value = arguments[1];", search_box, s + str(start + i))
        search_box.send_keys(Keys.RETURN)

        # 검색 결과 로드 대기
        result = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "search"))
        )

        # 첫 번째 검색 결과가 클릭 가능한 상태가 될 때까지 대기
        element = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@id='search']//div//div//div//h3"))
        )

        # 새 탭에서 링크 열기 (Mac의 경우 COMMAND, Windows의 경우 CONTROL)
        ActionChains(driver) \
            .key_down(Keys.COMMAND) \
            .click(element) \
            .key_up(Keys.COMMAND) \
            .perform()

    except Exception as e:
        print(f"Error in iteration {i}: {e}")
        continue

time.sleep(3600)

 

주의사항은 아래와 같다.

1. Selenium을 사용하기 위해 크롬 웹 드라이버를 설치할 필요없이 사용하는 크롬 버전에 맞추서 자동으로 다운받을 수 있다.

2. 현재 macOS 14.2.1 사용 중인데, 아래 로그로 실행이 되지 않는다면, 밑에 있는 스크립트를 실행하자.

NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'.
pip uninstall urllib3
pip install 'urllib3<2.0'

3. 구글의 검색 입력 박스의 id 값이 변경될 수 있으므로 실행되지 않는다면, 입력 소스에서 확인해서 값을 변경하자.

4. macOS를 사용하기 때문에 ActionChains의 key_down, up이 COMMAND로 되어있다. 윈도우 환경이라면 CTRL 변경하자.

5. 현재는 300번부터 30문제 페이지를 열도록 설정되어 있으니 변경하고 싶다면 start와 N 값을 수정하면 된다.

6. 문제를 풀 수 있는 시간이 한 시간으로 설정되어 있으나 마지막 time.sleep()을 수정하면 된다.