Allen's 데이터 맛집
PhantomJS로 도커환경에서 네이버 로그인 본문
도커 환경에서 개발환경 설정
1. cmd에서 docker pull ubuntu:16.04 [우분투 파일 들고 오기]
2. docker run -it ubuntu:16.04 [우분투 실행]
3. apt-get update [우분투 업데이트 실시]
4. apt-get install -y python3 python3-pip [y 옵션으로 python3와 python3 pip 설치]
5. pip3 install selenium [셀리니움 설치]
6. pip3 install beautifulsoup4 [뷰티풀 습 다운]
팬텀JS 다운로드
1. apt-get install -y wget libfontconfig [펜텀 js 다운로드]
2. mkdir -p /home/root/src && cd$_ [해당 폴더를 생성]
3. wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 .
[팬텀 js 가져오기]
4. tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 [가져온 phantomjs 압축 해체]
5. cd phantomjs-2.1.1-linux-x86_64/bin/ [해제한 폴더로 이동]
6. cp phantomjs /usr/local/bin/ [해제한 내용을 해당 폴더에 카피하기]
7. apt-get install -y fonts-nanum* [나눔 한국어 폰트 다운로드]
8. docker ps -a [록을 확인해서 방금 들어온 도커의 컨테이너 id [48715 bb423 ab]를 확인]
9. docker commit 48715bb423ab ubuntu-phantomjs [당 컨테이너 아이디를 ubuntu-phantomjs라는 아이디로 변경 후 저장(보기 쉽게)]
컨테이너를 만든후 아래와 같이 utf8과 같은 설정들을 해주는데 이 설정이 없으면 이후에 한글이 제대로 출력이 되지 않기 때문에 꼭 해주면 됩니다.
docker run -i -t -v /c/Users/Vector/sample:/sample -e ko_KR.UTF-8 -e PYTHONENCODING=utf_8 ubuntu-phantomjs /bin/bash
기존에 cmd창에서 파이썬 파일을 실행을 할 때 'python test.py' 란 명령어로 파일을 실행하였습니다.
하지만 이 컨테이너에선 기존에 사용하던 컨테이너와 달리 python3 버전을 사용했기 때문에 'python3 test.py'으로 입력해야 됩니다.
docker run -i -t -v /c/Users/Vector/sample:/sample ubuntu-phantomjs /bin/bash
PhantomJS로 네이버 로그인.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
url = "https://nid.naver.com/nidlogin.login"
# PhantomJS 드라이버 추출하기 --- (*1)
browser = webdriver.PhantomJS()
browser.implicitly_wait(3)
# URL 읽어 들이기 --- (*3)
browser.get(url)
# 로그인
element_id = browser.find_element_by_id("id") # 아이디 텍스트 입력 상자
element_id.clear() # 텍스트 박스 안 클리어 하기
element_id.send_keys("[아이디]")
element_pw = browser.find_element_by_id("pw") # 비밀번호 텍스트 입력 상자
element_pw.clear() # 텍스트 박스 안 클리어 하기
element_pw.send_keys("[비밀번호]")
button = browser.find_element_by_css_selector("input.btn_global[type=submit]")
button.submit()
browser.save_screenshot("Website_C.png")
# 브라우저 종료하기 --- (*5)
browser.quit()