Browse Source

More refactoring into modules

pull/23/head
wes 5 years ago
parent
commit
81fd9329f9
  1. 15
      deletefb/deletefb.py
  2. 57
      deletefb/tools/login.py
  3. 50
      deletefb/tools/wall.py

15
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()

57
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

50
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()

Loading…
Cancel
Save