거의 대부분의 사이트는 로그인 할때 네이버,구글,페이스북 같은 SNS 로그인을 많이 실행합니다.
로그인 유지시 크롬에 로그인 정보가 저장되어 별도로 로그인 작업을 진행할 필요가 없지만,
셀레니움으로 열게된 크롬은 로그인 정보가 없기때문에 로그인 작업을 진행해야 합니다.
그중 네이버 로그인을 할때 많이 발생할 수 있는 경우를 따져 코드를 작성하였다.
+
로그인 방지 이미지가 뜨지 않도록 하는 코드도 추가
다음은 로그인 작업 진행 시 꼭 필요한 기능이다.
1) 네이버 로그인 버튼을 클릭 시 새로운 탭에서 로그인을 해야하는 경우(driver2생성 필요)
2) 우회 방지가 발생하지 않도록 해야 한다.
from selenium import webdriver
import pyautogui
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import pyperclip
from selenium.webdriver.common.keys import Keys
import platform
import time
//크롬 드라이버 옵션 설정
chrome_options = webdriver.ChromeOptions()
//새로운 창 생성
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get('https://naver.com')
//현재 열려 있는 창 가져오기
current_window_handle = driver.current_window_handle
//<a href class='MyView-module__link_login___HpHMW'> 일때 해당 링크 클릭
driver.find_element(By.XPATH, "//a[@class='MyView-module__link_login___HpHMW']").click()
//새롭게 생성된 탭의 핸들을 찾습니다
//만일 새로운 탭이 없을경우 기존 탭을 사용합니다.
new_window_handle = None
for handle in driver.window_handles:
if handle != current_window_handle:
new_window_handle = handle
break
else:
new_window_handle = handle
# 새로운 탭을 driver2로 지정합니다
driver.switch_to.window(new_window_handle)
driver2 = driver
username = driver2.find_element(By.NAME, 'id')
pw = driver2.find_element(By.NAME, 'pw')
input_id="ID를 입력하세요"
input_pw="비밀번호를 입력하세요."
//ID input 클릭
username.click()
//js를 사용해서 붙여넣기 발동 <- 왜 일부러 이러냐면 pypyautogui랑 pyperclip를 사용해서 복붙 기능을 했는데 운영체제때문에 안되서 이렇게 한거다.
driver2.execute_script("arguments[0].value = arguments[1]", username, input_id)
time.sleep(1)
pw.click()
driver2.execute_script("arguments[0].value = arguments[1]", pw, input_pw)
time.sleep(1)
//입력을 완료하면 로그인 버튼 클릭
driver2.find_element(By.CLASS_NAME, "btn_login").click()
이렇게 하면 자동 방지가 발생하지 않고 정상적으로 로그인 된다.
끝.
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Django]chatgpt와 함께하는 dJango 웹페이지 만들어보기 -1 (0) | 2023.09.22 |
---|---|
[selenium 셀레니움]카X오 로그인 하기 (0) | 2023.09.15 |
[selenium]셀레니움 설치시 chrome driver를 못 찾을때 (0) | 2023.09.13 |
[Chromedriver]unknown error: DevToolsActivePort file doesn't exist (0) | 2023.07.11 |
[Python]global 변수 선언하기 (0) | 2023.05.25 |