diff --git a/README.md b/README.md index b45ca48..90a8cda 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,63 @@ pip install -r requirements.txt * Set your own **username**, **password**, **Session ID**, **CSRF Token**, and the **username of the person who has the posts you want to download** in the script you intend to use and run the script. You'll see that the posts start to download in the directory where you run the script. * Additionally, when you run the script, it saves your cookies to a text file named `cookies.txt`. This means you won't need to use your credentials in subsequent runs. The script logs in with the cookie file in second and subsequent executions. + +
+ +* If you're using the firefox browser, you can use the code below to get the `cookies.txt` file. + +```py +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(f"file:{cookiefile}?immutable=1", uri=True) + 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)) +```