[Python]GameMacro_순발력테스트 매크로

2022. 2. 6. 17:17· #️⃣ Project 및 개발일지/Mini Project

전 블로그에서 게시한 글을 이전하며 재업로드합니다.

https://plan0a-0z-entering-security.tistory.com/38?category=854951 

 

[Python]GameMacro_순발력테스트 매크로

HyeM [Python]GameMacro_순발력테스트 매크로 본문 Programming/Python [Python]GameMacro_순발력테스트 매크로 Hailey_HyeM207 2020. 6. 7. 21:03 Prev 1 2 3 4 5 6 Next

plan0a-0z-entering-security.tistory.com

 


 

 

GameMacro_순발력테스트 매크로

== 기능 ==

 1~50까지의 수가 5x5블록에 랜덤으로 씌여져있는 게임화면에서, 1부터 50까지  수를 순서대로 클릭하는 것을 자동으로 처리하는 매크로이다.

 

 

== 사이트 특징 ==

  • 5x5의 블록들이 쓰여져 있다. 1부터 차례대로 버튼을 눌러야 된다.
  • 처음 시작화면에는 1~25까지의 수가 쓰여져 있고, 버튼을 누르면 그 수는 26~50까지의 랜덤한 숫자로 바뀐다.

게임 사이트 주소 : http://zzzscore.com/1to50/

게임사이트 시작화면

 

 

== 사용한 파이썬 기능 == 

Selenium

 : 웹 애플리케이션을 위한 테스팅 프레임워크로, 자동화 테스트를 위한 여러가지 기능을 제공한다.

 : 크롬 버전에 맞는 크롬 드라이버를 설치해두어야 함.

 

설치방법은 더보기 클릭

더보기

1. pip install selenium 으로 파이썬 명령창을 통해 설치하기 .

2. sites.google.com/a/chromium.org/chromedriver/downloads  여기 사이트에서 크롬버전에 맞는 드라이버를 설치한다.

3. 여기까지 설치는 다 되었고, 크롬 여는 방법은 다음과 같다. 

from selenium import webdriver

driver = webdriver.Chrome(' (설치한 크롬드라이버 경로) ')

 

== 매크로에 쓰인 Selenium 관련 코드 ==

크롬 열기 webdriver.Chrome
특정  URL 열기 driver.get
웹페이지에 접근하고자 하는 요소에, xpath로 접근하기 driver.find_element_by_xpath

// : 문서내에서 검색

* : 매칭되는 모든 ElementNode 검색

[@id="grid"]/div[2] : id가 grid인 div 태그중 3번째 태그 접근

 

++  xpath란?  ++

:  W3C 표준으로, XML문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어이다.

   W3C : World Wide Web Consortium; WWW

   XML 은 W3C의 표준에 포함되어 있는 언어로, 마크업 언어이다. 

클릭 함수

 

 

== 프로그램(매크로) 로직 설명 == 

게임시간을 줄이기 위해(빠르게 하기 위해), 총 3단계로 로직을 나누었다. 

  1. 1~25까지의 숫자 버튼들의 각 인덱스와, xpath 경로를  리스트에 저장해둔다. (이때, 저장되는 순서는 1~25순서대로 저장된다.)
  2. 1~25의 버튼 클릭 (게임시작) + 클릭한 버튼들이 무슨 값으로 바뀌는지 딕셔너리로 저장( 딕셔너리의 키 : 버튼에 쓰여진 숫자(26~50) ; 딕셔너리의 값 : 그 버튼의 xpath ) 
  3. 위에서 저장한 xpath리스트를 가지고 버튼들을 클릭해줌과 동시에, 눌러준 버튼이 어떤 값으로 바뀌는지 딕셔너리로 저장해준다.
  4. 26~50까지의 버튼 클릭
  5. 위에서 저장한 딕셔너리를 키를 기준으로 정렬해주고(26,27,28...50), 딕셔너리 키에 대응하는 값(xpath)를 갖고 버튼들을 클릭한다.

 

== 프로그램 코드 설명 ==

 

단계 1.  1~25까지의 숫자 버튼들의 각 인덱스와, xpath 경로를  리스트에 저장

7 line : l 리스트 ; 실행리스트1 (1~25까지의 클릭할 버튼의 xpath 저장 )

8 line : count 리스트 ; 실행리스트1에서 각 버튼의 인덱스를 저장함

9 line : c 변수 ;  반복문을 돌면서, 몇번째 숫자의 버튼인지 카운트 하기 위한 변수 

 

12 line : while 문 ; 1~25까지의 버튼을 찾기 위한 반복문, 한 번 돌 때마다 클릭할 버튼의 xpath와 버튼 인덱스를 찾아 리스트에 저장함

13 line:  for문 ; 25개의 버튼들 중, 찾는 숫자의 버튼을 찾기 위한 반복문 

            ex ) 찾아야 하는 버튼이 5의 버튼이면, for문을 돌며, div 태그의 택스트 값이 5인지 확인함.

15~20 line : if문과 리스트에 값 추가 ;  

                        15 line :  찾는 버튼이 맞다면,

                        16 line :  btn의 xpath에 /span까지 붙인다.   (이유 : span을 붙여야지만, click때 작동함, 단 이때는 .text가 먹히질 않음)

                        17 line : 클릭할 버튼의 xpath 저장

                        18 line : 클릭할 버튼의 인덱스 저장 (버튼 위치 저장)

                        19~20 line : 버튼을 찾았으니, 다음 숫자를 찾기 위해 +1 연산하고 break함

 

 

단계 2.  1~25의 버튼 클릭 (게임시작) + 클릭한 버튼들이 무슨 값으로 바뀌는지 딕셔너리로 저장

필요한 리스트, 변수, 실행코드들 : 

24 line : l2 딕셔너리 ; 실행 딕셔너리 (키 : 버튼의 text값 ( 숫자) , 값 : xpath )

26 line : for문 ;  1리스트에서 클릭할 버튼의 xpath를 바로바로 가져와 클릭 + 클린한 그 위치의 버튼의 바뀐 text(숫자)와 블록 xpath를 l2딕셔너리에 저장

27~28 line : l리스트에서 xpath를 가져와 클릭

29 line : 클릭 한 후, 블록의 text(숫자값)이 바로 바뀌지 않기 때문에, sleep함수 이용하여 기다린다. ( 시행착오를 통해, 0.104초 기다리기로 결정 )

30 line : c변수 ; 클릭한 버튼의 위치(인덱스)를 count 함수를 이용하여 c 변수에 저장해두어, 31~32 라인에서 xpath 찾는데 이용한다.

31~32 line : 클릭한 버튼의 xpath를 가져온다.    ( 변수 2개 이유 : span을 붙여야지만, click때 작동함, 단 이때는 .text가 먹히질 않음)

33 line : 딕셔너리의 키에는 버튼의 text(숫자)를, 값에는 버튼의 xpath를 저장한다. 

 

 

단계 3.  26~50까지의 버튼 클릭

37 line : for문 ; 단계2에서 저장한 l2 딕셔너리를 키 값을 기준으로 정렬하여 반복문 돌린다. ( 키 값을 정렬하게 되면, 26~50까지의 버튼들이 차례대로 정리됨)

38~39 line : 딕셔너리의 값(xpath)를 가져와 클릭한다.  (26~50까지의 버튼 클릭)

 

 

== 매크로 실행 화면 ==

매크로 실행 화면 (게임실행중)
매크로 실행결과 (게임종료)

 

 

== 코드 ==

 

https://github.com/KimHyeMin0207/GameMacro/blob/master/gameMacro.py

 

KimHyeMin0207/GameMacro

Contribute to KimHyeMin0207/GameMacro development by creating an account on GitHub.

github.com

 

 

'#️⃣ Project 및 개발일지 > Mini Project' 카테고리의 다른 글

[Mini Project] YouTube Data API 활용하기  (0) 2023.04.07
[Python]WebCrawler2_웹툰 이미지 크롤링  (0) 2022.02.06
[Python]WebCrawler1_홈페이지URL출력  (0) 2022.02.06
[Python]Up&Down 게임  (0) 2022.02.06
'#️⃣ Project 및 개발일지/Mini Project' 카테고리의 다른 글
  • [Mini Project] YouTube Data API 활용하기
  • [Python]WebCrawler2_웹툰 이미지 크롤링
  • [Python]WebCrawler1_홈페이지URL출력
  • [Python]Up&Down 게임
HyeM207
HyeM207
"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HYEM's Storage"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HyeM207
HYEM's Storage
HyeM207
  • ALL (115)
    • #️⃣ CS (Computer Science) (5)
      • Database (2)
      • SQL (2)
      • Git (1)
    • #️⃣ Data Engineering (43)
      • Airflow (18)
      • Spark (8)
      • Snowflake (2)
      • BI,DashBoard (4)
      • ELK Stack (2)
      • Hadoop (5)
      • Kafka (4)
    • #️⃣ Cloud&Container (16)
      • AWS (8)
      • GCP (1)
      • Docker (6)
      • Kubernetes (1)
    • #️⃣ Project 및 개발일지 (37)
      • Mini Project (5)
      • 개발일지 (9)
      • Algorithm 문제 풀이 (20)
    • #️⃣ 책 리뷰 (4)
    • #️⃣ 회고글&프로젝트 후기 (10)

공지사항

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.v4.2.2
HyeM207
[Python]GameMacro_순발력테스트 매크로
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.