업무중에 다른 사이트의 만족도를 원하는 개수만큼 올리는 업무가 있는데 이런 단순 반복작업을 실행파일로 간단하게 할 수 없을까? 란 의문점에서 웹브라우저를 조작할 수 있는 selenium을 사용해보기로 했다.
1. Python 설치
파이선 공식 홍페이지 다운로드 페이지((http://www.python.org/downloads)에서 파이썬을 설치한다.
- 환경변수 설정
① 시스템 환경 변수 편집 > 환경 변수 > 사용자 변수 Path에 파이썬 스크립트 경로를 추가해준다. C:\Users\sjmoon\AppData\Local\Programs\Python\Python311\Scripts
2. Pycharm 설치
https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows 에서 설치하는데 Professional는 유료버전으로 HTML, JS, SQL을 지원하고 Community는 무료버전으로 필자는 Community로 설치하였다.
- 인터프리터 설정
① 파이참 상단 오른쪽 톱니바퀴 클릭 > Settings 클릭
② Python Interpreter화면 오른 상단 Add 클릭 > Virtualeny Envieonment화면의 Base Interpreter에 파이썬 버전 선택(파이썬 실행파일 경로 넣음)하고 OK버튼 클릭 >> Apply 버튼 클릭후 OK버튼 클릭
3. Python Selenium / PyInstaller 설치
cmd 창에서 pip install selenum와 pip install pyinstall 명령어를 사용하여 설치
4. Web Driver 설치
자신이 사용하고 있는 크롬 버전에 맞는 크롬 웹드라이버를 https://chromedriver.chromium.org/downloads 에서 설치한다.(각종 브라우저마다 드라이버가 따로 있지만 필자는 크롬 드라이버를 설치했다.)
5. 코드 작성
① 파이참에서 py 파일 생성
② 웹드라이버 관련 import
from selenium import webdriver
from selenium.webdriver.common.by import By
- import By는 웹 페이지 HTML 태그 속성에 접근할 수 있게 해준다.
③ 웹드라이버 옵션설정
options = webdriver.ChromeOptions()
options.add_argument("window-size=1024,768")
options.add_experimental_option("excludeSwitches", ["enable-logging"])
- 로그가 안보이도록 한다.
options.add_argument("headless")
options.add_argument("disable-gpu")
- 나중에 실행파일 생성시 추가해주는데 headless는 실행화면을 안보이게 해주고 disable-gpu는 브라우저의 화면 렌더링을 사용안함으로 설정한다.
④ Chrom 드라이버 실행 후 크롤링 할 URL 페이지 호출
driver = webdriver.Chrome(options=options)
driver.get("URL")
⑤ 브라우저 HTML 태그 속성 접근 후 제어
elem = driver.find_element(By.NAME, "{name}")
elem.click()
find_element 메소드와 By를 사용하여 원하는 태그 속성을 가져온다.
필자는 라디오 버튼 조작이므로 click()를 사용하여 조작하였다.
전체 소스
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_argument("window-size=1024,768")
options.add_argument("disable-gpu")
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)
driver.get("URL")
elem = driver.find_element(By.NAME, "{name1}")
elem1 = driver.find_element(By.NAME, "{name2}")
elem2 = driver.find_element(By.NAME, "{name3}")
elem3 = driver.find_element(By.NAME, "{name4}")
elem4 = driver.find_element(By.NAME, "{name5}")
elem5 = driver.find_element(By.NAME, "submitButton")
elem.click()
elem1.click()
elem2.click()
elem3.click()
elem4.click()
elem5.click()
driver.close()
6. 실행 파일 생성
pyinstaller autoCheck.py
cmd 창에서 py 파일이 존재하는 경로로 들어간 후 pyinstall 명령어를 사용하여 실행파일 생성
(dist 폴더안에 생성된다.)
설정
pyinstall -w : 콘솔창이 출력되지 않게 한다.
pyinstall -F : 실행파일이 하나만 생성되도록 한다.
+ 추가
위 명령어를 사용해도 콘솔창이 나오면 C:\Users\{사용자}\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\common 해당 경로의 service.py 폴더를 열고 creationflags 값을 creationflags=0x08000000,로 변경하고 저장한 뒤 실행파일을 생성하면 된다.