오늘은 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을 불러와야 한다. 주소는 아래와 같다.
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()
다행히 잘 로그인이 된다.
'Python, R 분석과 프로그래밍 > 크롤링' 카테고리의 다른 글
[Python] 웹 크롤링 - G마켓 랭킹 크롤링 (0) | 2023.09.23 |
---|---|
[파이썬] 주식 정보 크롤링 하기, 삼성전자 사례를 중심으로 (0) | 2023.08.05 |
[크롤링] 파이썬으로 네이버 뉴스 크롤링 하기 - 7줄이면 충분합니다 (0) | 2023.07.30 |
[크롤링] 파이썬으로 네이버 뉴스 크롤링 하기 - 여러 뉴스를 한번에 (0) | 2023.07.30 |
[크롤링] 파이썬으로 네이버 뉴스 크롤링하기 - 뉴스 한개 (0) | 2023.07.30 |