파이썬이 제일 쉬워

[Python] Selenium 실습, ClassCard 매칭 게임 자동화하기 #2 본문

Python

[Python] Selenium 실습, ClassCard 매칭 게임 자동화하기 #2

HighBright 2022. 3. 20. 12:25

Selenium 실습, ClassCard 매칭 게임 자동화하기 #2
 
두 번째 시간, 오늘은 듣기 문제까지 자동화하는 프로그램을 만들어 보자.
듣기 문제 같은 경우에는 html 태그에서 단어 이름 바로 구할 수 없어서 다른 방법이 필요했다.
일단 여러가지 방법을 생각해볼 수 있었는데
첫 번째 방법은 발생되는 소리를 청취하고 번역해서 정답을 찾는 방법이었다.
하지만 이 방법으로 해보니 처리 속도가 너무 느려 실사용은 불가능했다.
 
그래서 두 번째 방법을 고민하며 게임의 html 태그를 다시 유심히 본 결과 듣기 단어의 소리 링크를 찾을 수 있었다.

그런데, mp3 파일의 이름이 심상치 않다.
암호화되어있는 것 같긴 한데..
형식을 보니 md5 같아서 일단 md5 decrypter에 돌려봤다.

역시 md5 암호화가 맞았고, 듣기 내용과 같은 단어인 것을 확인할 수 있었다.
이제 이 태그의 data-src 값을 가져오도록 코드를 짜면

lc = driver.find_element(By.XPATH, value='//*[@id="left_card_{}"]/div/div[1]/div/a/i'.format(str(a)))
temp1 = lc.get_attribute("data-src")
temp2 = temp1.split("/")[-1].rstrip(".mp3")

이렇게 만들 수 있다. 
그렇지만 md5를 복호화하는 것은 불가능하다.
(저 md5 decrypter는 특정한 단어를
encrypt한 것을 db에 등록하고 대조해주는 것이다.)
하지만.. 우리는 이미 변환 전의 값을 다 알고 있지 않은가?
전체 단어를 암호화해서 dict형식으로 만든 뒤 대입하면 되는 간단한 부분이다.
 
이제 md5 dict를 만들어줄 코드를 짜 보자

import hashlib

def md5_encode(word):
    md5_hash = hashlib.md5()
    word_b = word.encode('utf-8')
    md5_hash.update(word_b)
    result = md5_hash.hexdigest()
    return result
md5dict = {}
for i in range(1, 400):
    engword = sheet.cell(row=i, column=1).value
    md5word = md5_encode(engword)
    md5dict[md5word] = engword

이렇게 만들어 주면 끝!
 
이제 저번에 만들어주었던 코드에 if 구문을 약간 추가해서 완성해주면 된다.

a = 0
for lc in [lc1, lc2, lc3, lc4]:
    lct = lc.text
    if lct == "":
        lc = driver.find_element(By.XPATH, value='//*[@id="left_card_{}"]/div/div[1]/div/a/i'.format(str(a)))
        temp1 = lc.get_attribute("data-src")
        temp2 = temp1.split("/")[-1].rstrip(".mp3")
        lct = md5dict.get(temp2)

    for rc in [rc1, rc2, rc3, rc4]:
        if rc.text in engdict[lct]:
            lc.click()
            rc.click()
            time.sleep(1.5)
    a = a+1

이렇게 영어 듣기까지 대응 가능한 프로그램을 만들어보았다.

Comments