일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Kotlin
- ubuntu python
- dagger-hilt
- 자바
- 안드로이드 테스트
- prisma
- Apollo Server
- Dependency Injection
- PYTHON
- graphQL
- 안드로이드 디자인패턴
- 자바기초
- Design Pattern
- LinkedList
- 유니티
- java
- MVVM pattern
- 안드로이드
- flutter
- Android test
- mvvm
- Data structure
- Apollo GraphQL
- 우분투 파이썬
- 파이썬 크롤링
- unit test
- Android
- Nexus GraphQL
- 웹크롤링
- 안드로이드 mvp
- Today
- Total
Hun's Blog
[Python] 웹 크롤링 7 - 색감테스트 봇 구현 본문
참고
파이썬 레시피 - 웹 활용 입문편을 공부하면서 정리한 내용
색감테스트 해보기
1. 태그 구성
-> 버튼이 4 -> 9 -> 16 ... 으로 늘어난다.
-> div로 되어있다.
-> xpath 찾기
-> //*[@id="grid"]/div[1] -> //*[@id="grid"]/div[2] ...
2. 스크립트 작성
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
29
30
31
32
33
34
35
36
|
from selenium import webdriver
from pprint import pprint
import time
from collections import Counter
import time
driver.implicitly_wait(300)
btns = driver.find_elements_by_xpath('//*[@id="grid"]/div')
#print(len(btns))
def analysis():
btns_rgba = [btn.value_of_css_property('background-color') for btn in btns]
#pprint(btns_rgba)
result = Counter(btns_rgba)
#pprint(result) # value가 1이면 정답
if value == 1:
answer = key
break
else:
answer = None
print("정답을 찾을 수 없음")
if answer :
index = btns_rgba.index(answer)
btns[index].click()
if __name__=="__main__":
start = time.time()
analysis()
|
2-1
driver = webdriver.Chrome('chromedriver')
driver.get('http://zzzscore.com/color/')
driver.implicitly_wait(300)
-> 크롬 드라이버 셋팅
2-2
btns = driver.find_elements_by_xpath('//*[@id="grid"]/div')
-> 1to50 봇과 다른점이 있다.
-> //*[@id="grid"]/div[*]에서 div[]의 *은 찾고자 하는 내부요소가 있는경우만 탐색한다.
-> 1to50 에서는 항상 숫자가 존재하기 때문에 내부요소가 있으므로 탐색한다.
-> 하지만 지금같은 경우에는 태그 내부에 아무런 요소가 없다.
-> 이 경우에는 //*[@id="grid"]/div 으로 입력해야한다.
2-3
# 정답 탐색 및 클릭 모듈
def analysis():
btns_rgba = [btn.value_of_css_property('background-color') for btn in btns]
-> btns 를 for문으로 돌면서 각 태그의 rgba 값을 추출한다.
-> selenium 의 value_of_css_property로 해당 요소의 css 속성을 확인할 수 있다.
-> 추출한 값중 다른 1곳이 정답이다.
result = Counter(btns_rgba)
-> from collections import Counter 참조
-> collection 모듈의 count 메소드는 컨테이너에 동일한 값의 자료가 몇개인지를 파악하는데 사용한다.
-> result라는 변수에 담는다.
-> result value가 1이면 정답
for key, value in result.items():
-> result.items() 메소드로 각각의 아이템을 배열처럼 검사할 수 있다.
-> 배열은 Counter 메소드에 따라 key와 value로 저장된다.
if value == 1:
-> vlaue가 1인것이 정답
answer = key
-> 정답일 경우 answer라는 변수에 key 를 담는다.
break
else:
answer = None
print("정답을 찾을 수 없음")
#정답 누르기
#-> answer에 저장된 색이 어느 위치에 있는지 btins_rgba에서 찾는다.
#-> 해당 인덱스로 btns에 저장되어있는 요소를 찾아 클릭한다.
if answer :
-> answer 변수에 key 가 셋팅이 되었을때
index = btns_rgba.index(answer)
-> btns_rgba.index() 메소드를 사용하여 key 를 입력하고 해당 item의 인덱스번호를 반환받는다.
btns[index].click()
-> btns 리스트에 해당 item의 인덱스번호를 입력하고 .click() 메소드를 전송하여 클릭하도록 요청한다.
2-4
if __name__=="__main__":
-> 인터프리터에 의해 직접 실행될 경우에만 실행하도록 한다.
start = time.time()
-> time 모듈의 time() 메소드는 실제 시간의 초로 카운트 할수있도록 구현되어있다.
while time.time() - start <= 60:
-> 60초 동안
analysis()
-> 정답을 찾아 클릭하는 모듈 반복실행
'Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 9 - 네이버 이미지 수집하기 (0) | 2020.04.06 |
---|---|
[Python] 웹 크롤링 8 - 트위치 클립 다운로드 (0) | 2020.04.06 |
[Python] 웹 크롤링 6 - 1 to 50 봇 (0) | 2020.04.06 |
[Python] 웹 크롤링 5 - selenium을 활용한 유튜브 키워드 검색하기 (0) | 2020.04.06 |
[Python] 웹 크롤링 4 - 네이버 웹툰 썸네일 가져오기 (0) | 2020.04.06 |