상세 컨텐츠

본문 제목

[파이썬] 쿠기 저장해서 사이트 로그인 과정 생략하기

코딩

by 땡감 2022. 2. 20. 13:34

본문

반응형

selenium으로 크롤링을 하다보면 가장 번거로운 작업 중 하나가 로그인이다.

특히 인스타그램은 매번 이중 인증을 해야해서 selenium으로 크롤링 하기가 여간 까다로운게 아니다.

Impossible is nothing!

이번에 인스타그램을 포함한 이중 인증이 필요한 사이트를 쉽게 로그인 하는 방법에 대해 포스팅해보겠다.

 

이중인증을 생략하는 방법은 쿠키 정보를 활용해야 한다.

과정을 나열하면 다음과 같다.

  • selenium으로 인스타그램을 방문하여 수동로그인 (최초 1회)
  • 로그인 완료 후 해당 세션의 쿠기정보를 저장
  • 추후 인스타그램 방문시 저장했던 쿠기정보 활용하여 로그인

위의 이미지는 최초 1회 수동으로 로그인하여 이중 인증을 직접하는 과정이다.

 

최초 1회 수동으로 이중인증 과정을 거쳐 로그인을 했다면 로그인 정보를 저장해야한다.

인스타그램의 경우 위처럼 정보저장 버튼을 누르면 된다.

 

pickle.dump(driver.get_cookies(), open("instagram_cookies.pkl", "wb")) #최초 로그인 후 쿠키 저장시에만

그 뒤 selenium 창을 닫지 말고 로그인 되어 있는 상태에서 위의 코드로 해당 세션의 쿠키정보를 저장한다.

이 과정은 쿠키정보를 파일로 저장하는 과정이다.

 

  cookies = pickle.load(open("instagram_cookies.pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)

저장한 쿠기정보는 위의 코드로 불러올 수 있다.

한가지 유의할점은 사이트의 url이 동일해야 한다는거다.

예를 들어 쿠키를 저장했던 사이트의 url이 www.test.com 이면 쿠키를 불러오는 url도 www.test.com 이여야한다.

더불어 사이트를 먼저 방문하고 쿠키를 불러와야지, 쿠키를 불러오고 해당 사이트를 방문하여 오류가 발생한다.

순서를 정리하면 아래와 같다.

  • 사이트 방문하여 수동 로그인
  • 수동 로그인 된 상태에서 쿠키 저장 (최초 1회만)
  • 다시 사이트 방문하여 저장한 쿠키 불러오기

 

url = 'https://www.instagram.com/?hl=ko'

def exec_chrom():
    options = Options()
    userAgent = UserAgent().random
    options.add_argument(f'user-agent={userAgent}')
    options.add_argument('--incognito')
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
    driver.maximize_window()
    driver.get(url)
    return driver


def login(driver):
    #time.sleep(120)
    #pickle.dump(driver.get_cookies(), open("instagram_cookies.pkl", "wb")) #최초 로그인 후 쿠키 저장시에만
    cookies = pickle.load(open("instagram_cookies.pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.get(url)

나같은 경우는 위처럼 크롬을 실행하는 함수와 로그인을 하는 따로 정의해서 사용하고 있다.

최초 쿠키를 저장하는 시간은 인증문자가 오는시간까지 넉넉해야하므로 60 ~ 120초 정도로 설정해야 한다.

그럼 끝.

반응형

관련글 더보기

댓글 영역