diff --git a/deletefb/deletefb.py b/deletefb/deletefb.py index a2a1aa0..84a9c75 100755 --- a/deletefb/deletefb.py +++ b/deletefb/deletefb.py @@ -1,8 +1,9 @@ #! /usr/bin/env python import argparse -import time import getpass + +from deletefb.tools.login import login import deletefb.tools.wall as wall def run_delete(): @@ -47,12 +48,14 @@ def run_delete(): args_user_password = args.password or getpass.getpass('Enter your password: ') - wall.delete_posts( - user_email_address=args.email, - user_password=args_user_password, - user_profile_url=args.profile_url, - is_headless=args.is_headless + driver = login( + user_email_address=args.email, + user_password=args_user_password, + user_profile_url=args.profile_url, + is_headless=args.is_headless ) + wall.delete_posts(driver) + if __name__ == "__main__": run_delete() diff --git a/deletefb/tools/login.py b/deletefb/tools/login.py new file mode 100644 index 0000000..d1c81df --- /dev/null +++ b/deletefb/tools/login.py @@ -0,0 +1,57 @@ +import time + +from selenium.webdriver.chrome.options import Options +from seleniumrequests import Chrome +from selenium.webdriver.common.action_chains import ActionChains +from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException + +def login(user_email_address, + user_password, + user_profile_url, + is_headless): + """ + Attempts to log into Facebook + Returns a driver object + + user_email_address: str Your Email + user_password: str Your password + user_profile_url: str Your profile URL + + """ + # The Chrome driver is required because Gecko was having issues + chrome_options = Options() + prefs = {"profile.default_content_setting_values.notifications": 2, 'disk-cache-size': 4096} + chrome_options.add_experimental_option("prefs", prefs) + chrome_options.add_argument("start-maximized") + + if is_headless: + chrome_options.add_argument('--headless') + chrome_options.add_argument('--disable-gpu') + chrome_options.add_argument('log-level=2') + + driver = Chrome(options=chrome_options) + driver.implicitly_wait(10) + + driver.get("https://facebook.com") + + email = "email" + password = "pass" + login = "loginbutton" + + emailelement = driver.find_element_by_name(email) + passwordelement = driver.find_element_by_name(password) + + emailelement.send_keys(user_email_address) + passwordelement.send_keys(user_password) + + loginelement = driver.find_element_by_id(login) + loginelement.click() + + if "Two-factor authentication" in driver.page_source: + # Allow time to enter 2FA code + print("Pausing to enter 2FA code") + time.sleep(20) + print("Continuing execution") + driver.get(user_profile_url) + + return driver diff --git a/deletefb/tools/wall.py b/deletefb/tools/wall.py index bb23e16..0093fce 100644 --- a/deletefb/tools/wall.py +++ b/deletefb/tools/wall.py @@ -1,3 +1,5 @@ +import time + from selenium.webdriver.chrome.options import Options from seleniumrequests import Chrome from selenium.webdriver.common.action_chains import ActionChains @@ -6,51 +8,10 @@ from selenium.common.exceptions import NoSuchElementException, StaleElementRefer MAX_POSTS = 5000 SELENIUM_EXCEPTIONS = (NoSuchElementException, StaleElementReferenceException) -def delete_posts(user_email_address, - user_password, - user_profile_url, - is_headless): +def delete_posts(driver): """ - user_email_address: str Your Email - user_password: str Your password - user_profile_url: str Your profile URL + Deletes or hides all posts from the wall """ - # The Chrome driver is required because Gecko was having issues - chrome_options = Options() - prefs = {"profile.default_content_setting_values.notifications": 2, 'disk-cache-size': 4096} - chrome_options.add_experimental_option("prefs", prefs) - chrome_options.add_argument("start-maximized") - - if is_headless: - chrome_options.add_argument('--headless') - chrome_options.add_argument('--disable-gpu') - chrome_options.add_argument('log-level=2') - - driver = Chrome(options=chrome_options) - driver.implicitly_wait(10) - - driver.get("https://facebook.com") - - email = "email" - password = "pass" - login = "loginbutton" - - emailelement = driver.find_element_by_name(email) - passwordelement = driver.find_element_by_name(password) - - emailelement.send_keys(user_email_address) - passwordelement.send_keys(user_password) - - loginelement = driver.find_element_by_id(login) - loginelement.click() - - if "Two-factor authentication" in driver.page_source: - # Allow time to enter 2FA code - print("Pausing to enter 2FA code") - time.sleep(20) - print("Continuing execution") - driver.get(user_profile_url) - for _ in range(MAX_POSTS): post_button_sel = "_4xev" @@ -81,6 +42,3 @@ def delete_posts(user_email_address, # Required to sleep the thread for a bit after using JS to click this button time.sleep(5) driver.refresh() - - -