전 블로그에서 게시한 글을 이전하며 재업로드합니다.
https://plan0a-0z-entering-security.tistory.com/38?category=854951
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 관련 코드 ==
// : 문서내에서 검색
* : 매칭되는 모든 ElementNode 검색
[@id="grid"]/div[2] : id가 grid인 div 태그중 3번째 태그 접근
++ xpath란? ++
: W3C 표준으로, XML문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어이다.
W3C : World Wide Web Consortium; WWW
XML 은 W3C의 표준에 포함되어 있는 언어로, 마크업 언어이다.
== 프로그램(매크로) 로직 설명 ==
게임시간을 줄이기 위해(빠르게 하기 위해), 총 3단계로 로직을 나누었다.
- 1~25까지의 숫자 버튼들의 각 인덱스와, xpath 경로를 리스트에 저장해둔다. (이때, 저장되는 순서는 1~25순서대로 저장된다.)
- 1~25의 버튼 클릭 (게임시작) + 클릭한 버튼들이 무슨 값으로 바뀌는지 딕셔너리로 저장( 딕셔너리의 키 : 버튼에 쓰여진 숫자(26~50) ; 딕셔너리의 값 : 그 버튼의 xpath )
- 위에서 저장한 xpath리스트를 가지고 버튼들을 클릭해줌과 동시에, 눌러준 버튼이 어떤 값으로 바뀌는지 딕셔너리로 저장해준다.
- 26~50까지의 버튼 클릭
- 위에서 저장한 딕셔너리를 키를 기준으로 정렬해주고(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
'#️⃣ 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 |