insta_browser/auth.py
import pickle
import time
import tempfile
import os
import selenium.common.exceptions as excp
LOGIN_URL = 'https://instagram.com/accounts/login/'
def auth_with_cookies(browser, logger, login, cookie_path=tempfile.gettempdir()):
"""
Authenticate to instagram.com with cookies
:param browser: WebDriver
:param logger:
:param login:
:param cookie_path:
:return:
"""
logger.save_screen_shot(browser, 'login.png')
try:
logger.log('Trying to auth with cookies.')
cookies = pickle.load(open(os.path.join(cookie_path, login + '.pkl'), "rb"))
for cookie in cookies:
browser.add_cookie(cookie)
browser.refresh()
if check_if_user_authenticated(browser):
logger.log("Successful authorization with cookies.")
return True
except:
pass
logger.log("Unsuccessful authorization with cookies.")
return False
def auth_with_credentials(browser, logger, login, password, cookie_path=tempfile.gettempdir()):
if browser.current_url != LOGIN_URL:
browser.get(LOGIN_URL)
time.sleep(2)
logger.log('Trying to auth with credentials.')
login_field = browser.find_element_by_name("username")
login_field.clear()
logger.log("--->AuthWithCreds: filling username.")
login_field.send_keys(login)
password_field = browser.find_element_by_name("password")
password_field.clear()
logger.log("--->AuthWithCreds: filling password.")
password_field.send_keys(password)
submit = browser.find_element_by_css_selector("form button")
logger.log("--->AuthWithCreds: submitting login form.")
submit.submit()
time.sleep(3)
logger.log("--->AuthWithCreds: saving cookies.")
pickle.dump([browser.get_cookie('sessionid')], open(os.path.join(cookie_path, login + '.pkl'), "wb"))
if check_if_user_authenticated(browser):
logger.log("Successful authorization with credentials.")
return True
logger.log("Unsuccessful authorization with credentials.")
return False
def check_if_user_authenticated(browser):
try:
browser.find_element_by_css_selector(".logged-in")
return True
except excp.NoSuchElementException:
return False