지난 주에 진행되었던 “AI로 데이터 수집하기” 특강 실습 주제 였던 “GPters 사이트 로그인”을 직접 해 봤습니다.
이번에는 ChatGPT가 아니라 Bard의 도움을 받으면서 Jupyter notebook을 이용하였습니다.
특강 시간에 알려 주신 부분을 참고하면서 최대한 Bard에게 의지한다는 느낌으로 진행해 보았습니다.
1) 들어가기
(사전에 selenium이 설치되어 있어야 함.)
pip install selenium
---
# 필요한 라이브러리를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 크롬 드라이버를 설정합니다.
driver = webdriver.Chrome()
# 로그인 페이지로 이동합니다.
driver.get("https://login.circle.so/sign_in#email")
# 사용자 이름과 비밀번호를 입력합니다.
username = "your_username"
password = "your_password"
username_field = driver.find_element_by_id("email")
username_field.send_keys(username)
password_field = driver.find_element_by_id("password")
password_field.send_keys(password)
# 로그인 버튼을 클릭합니다.
login_button = driver.find_element_by_id("submit")
login_button.click()
# 로그인 성공 여부를 확인합니다.
if driver.current_url == "https://app.circle.so/":
print("로그인 성공")
else:
print("로그인 실패")
이 코드는 다음과 같은 단계를 수행합니다.
필요한 라이브러리를 가져옵니다.
크롬 드라이버를 설정합니다.
로그인 페이지로 이동합니다.
사용자 이름과 비밀번호를 입력합니다.
로그인 버튼을 클릭합니다.
로그인 성공 여부를 확인합니다.
사용자 이름과 비밀번호는 your_username과 your_password라는 변수에 저장됩니다. 이러한 변수는 코드를 실행하기 전에 사용자의 실제 사용자 이름과 비밀번호로 바꾸어야 합니다.
코드를 실행하면 다음과 같은 출력이 표시됩니다.
로그인 성공
로그인에 실패하면 다음과 같은 출력이 표시됩니다.
로그인 실패
이 코드를 수정하여 필요에 따라 기능을 확장할 수 있습니다. 예를 들어, 로그인에 실패한 경우 오류 메시지를 출력하도록 코드를 수정할 수 있습니다.
(이 코드를 복사해서 Jupyter notebook에 넣고, 아이디와 암호를 수정하고 실행)
2. 실행을 시켰더니.. 에러가 나옵니다.
해당 오류는 Selenium의 버전이 너무 낮아 발생하는 문제입니다. Selenium의 최신 버전에서는 find_element_by_id 대신 find_element(by=By.ID, value="id_값")를 사용해야 합니다. 따라서 위 코드를 다음과 같이 수정하면 오류가 발생하지 않습니다.
# 필요한 라이브러리를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 크롬 드라이버를 설정합니다.
driver = webdriver.Chrome()
# 로그인 페이지로 이동합니다.
driver.get("https://login.circle.so/sign_in#email")
# 사용자 이름과 비밀번호를 입력합니다.
username = "your_username"
password = "your_password"
username_field = driver.find_element(by=By.ID, value="email")
username_field.send_keys(username)
password_field = driver.find_element(by=By.ID, value="password")
password_field.send_keys(password)
# 로그인 버튼을 클릭합니다.
login_button = driver.find_element(by=By.ID, value="submit")
login_button.click()
# 로그인 성공 여부를 확인합니다.
if driver.current_url == "https://app.circle.so/":
print("로그인 성공")
else:
print("로그인 실패")
이렇게 수정한 코드를 실행하면 오류 없이 로그인이 성공합니다.
※ 실제 username_field, password_field, login_button 속성 정보 반영(개발자 도구 F12)
username_field —> “user_email”
password_field —> “user_password”
login_button : “driver.find_element(by=By.TYPE, value="submit")”
# 필요한 라이브러리를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 크롬 드라이버를 설정합니다.
driver = webdriver.Chrome()
# 로그인 페이지로 이동합니다.
driver.get("https://login.circle.so/sign_in#email")
# 사용자 이름과 비밀번호를 입력합니다.
username = "your_username"
password = "your_password"
username_field = driver.find_element(by=By.ID, value="user_email")
username_field.send_keys(username)
password_field = driver.find_element(by=By.ID, value="user_password")
password_field.send_keys(password)
/
# 로그인 버튼을 클릭합니다.
login_button = driver.find_element(by=By.TYPE, value="submit")
login_button.click()
# 로그인 성공 여부를 확인합니다.
if driver.current_url == "https://app.circle.so/":
print("로그인 성공")
else:
print("로그인 실패")
실행 결과 “로그인 실패”가 출력이 되나, 실제로 로그인은 성공하게 나옵니다. 어떤 상황인지 실제 브라우저(크롬)를 지켜 보니, “sign in”버튼을 클릭 후 로그인 성공 페이지가 나오는데까지 몇 초 간의 딜레이가 있었습니다. 그래서, 중간에 5초 동안 대기 후에 로그인 성공 여부를 출력하도록 코드를 수정. \
# 필요한 라이브러리를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 크롬 드라이버를 설정합니다.
driver = webdriver.Chrome()
# 로그인 페이지로 이동합니다.
driver.get("https://login.circle.so/sign_in#email")
# 사용자 이름과 비밀번호를 입력합니다.
username = "your_username"
password = "your_password"
username_field = driver.find_element(by=By.ID, value="email")
username_field.send_keys(username)
password_field = driver.find_element(by=By.ID, value="password")
password_field.send_keys(password)
# 로그인 버튼을 클릭합니다.
login_button = driver.find_element(by=By.CSS_SELECTOR, value=".rounded-md.font-bold.leading-5.transition-colors.duration-150.bg-brand.text-brand-inverted.hover:opacity-90.disabled:bg-disabled.leading-normal.py-3.px-8.w-full.disabled:cursor-not-allowed")
login_button.click()
# 5초 대기
time.sleep(5)
# 로그인 성공 여부를 확인합니다.
if driver.current_url == "https://app.circle.so/":
print("로그인 성공")
else:
print("로그인 실패")
ChatGPT도 그렇고, Bard도 뻔히 에러가 날 것을 알면서도 코드를 자신 있게 제시하는 경우가 있기는 하지만, 이번의 경우도 오류 나는 것을 ChatGPT나 Bard와 차근 차근 묻고 답을 구하는 방식으로 몇 번만 진행하면 별 무리 없이 원하는 결과를 얻을 수 있었던 것 같습니다.