
Selenium을 이용해서 정보수집을 위한 웹 크롤링이나
간단한 단순 조작들을 자동화할 수 있다.
예시로 한 웹에 들어가서 자동으로 로그인하는 것 까지 과정을 만들어보자.
파이썬의 파이프를 이용해 셀레니움을 설치한다.
pip install selenium
그리고 크롬 브라우저의 드라이버가 필요하다
https://chromedriver.chromium.org/downloads
ChromeDriver - WebDriver for Chrome - Downloads
Current Releases If you are using Chrome version 99, please download ChromeDriver 99.0.4844.17 If you are using Chrome version 98, please download ChromeDriver 98.0.4758.80 If you are using Chrome version 97, please download ChromeDriver 97.0.4692.71 For o
chromedriver.chromium.org
메뉴 > 도움말 > 크롬 정보 탭을 통해 크롬 버전을 확인 후 받아주면 된다.
로그인할 테스트 사이트다
첫 시작 코드는 다음과 같다.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome("C:/test/chromedriver.exe") # 크롬드라이버 경로
u = '로그인할 URL'
driver.get(u)
크롬드라이버를 불러오고 절대 경로를 넣어준다.
개발할 파이썬 코드와 같은 폴더에 넣어뒀다면 그냥 "chromedriver.exe" 라고만 적어줘도 괜찮다.
다음 로그인을 하려면 ID와 PW를 입력해야한다.
A = "//input[@class='form-control']"
input_window = driver.find_element_by_xpath(A)
input_window.send_keys ("ID") # ID 입력
B = "//input[@class='form-control']"
input_window = driver.find_element_by_xpath(B)
input_window.send_keys ("PW") # PW 입력
A와 B는 그냥 이름을 정한 것이고 //input은 입력하라는 명령어 이다.
@class는 어디에 입력할 것인가인데
로그인 페이지의 개발자도구로 코드를 보게되면 form-control 이라고 되어있고 그것을 가져와 인식하게 만드는 것이다.
하지만 코드를 보게되면 form-control이 2개가 똑같이 되어있다.
그러면 @class가 아닌 @name으로 구분지으면 된다.
@id @type 등 다 가능하다.
이렇게 코드를 작성하면
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome("C:/test/chromedriver.exe")
u = '로그인 페이지'
driver.get(u)
A = "//input[@name='userID']"
input_window = driver.find_element_by_xpath(A)
input_window.send_keys ("admin")
B = "//input[@name='userPassword']"
input_window = driver.find_element_by_xpath(B)
input_window.send_keys ("1")
이 파이썬 파일을 실행한 결과는 다음과 같다
근데 로그인 버튼을 눌러서 다음으로 넘어가야한다
방법이 2가지가 있다
코드
B = "//input[@name='userPassword']"
input_window = driver.find_element_by_xpath(B)
input_window.send_keys ("1")
이후 비밀번호 뒤에 \n 을 붙여서 엔터를 치게끔 하는것
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome("C:/test/chromedriver.exe")
u = '로그인 페이지'
driver.get(u)
A = "//input[@name='userID']"
input_window = driver.find_element_by_xpath(A)
input_window.send_keys ("admin")
B = "//input[@name='userPassword']"
input_window = driver.find_element_by_xpath(B)
input_window.send_keys ("1\n") # 개행문자 \n 은 엔터치는 역할
다음 클릭 기능을하는 //a 를 추가해 로그인 버튼을 클릭하게끔 하는 것이다.
C = "//a[@id='로그인버튼']"
click_btn = driver.find_element_by_xpath(C)
click_btn.click()
난 간단한 개행문자 방법으로 코드를 완성했다.
그 결과 로그인이 잘된다
너무 빠른 로그인이 걱정된다면 아래와같은 코드를 중간중간 넣어서
딜레이를 줄 수도 있다.
from time import sleep
sleep(10) #초단위
driver.implicitly_wait(1) #초단위
'개발' 카테고리의 다른 글
[Python] 윈도우 프록시 On/Off 단축키 설정 도구 (0) | 2022.09.02 |
---|---|
[Python/Web] 파이썬 SQL injection 자동화 도구 (Blind/Time) (5) | 2022.08.29 |
[Python/Web] Selenium을 이용한 로그인 자동화 공격 (Brute Force Attack) (0) | 2022.08.25 |
[Python] 테서랙트(Tesseract OCR)을 통한 캡차(CAPTCHA) 우회 자동화 공격 (0) | 2022.04.15 |