Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- GUI
- 오블완
- pycrypto
- classcard
- justify
- 랜섬웨어
- 파이썬
- 티스토리챌린지
- 타이핑웍스
- 클래스카드 매크로
- typingworks
- 클래스카드
- aes 복호화
- aes 암호화
- 재생목록
- Python
- customtkinter
- textvariable
- Selenium
- 셀레니움
- 모의 랜섬웨어
- Python GUI
- Tkinter Label
- classcard 매칭게임
- pytube
- 음원추출
- python 예제
- AES
- 자동화
- Tkinter
Archives
- Today
- Total
파이썬이 제일 쉬워
[Python] Selenium 실습, ClassCard 매칭 게임 자동화하기 #2 본문
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
이렇게 영어 듣기까지 대응 가능한 프로그램을 만들어보았다.
'Python' 카테고리의 다른 글
[Python] 개쉽고 간지나는 customtkinter 써보기 (1) | 2024.06.12 |
---|---|
[Python] Pytube, Tkinter로 유튜브 동영상 다운로드 하기 #3 (재생목록, GUI) (0) | 2023.10.31 |
[Python] Pytube로 유튜브 동영상 다운로드 하기 #2 (0) | 2023.10.31 |
[Python] Pytube로 유튜브 동영상 다운로드 하기 #1 (0) | 2023.10.31 |
[Python] Selenium 실습, ClassCard 매칭 게임 자동화하기 #1 [Outdated] (0) | 2022.03.13 |
Comments