728x90
[01] Selenium 모듈을 이용한 폼과 로그인 인증 통과 테스트
- 사람처럼 웹페이지와 상호작용이 가능하도록 기능 지원
1. Selenium 설치
C:\Users\soldesk>pip install selenium
Collecting selenium
Downloading selenium-3.4.1-py2.py3-none-any.whl (931kB)
100% ■■■■■■■■■■ 942kB 729kB/s
Installing collected packages: selenium
Successfully installed selenium-3.4.1
2. chromedriver 설치
- https://sites.google.com/a/chromium.org/chromedriver/home
--> All versions available in Downloads --> Latest Release: ChromeDriver 2.30
- https://sites.google.com/a/chromium.org/chromedriver/home
--> All versions available in Downloads --> Latest Release: ChromeDriver 2.30
'chromedriver_win32.zip' 압축을 풀어 'chromedriver.exe' 파일을
'C:/Windows/System32' 폴더에 복사
3. 태그의 검색
[실행 화면]
Found <div> element with that class name!
▷ crawler1.selenium1.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.google.co.kr')
try:
# <div class="logo-subtext">한국</div>
elem = browser.find_element_by_class_name('logo-subtext')
print('발견된 태그: <%s>' %(elem.tag_name))
except:
print('태그를 찾지 못했습니다.')
4. 페이지 클릭하기
[실행 화면]
브러우저가 실행되어 Google의 이미지 검색으로 자동 이동함.
▷ crawler1.selenium2.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.google.co.kr')
try:
# <a class="gb_P" data-pid="2" href="https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=6uABWdvbDcrJ0gSeoa7gCw&ved=0EKouCBUoAQ">이미지</a>
aElement = browser.find_element_by_link_text('이미지')
print(type(aElement))
aElement.click() # 마우스 클릭 이벤트 발생
except:
print('태그를 찾지 못했습니다.')
5. 폼의 데이터 전송하기
[실행 화면]
브러우저가 실행되어 Google의 이미지 검색으로 자동 이동하여 '스위스' 이미지를 검색함.
▷ crawler1.selenium3.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=8hwCWfjtDYWb8QWZq5eIDg&ved=0EKouCBUoAQ')
try:
# <a class="gb_P" data-pid="2" href="https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=6uABWdvbDcrJ0gSeoa7gCw&ved=0EKouCBUoAQ">이미지</a>
inputEle = browser.find_element_by_id('lst-ib')
inputEle.send_keys('스위스') # 문장 입력, 키보드 입력 이벤트 발생
# <button class="sbico-c" value="검색" aria-label="Google 검색" id="_fZl" name="btnG" type="submit"><span class="sbico _wtf _Qtf"><svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path></svg></span></button>
submitEle = browser.find_element_by_id('_fZl')
submitEle.submit() # 전송
except:
print('태그를 찾지 못했습니다.')
-------------------------------------------------------------------------------------
[실행 화면]
브러우저가 실행되어 Google의 이미지 검색으로 자동 이동하여 '스위스' 이미지를 검색함.
[실습] Google에서 이미지를 검색하여 자동으로 50개의 이미지를 저장하는 스크립트를 작상하세요.
6. Gmail 로그인하기
- Google 로그인은 보안 인증 강화로 추가 단계를 더 진행해야함.
▷ crawler1.google_image.py
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
6. Gmail 로그인하기
- Google 로그인은 보안 인증 강화로 추가 단계를 더 진행해야함.
[실행 화면]
브러우저가 실행되어 Google의 이미지 검색으로 자동 이동하여 '스위스' 이미지를 검색함.
▷ crawler1.selenium4.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin')
try:
# <input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="이메일 또는 휴대전화" name="identifier" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="">
inputEle = browser.find_element_by_id('identifierId')
inputEle.send_keys('testcell2010@gmail.com') # 키 입력
time.sleep(2)
# <div role="button" id="identifierNext" class="O0WRkf zZhnYe e3Duub C0oVfc Zp5qWd Hj2jlf" jscontroller="VXdfxd" jsaction="click:cOuCgd; mousedown:UX7yZ; mouseup:lbsD7e; mouseenter:tfO1Yc; mouseleave:JywGue;touchstart:p6p2H; touchmove:FwuNnf; touchend:yfqBxc(preventMouseEvents=true|preventDefault=true); touchcancel:JMtRjd;focus:AHmuwe; blur:O22p3e; contextmenu:mg9Pef;" jsshadow="" jsname="tJiF1e" aria-disabled="false" tabindex="0"><div class="Vwe4Vb MbhUzd" jsname="ksKsZd"></div><div class="ZFr60d CeoRYc"></div><content class="CwaK9"><span class="RveJvd snByac">다음</span></content></div>
nextEle = browser.find_element_by_id('identifierNext')
nextEle.click()
time.sleep(2) # 1초, 페이지 이동 시간을 부여함.
# <input type="password" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="current-password" spellcheck="false" tabindex="0" aria-label="비밀번호 입력" name="password" autocapitalize="off" autocorrect="off" dir="ltr" data-initial-dir="ltr" data-initial-value="">
passwordEle = browser.find_element_by_name('password')
passwordEle.send_keys("69017000") # 패스워드 입력
time.sleep(2)
submitEle = browser.find_element_by_id('passwordNext')
submitEle.click() # 로그인 버튼
except:
print('태그를 찾지 못했습니다.')
-------------------------------------------------------------------------------------
7. <IFRME>을 사용하는 경우
[실습] Daum, Naver, Twitter등에 로그인해보세요.
7. <IFRME>을 사용하는 경우
driver.switch_to.frame("loginframe")
elem = driver.find_element_by_id("id")
elem.send_keys("user_id")
elem = driver.find_element_by_id("pw")
elem.send_keys("user_pw")
elem.submit()
[실습] Daum, Naver, Twitter등에 로그인해보세요.
728x90
댓글