배경나는 커뮤니티에 가입은 했지만 포인트를 어디서 쓰는지 모르고 필요성을 못 느껴서 로그인을 안 하고 사이트를 이용 중이었다. 이벤트 참여에 포인트가 필요한 것을 알고 3일 정도 동안 출석 체크를 하면서 프로그램을 만들자고 생각했다. 하지만 나는 자바스크립트, html, css 같은 웹 관련 지식들이 적으므로 구글에 검색해서 얻은 코드를 수정해보자. 목표는 퀘X사존이다. Show ※ 글쓴이가 초보기 때문에 초보자에게 알려주는 목적으로 쓰는 글입니다. 검색구글에 사이트 자동 출석체크를 검색해보자. 좋은 글들이 나온다가장 위의 글은 코드와 방법이 적혀있지만 우리가 원하는 사이트에 적용하기 위해 바꿀 수 있을 정도로 자세한 설명은 없다. 두 번째 글은 맥 환경에서의 방법이라 우리가 할 수 없다. 세 번째는 어플을 알려주는 사이트가 떴다. 이처럼 구글에 검색했을 때 우리가 원하는 것을 바로 못 찾으면 대부분 검색을 잘못한 것이다. 이런 관련 검색어로도 잘 못찾을 수도 있다. 그럴 경우 위에서 봤던 사이트들에서 적절한 키워드를 찾아 다시 검색해보자적절한 블로그를 찾았다. jjanggu1612.tistory.com/159 파이썬을 이용한 웹로그인 2 파이썬을 이용한 웹 로그인 2 안녕하세요. 오늘은 지난번 시간에 이어서 웹 자동 로그인을 해보겠습니다. 오늘의 포스팅은 지난번 강의와 이어져 있으니 지난번 강의를 보셔야 이해가 되실 것입 jjanggu1612.tistory.com 블로그를 그대로 따라 해 보면 (파이썬 설치) Selenium 설치, 크롬 웹 드라이버 받기, 낚시 사이트의 로그인과 출석체크에 필요한 소스들을 얻을 것이다. 이제 url 주소들을 퀘이사존에 맞게 바꾸면 된다. 즐겁게 주소와 개인정보들과 경로를 수정하면 된다. 파이썬을 잘 모르지만 browser.find_element_by_xpath('//*[@id="form"]/div[2]/input').click() 에서 id="form"이 있는 것의 아래 있는 div 중 위에서 2번째 div의 아래에 있는 input을 클릭하는 것을 의미하는 것이다. div[n]의 의미는 <form ~ id="form"~> 안에서 위에서 n번째 div라는 뜻일 거다. <form ~ id="form"~> ㅡㅡ <div>[1] ㄴ <ul>[1] ㄴ <div>[2] - <input ~> ㄴ <div>[3] 퀘이사존은 클래스명을 예쁘게 로그인 버튼이라 해 놓았다. 아마 클래스 이름을 하나만 할 수 있을 테니 [@id="form"]을 약간 바꿔서 [@class="login-bt"]로 하고 input을 하위에 하나밖에 없는 a로 해준다. browser.find_element_by_xpath('//*[@class="login-bt"]/a').click() 이제 글을 쓰게 된 원인인 출석체크다. 출첵을 한 날은 버튼을 올리면 n -> <span class="active1">n (#n은 날짜) 로 바뀐다오늘 출석체크를 안하면 span class가 active2로 나오고 뒤에 더 생긴다로그인 때와 마찬가지로 약간 바꾼다. onclick="anttendanceCheck()" 라는 출석체크를 위한 속성이 보인다. 이놈을 이용해 browser.find_element_by_xpath('//*[@onclick="anttendanceCheck()"]').click() 이런 식으로 만든다. 그러면 작동이... //<table>의 <tr>은 행이고 <td>은 열이다. /* 이 부분은 안 읽어도 상관없습니다 안돼서 이 글을 쓰고 있는 건데 지금 다시 해보니 문제없이 작동된다... 그래도 글의 의도와 맞게 아마 틀린 소리를 계속해보자. #browser.find_element_by_xpath('//*[@tbody]/tr[5]/td[1]').click() 이런 식으로 tbody를 찾고 그 아래를 직접 경로를 입력하거나 #browser.find_element_by_xpath('/html/body/div[@id="wrap"]/div[@id="contentArea"]/div[@id="container"]/div[@id ="content"]/div[@class="sub-content-wrap"]/div[@class="left-con- wrap"]/div[@class="column-wrap"]/div[@class="calender- wrap"]/div[@class="calender-area"]/div[@class="table- area"]/table[@id="calender"]/tbody/tr[5]/td[1]').click() 크롬의 Xpath helper 같은 절대 주소를 찾아주는 프로그램을 이용해 경로를 넣으면 작동이 된다. 그래서 혹시 #browser.find_element_by_xpath('//*[@onclick="anttendanceCheck()"]').click() 가 <span ~> 안의 무언가를 주소로 생각했나 싶어 #browser.find_element_by_xpath('//*[@onclick="anttendanceCheck()"]').find_element_by_xpath('..').click() find_element_by_xpath('..') <!-- 현재 Node의 부모 Node 선택 --> 을 해보니 작동됐다. */ 끝크롬 웹드라이버 링크 - chromedriver.chromium.org/downloads Downloads - ChromeDriver - WebDriver for Chrome WebDriver for Chrome chromedriver.chromium.org 자신의 크롬 버전과 맞는 버전은 다운로드해야 한다는데 다르면 안 되는지 모르겠다. 그러면 이런 식으로 완성된다.
기타만약 다른 윈도우 컴퓨터에서 사용하고 싶으면 exe 파일을 만들어야 한다. 혹시 문제가 있으면 관리자 권한으로 해보자cmd 혹은 명령 프롬프트 검색 후 실행하고 pip install pyinstaller 를 입력해서 pyinstaller 를 설치한다. 그다음 cd를 이용해서 .py 와 크롬 드라이버가 같이 있는 곳으로 간다. 서로 다른 곳에 있다면 한 곳에 넣어주고 경로를 수정해주자. 다른 컴퓨터에는 크롬 웹드라이버가 없을 경우가 있을 테니 같이 포장하는 것이 좋다. 이때 cd 를 이용해 파일이 있는 곳으로 가는 방법을 모른다면 다른 드라이브면 약간 방식이 다른데 이는 구글에 검색하거나 파일을 바탕화면에 두는 게 마음이 편하다. 이후 pyinstaller --onefile --add-binary "chromedriver.exe";"." .py 를 입력하면 된다. 이것은 이분의 블로그를 참조했습니다. 감사합니다 센세 blog.naver.com/yhs11145/221450157087 pyinstaller로 파이썬 exe 파일 만들기 파이썬을 이용해 여러 가지 소스들을 만들어 재미있게 실행해봤을 거에요.!그런데, 여기서!!내가 만든 ... blog.naver.com 쿠키프로그램은 만들었으나 이것을 매일 실행시키는 것도 까먹기 쉬운 일이다. 나도 만들었지만 이미지에 출석이 놓친 것들이 꽤 있다. 구글에 찾아보면 bat 파일을 만들어 윈도우 작업 스케줄러에 등록하거나 다른 스케줄러 프로그램을 사용해야 하지만 이 작은 일 때문에 컴퓨터가 켜졌다 꺼지는 것은 전기가 아깝기도 하고 집에 라즈베리파이가 있으니 이것을 이용해보자. |