Automate Scrubbing your Facebook Presence
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

93 lines
2.6 KiB

from os.path import isfile
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import (
NoSuchElementException,
StaleElementReferenceException,
TimeoutException
)
import json
import logging
import logging.config
import os
import urllib.parse as urlparse
SELENIUM_EXCEPTIONS = (
NoSuchElementException,
StaleElementReferenceException,
TimeoutException
)
def click_button(driver, el):
"""
Click a button using Javascript
"""
driver.execute_script("arguments[0].click();", el)
def scroll_until_element_exists(driver, xpath_expr):
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
try:
element = driver.find_element_by_xpath(xpath_expr)
except SELENIUM_EXCEPTIONS:
continue
break
def scroll_to(driver, el):
"""
Scroll an element into view, using JS
"""
try:
driver.execute_script("arguments[0].scrollIntoView();", el)
except SELENIUM_EXCEPTIONS:
return
def logger(name):
"""
Args:
name (str): Logger name
Returns:
logging.Logger
"""
# Make sure the path always points to the correct directory
config_path = os.path.dirname(os.path.realpath(__file__)) + "/../logging_conf.json"
if not isfile(config_path): # called from file (deletefb.py)
os.chdir("..")
with open(config_path, "r", encoding="utf-8") as config_file:
config = json.load(config_file)
logging.config.dictConfig(config["logging"])
return logging.getLogger(name)
def wait_xpath(driver, expr, timeout=20):
"""
Takes an XPath expression, and waits at most `timeout` seconds until it exists
"""
wait = WebDriverWait(driver, timeout)
try:
wait.until(EC.presence_of_element_located((By.XPATH, expr)))
except SELENIUM_EXCEPTIONS:
return
def force_mobile(url):
"""
Force a url to use the mobile site.
"""
parsed = urlparse.urlparse(url)
# Ensure a protocol is given (needed by selenium).
scheme = parsed.scheme or "https"
return urlparse.urlunparse((scheme,
"mobile.facebook.com",
parsed.path,
parsed.params,
parsed.query,
parsed.fragment))
NO_CHROME_DRIVER = """
You need to manually install the chromedriver for Selenium\n
Please see this link https://github.com/weskerfoot/DeleteFB#how-to-use-it\n
"""