Browse Source

Refactor into a proper package

pull/4/head
Wesley Kerfoot 6 years ago
parent
commit
0780e637ec
  1. 7
      README.md
  2. 64
      deletefb.py
  3. 0
      deletefb/__init__.py
  4. 98
      deletefb/deletefb.py
  5. 2
      requirements.txt
  6. 8
      setup.py

7
README.md

@ -2,11 +2,8 @@
* Make sure that you have Google Chrome installed and that it is up to date * Make sure that you have Google Chrome installed and that it is up to date
* Install python 3.x (tested on python 3.7) along with pip * Install python 3.x (tested on python 3.7) along with pip
* `virtualenv -p $(which python3) ./venv` * `pip3 install --user delete-facebook-posts`
* `source venv/bin/activate` * Run `deletefb -E "youremail@example.org" -P "yourfacebookpassword" -U "https://www.facebook.com/your.profile.url"
* `pip3 install -r requirements.txt`
* Edit `deletefb.py` to include your email, password, and profile URL.
* Run `python3 deletefb.py` with your virtual environment activated.
* Wait a long time * Wait a long time
* Say goodbye to your Facebook posts! * Say goodbye to your Facebook posts!

64
deletefb.py

@ -1,64 +0,0 @@
#! /usr/bin/env python
from seleniumrequests import Chrome
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
import time
EMAIL_ADDRESS = "Your Email Here"
PASSWORD = "Your Password Here"
PROFILE_URL = "https://www.facebook.com/your.name"
chrome_options = Options()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
driver = Chrome(chrome_options=chrome_options)
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(EMAIL_ADDRESS)
passwordelement.send_keys(PASSWORD)
loginelement = driver.find_element_by_id(login)
loginelement.click()
time.sleep(3)
driver.get(PROFILE_URL)
time.sleep(3)
for _ in range(5100):
post_button_sel = "_4xev"
timeline_element = driver.find_element_by_class_name(post_button_sel)
actions = ActionChains(driver)
actions.move_to_element(timeline_element).click().perform()
time.sleep(5)
menu = driver.find_element_by_css_selector("#globalContainer > div.uiContextualLayerPositioner.uiLayer > div")
actions.move_to_element(menu).perform()
try:
delete_button = menu.find_element_by_xpath("//a[@data-feed-option-name=\"FeedDeleteOption\"]")
except:
delete_button = menu.find_element_by_xpath("//a[@data-feed-option-name=\"HIDE_FROM_TIMELINE\"]")
actions.move_to_element(delete_button).click().perform()
time.sleep(4)
confirmation_button = driver.find_element_by_class_name("layerConfirm")
driver.execute_script("arguments[0].click();", confirmation_button)
time.sleep(3)
driver.refresh()

0
deletefb/__init__.py

98
deletefb/deletefb.py

@ -0,0 +1,98 @@
#! /usr/bin/env python
from seleniumrequests import Chrome
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
import time
import argparse
def run_delete():
parser = argparse.ArgumentParser()
parser.add_argument("-E",
"--email",
default=None,
help="Your email address associated with the account")
parser.add_argument("-P",
"--password",
default=None,
help="Your Facebook password")
parser.add_argument("-U",
"--profile-url",
default=None,
help="""
The link to your Facebook profile, e.g. https://www.facebook.com/your.name
""")
args = parser.parse_args()
delete_posts(user_email_address=args.email,
user_password=args.password,
user_profile_url=args.profile_url)
def delete_posts(user_email_address=None,
user_password=None,
user_profile_url=None):
"""
user_email_address: Your Email
user_password: Your password
user_profile_url: Your profile URL
"""
assert all((user_email_address,
user_password,
user_profile_url)), "Insufficient arguments provided"
chrome_options = Options()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
driver = Chrome(chrome_options=chrome_options)
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()
time.sleep(3)
driver.get(user_profile_url)
time.sleep(3)
for _ in range(5100):
post_button_sel = "_4xev"
timeline_element = driver.find_element_by_class_name(post_button_sel)
actions = ActionChains(driver)
actions.move_to_element(timeline_element).click().perform()
time.sleep(5)
menu = driver.find_element_by_css_selector("#globalContainer > div.uiContextualLayerPositioner.uiLayer > div")
actions.move_to_element(menu).perform()
try:
delete_button = menu.find_element_by_xpath("//a[@data-feed-option-name=\"FeedDeleteOption\"]")
except:
delete_button = menu.find_element_by_xpath("//a[@data-feed-option-name=\"HIDE_FROM_TIMELINE\"]")
actions.move_to_element(delete_button).click().perform()
time.sleep(4)
confirmation_button = driver.find_element_by_class_name("layerConfirm")
driver.execute_script("arguments[0].click();", confirmation_button)
time.sleep(3)
driver.refresh()

2
requirements.txt

@ -1,8 +1,6 @@
certifi==2018.11.29 certifi==2018.11.29
chardet==3.0.4 chardet==3.0.4
idna==2.8 idna==2.8
mahotas==1.4.5
numpy==1.16.2
requests==2.21.0 requests==2.21.0
requests-file==1.4.3 requests-file==1.4.3
selenium==3.141.0 selenium==3.141.0

8
setup.py

@ -14,9 +14,9 @@ setuptools.setup(
url="https://github.com/weskerfoot/DeleteFB", url="https://github.com/weskerfoot/DeleteFB",
packages=setuptools.find_packages(), packages=setuptools.find_packages(),
install_requires = [ install_requires = [
"selenium>=3.141.0", "selenium",
"selenium-requests>=1.3", "selenium-requests",
"requests>=2.21.0" "requests"
], ],
classifiers= [ classifiers= [
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
@ -25,7 +25,7 @@ setuptools.setup(
], ],
entry_points = { entry_points = {
"console_scripts" : [ "console_scripts" : [
"deletefb = deletefb:run_delete" "deletefb = deletefb.deletefb:run_delete"
] ]
} }
) )

Loading…
Cancel
Save