구현 목표 (요구 사항)
구글(Chrome) 자동 로그인이 되도록 python 프로그램을 만든다.
Trouble Shooting(문제 상황 및 해결)
원래 selenium으로 만드려고 했으나 갓 구글이 거의 모든 경우를 막아놨다.
그래서 undetected_chromedriver 라이브러리를 활용했는데, 이 또한 구글이 거의 모든 경우를 막아놨다.
그래서 다소 복잡하지만 다른 방법으로 우회하였다. 계정에 저장되있는 Data로 로그인하는 방법이다.
import undetected_chromedriver as uc
import time
import chromedriver_autoinstaller
# 드라이버 자동 최신 버전 업데이트
chromedriver_autoinstaller.install()
profile = r"C:\Users\(자신의 계정 폴더명)\AppData\Local\Google\Chrome\User Data\(자신의 Profile 번호)"
options = uc.ChromeOptions()
#options.add_argument("--incognito") # 시크릿 모드
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-setuid-sandbox")
options.add_argument(f"--user-data-dir={profile}")
driver = uc.Chrome(options=options, use_subprocess=True)
driver.get("https://myaccount.google.com/")
print("로직완료")
time.sleep(10000)
먼저 이 코드를 돌리기 위해 초기 세팅(profile 변수 알아내기) 해야 한다. 아래 A)~G)까지를 따라하면 된다.
A) 먼저 Chrome 브라우저를 열어 자신의 계정을 로그인 합니다.
B) 구글 계정을 동기화합니다.
C) 구글 프로필을 추가합니다.
D) 바탕화면을 보면 이제 다음과 같이 계정이 포함된 크롬 바로가기가 다음과 같이 나옵니다.
주의 : 일반 Chrome 브라우저 바로가기는 아닙니다.
E) 해당 바탕화면에 [마우스 우클릭] > [속성]을 선택하면 아래와 같은 화면이 나옵니다.
이 중에서 [대상]을 살펴보면 끝 부분에 Profile 17 과 같이 Profile과 번호가 나옵니다. Profile 번호를 기억해야 합니다.
F) [로컬 디스크 C 드라이브] > [사용자(또는 Users)] 로 이동하여 자신의 파일 이름을 확인합니다.
G) 이제 제공했던 파이썬 코드로 가서 profile 변수 값을 자신에게 맞게 수정합니다.
형태 : r"C:\Users\(F에서 찾았던 파일 이름)\AppData\Local\Google\Chrome\User Data\(E에서 찾았던 Profile과 번호)“
예시 : E에서 ‘Profile 17’을 찾고, F에서 ‘hyeonseok’ 이라는 사용자 파일을 찾았습니다.
r"C:\Users\hyeonseok\AppData\Local\Google\Chrome\User Data\Profile 19"
이제 profile 변수에 알맞게 넣어 코드를 실행하면 된다.
오류상황 1 : 단, 코드 최초 실행 시 구글 자동 로그인이 되지 않는다면 코드를 작동시킨 다음 그 브라우저에 구글 로그인을 진행시켜주고 브라우저와 프로그램 작동을 끈 다음 다시 실행하면 된다. 이때 로그인을 하려고 해도 바로 꺼질텐데, 이런 경우 아래 코드를 실행시켜주면 된다.
import undetected_chromedriver as uc
import time
import chromedriver_autoinstaller
# 드라이버 자동 최신 버전 업데이트
chromedriver_autoinstaller.install()
profile = r"C:\Users\(자신의 계정 폴더명)\AppData\Local\Google\Chrome\User Data\(자신의 Profile 번호)"
options = uc.ChromeOptions()
#options.add_argument("--incognito") # 시크릿 모드
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-setuid-sandbox")
options.add_argument(f"--user-data-dir={profile}")
driver = uc.Chrome(options=options, use_subprocess=True)
time.sleep(10000)
driver.get("https://myaccount.google.com/")
print("로직완료")
time.sleep(10000)
오류상황 2 : 프로그램을 실행 시키니 Chrome 사용자 선택 화면이 나올 때
아래 이미지처럼 Chrome 사용자 선택 창이 보인다면 우측 하단 '시작 시 표시' 버튼의 체크 표시를 풀고 다시 브라우저와 코드를 종료했다가 실행해봅니다.
구현 영상