본문 바로가기
프로그래밍/Python

[selenium 셀레니움]카X오 로그인 하기

by Mr.noobiest 2023. 9. 15.

저번엔 네이버 로그인을 selenium을 활용하여 로그인  하는 방안을 테스트 해보았다.

 

https://mrnoobiest.tistory.com/201

 

[selenium]네이버 로그인시 자동방지 이미지 안뜨게 우회하기

거의 대부분의 사이트는 로그인 할때 네이버,구글,페이스북 같은 SNS 로그인을 많이 실행합니다. 로그인 유지시 크롬에 로그인 정보가 저장되어 별도로 로그인 작업을 진행할 필요가 없지만, 셀

mrnoobiest.tistory.com

 

요번엔 카X오 로그인을 시도해보려고 한다.

kaXo login  api를 사용해서 자동으로 로그인하는 방법도 있지만, selenium을 사용해서 로그인을  하려는 것이니 생략한다.

API를 사용해서 로그인 할 경우 아래 링크에서 도움을 받으면  될 것 같다(굉장히 상세하게 설명이 되어 있어서 따라하기 좋다.)

https://notspoon.tistory.com/34

 

카카오 로그인 쉽게 구현하기 1편 - Kakao Developers 설정

카카오 로그인 API 클라이언트 입장에서 수많은 사이트의 모든 아이디 비밀번호를 기억하기는 쉽지 않다. 또한 서비스를 제공해주는 리소스 오너 또한 안전하게 보관하여야 하기 때문에 부담된

notspoon.tistory.com

카X오 로그인시 발생하는 문제는 다음과 같다.

 

1) 네이버 처럼 복사 붙여넣기를 하고나서 다음 input을 클릭하면, 입력해두었던 id가 지워진다.

2) 마찬가지로 send_keys로 일괄 입력시 동일하게 입력해둔 text가 지워진다.

 

아마 id나 pw를 타이핑할때 타이핑 간격을 측정하고, 측정된 타이핑 속도가 "인간의 범주"가 아닐때 지우는 코드가 있는것 같다.

그러면 해결방법은 아주 간단하다.

 

"인간의 범주로 타이핑 하면 된다"

 

send_keys == 타이핑이고, 입력 문자를 딜레이를 약간 주어 1글자씩 입력하도록 하면 될 것 같다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pyautogui
import pyperclip
import io



temp_url='로그인하려는 URL'
chrome_options = webdriver.ChromeOptions()

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(temp_url)

#kaXO 로그인 버튼 찾기(텍스트로)
try:
    # 3초 동안 대기하여 특정 요소가 나타나면 클릭
    element = WebDriverWait(driver, 3).until(
        EC.presence_of_element_located((By.XPATH, '//span[text()="카카오로 3초 만에 시작하기"]'))
    )
    element.click()
    
    # 클릭 후 다음 동작 수행
    username = driver.find_element(By.NAME, 'loginId')
    pw = driver.find_element(By.NAME, 'password')
    input_id="입력할 ID"
    input_pw="입력할 비밀번호"

    def typing(element, keyword, delay):
        for c in keyword:
            element.send_keys(c)
            time.sleep(delay / 1000)
    typing(username, input_id, 100)
    typing(pw, input_pw, 100)
    
	#입력이 완료되면 로그인 버튼 누르기
    element = WebDriverWait(driver, 3).until(
        EC.presence_of_element_located((By.XPATH, '//button[text()="로그인"]'))
    )
    element.click()

except:
    print('텍스트를 찾을 수 없습니다.')

 

입력해야 하는 부분은 temp_url

input_id

input_pw 부분이다.

 

def typing()이 실행되면서 일정 간격으로 사람이 타이핑하듯이 입력을 하면 다른 input을 눌렀을대 사라지지 않는다.

 

 

.끝

728x90
반응형