from argparse import ArgumentParser from glob import glob from os.path import expanduser from platform import system from sqlite3 import OperationalError, connect try: from instaloader import ConnectionException, Instaloader except ModuleNotFoundError: raise SystemExit("Instaloader not found.\n pip install [--user] instaloader") def get_cookiefile(): default_cookiefile = { "Windows": "~/AppData/Roaming/Mozilla/Firefox/Profiles/*/cookies.sqlite", "Darwin": "~/Library/Application Support/Firefox/Profiles/*/cookies.sqlite", }.get(system(), "~/.mozilla/firefox/*/cookies.sqlite") cookiefiles = glob(expanduser(default_cookiefile)) if not cookiefiles: raise SystemExit("No Firefox cookies.sqlite file found. Use -c COOKIEFILE.") return cookiefiles[0] def import_session(cookiefile, sessionfile): print("Using cookies from {}.".format(cookiefile)) conn = connect(cookiefile) try: cookie_data = conn.execute( "SELECT name, value FROM moz_cookies WHERE baseDomain='instagram.com'" ) except OperationalError: cookie_data = conn.execute( "SELECT name, value FROM moz_cookies WHERE host LIKE '%instagram.com'" ) instaloader = Instaloader(max_connection_attempts=1) instaloader.context._session.cookies.update(cookie_data) username = instaloader.test_login() if not username: raise SystemExit("Not logged in. Are you logged in successfully in Firefox?") print("Imported session cookie for {}.".format(username)) instaloader.context.username = username instaloader.save_session_to_file(sessionfile) if __name__ == "__main__": p = ArgumentParser() p.add_argument("-c", "--cookiefile") p.add_argument("-f", "--sessionfile") args = p.parse_args() try: import_session(args.cookiefile or get_cookiefile(), args.sessionfile) except (ConnectionException, OperationalError) as e: raise SystemExit("Cookie import failed: {}".format(e))