HyeM

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

Programming/Python

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

Hailey_HyeM207 2020. 6. 7. 21:03

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/HyeM207/SWING-STUDY/tree/main/GameMacro

 

 

'Programming > Python' 카테고리의 다른 글

[Python]WebCrawler2_웹툰 이미지 크롤링  (0) 2020.05.30
[Python]WebCrawler1_홈페이지URL출력  (0) 2020.05.30
[Python]Up&Down 게임  (0) 2020.05.30
[Python]리스트 함수  (0) 2020.04.12
[Python]문자열 함수  (0) 2020.04.12
Comments