'셀레니움'에 해당되는 글 1건

  1. 2023.08.05 [크롤링] Selenium 으로 네이버 로그인 하기
반응형

오늘은 Selenium으로 네이버 로그인 하는 연습을 해 보자.

Selenium이란?

웹 애플리케이션을 테스트하거나 웹 브라우징을 자동화하기 위한 도구와 라이브러리다. 주로 웹 페이지를 제어하고 상호작용하며 웹 사이트를 테스트하거나 데이터를 수집하는 등의 작업에 사용된다. Selenium은 다양한 프로그래밍 언어로 지원되며, 파이썬에서도 많이 사용된다. Selenium의 주요 기능과 특징은 다음과 같다:
1. 웹 브라우저 제어: Selenium을 사용하여 웹 브라우저(예: Chrome, Firefox, Edge 등)를 자동으로 제어할 수 있다. 이를 통해 웹 페이지를 열거나 조작할 수 있다.
2. 웹 페이지 상호작용: Selenium을 통해 웹 페이지의 버튼 클릭, 입력 필드 입력, 폼 제출 등의 상호작용을 자동으로 수행할 수 있다.
3. 웹 스크레이핑 및 데이터 수집: Selenium을 이용하여 웹 페이지의 데이터를 추출하고 원하는 정보를 수집할 수 있다.
4. 웹 테스트 자동화: 웹 애플리케이션의 테스트를 자동화하는 데 사용된다. 웹 페이지의 기능과 동작을 테스트하고 결과를 확인하는데 활용된다.
5. 다양한 언어와 테스트 프레임워크 지원: Selenium은 다양한 프로그래밍 언어와 테스트 프레임워크를 지원하며, 파이썬에서는 selenium 라이브러리를 사용하여 Selenium을 활용할 수 있다.

Selenium은 웹 페이지 상호작용을 자동화하거나 웹 애플리케이션을 테스트하는 데 유용한 강력한 도구로, 웹 개발자나 테스트 엔지니어 등이 자동화 작업을 수행할 때 많이 활용된다.

 

네이버 사이트를 로그인 하기 위한 전체 파이썬 코드는 아래와 같다. (아래 코드는 네이버가 봇임을 감지하고 로그인이 되지 않습니다. 이를 회피하기 위한 코드는 맨 아래 내용을 확인해 주세요)

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/')

#ID 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
id.click()
id.send_keys('ID를 입력하세요')

#PW 입력
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pw.click()
pw.send_keys('PW를 입력하세요')

#로그인
login_btn = driver.find_element(By.CSS_SELECTOR, "#log\.login")
login_btn.click()

 

1. 필요한 패키지 불러오기

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

 

2. 네이버 사이트 불러오기

www.naver.com에서 로그인 부튼을 누르면 아래와 같은 화면으로 넘어간다. 이 부분의 URL을 불러와야 한다. 주소는 아래와 같다. 

 

 

네이버

네이버에 로그인 하고 나를 위한 다양한 서비스를 이용해 보세요

nid.naver.com

3. 네이버 로그인 정보 확인하기 - ID / PW

자 여기서 윈도우에서는 F12, 맥에서는 control키와 클릭을 함께 눌러 태그 정보를 확인해 보자.

 

네이버 화면을 키고 ID 부분의 태그를 알아보니 id="id"를 확인할 수 있다. Selenium에서는 find_element_by_id 함수를 이용해서 id 값을 가져올 수 있다.

 

위는 pw의 태그 정보를 볼 수 있다.  id/pw 부분 모두 우클릭을 통해 copy selector를 하여 css copy를 하자. 해당 파이썬 코드는 아래와 같다.

#ID 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
id.click()
id.send_keys('ID를 입력하세요')

#PW 입력
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pw.click()
pw.send_keys('PW를 입력하세요')

 

자! ID와 PW를 입력하였으면 이제 로그인 버튼을 눌러줘야 한다.

네이버의 로그인 부분에서 우클릭을 하고 css copy를 하면 아래와 같다.

login_btn = driver.find_element(By.CSS_SELECTOR, "#log\.login")
login_btn.click()

자 이제 모든게 마무리 되었다. 그러면 실행을 해 보자. 그랬더니!! 동작을 한다.

잠시 후 크롬 창 하나가 뜨면서 네이버 화면이 떴고, 아이디와 패스워드 항목란에 입력이 되면서 로그인 버튼이 자동으로 눌리더니 네이버에서는 사람이 아닌 봇임을 감지하고 아래 처럼 화면이 떴다.

혹시나 해서 id/pw 입력란에 time.sleep 함수를 사용해서 입력 시간을 늦춰보았지만 소용은 없었다. 네이버에서이를 잘 탐지 하였다. 방법은 뭘까? 이른바 복붙 신공이다. 아이디와 비번을 입력/복사하는 형태로 로그인 하는 방법이다.

이 방법은 통할까 싶었는데 다행히 잘 통하였다. 그 방법은 아래와 같다.

 

처음 코드와 달리 pyperclip을 불러왔고, time은 id/pw 입력시간 간 간격을 두기 위해 추가로 불러왔다.

 

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

import pyperclip
import time

driver = webdriver.Chrome()
driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/')

#ID 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
id.click()
pyperclip.copy('ID를 입력하세요')
id.send_keys(Keys.COMMAND,'v') #윈도우면 command 대신 ctrl
time.sleep(3)

#PW 입력
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pw.click()
pyperclip.copy('PW를 입력하세요')
pw.send_keys(Keys.COMMAND,'v') #윈도우면 command 대신 ctrl
time.sleep(3)

#로그인
login_btn = driver.find_element(By.CSS_SELECTOR, "#log\.login")
login_btn.click()

다행히 잘 로그인이 된다. 

반응형
Posted by 마르띤
,