저번엔 네이버 로그인을 selenium을 활용하여 로그인 하는 방안을 테스트 해보았다.
https://mrnoobiest.tistory.com/201
요번엔 카X오 로그인을 시도해보려고 한다.
kaXo login api를 사용해서 자동으로 로그인하는 방법도 있지만, selenium을 사용해서 로그인을 하려는 것이니 생략한다.
API를 사용해서 로그인 할 경우 아래 링크에서 도움을 받으면 될 것 같다(굉장히 상세하게 설명이 되어 있어서 따라하기 좋다.)
https://notspoon.tistory.com/34
카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
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[python,tistory,github actions]매일 구글 트랜드 키워드 Top 10을 사용하여 뉴스글 자동 생성하기 -1(계획) (0) | 2023.10.04 |
---|---|
[Django]chatgpt와 함께하는 dJango 웹페이지 만들어보기 -1 (0) | 2023.09.22 |
[selenium 셀레니움]네이버 로그인시 자동방지 이미지 안뜨게 우회하기 (0) | 2023.09.13 |
[selenium]셀레니움 설치시 chrome driver를 못 찾을때 (0) | 2023.09.13 |
[Chromedriver]unknown error: DevToolsActivePort file doesn't exist (0) | 2023.07.11 |