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.
 
 
 
 

106 lines
3.2 KiB

from ..exceptions import UnknownOSException
from .common import NO_CHROME_DRIVER
from clint.textui import puts, colored
from collections import namedtuple
from selenium import webdriver
from urllib.request import urlretrieve
from enum import Enum
import os, sys, stat, platform
import progressbar
import re
import zipfile
chrome_drivers = {
"Windows" : "https://chromedriver.storage.googleapis.com/78.0.3904.70/chromedriver_win32.zip",
"Darwin" : "https://chromedriver.storage.googleapis.com/78.0.3904.70/chromedriver_mac64.zip",
"Linux" : "https://chromedriver.storage.googleapis.com/78.0.3904.70/chromedriver_linux64.zip"
}
def extract_zip(filename):
"""
Uses zipfile package to extract a single zipfile
:param filename:
:return: new filename
"""
try:
_file = zipfile.ZipFile(filename, 'r')
except FileNotFoundError:
puts(colored.red(f"{filename} Does not exist"))
sys.exit(1)
# Save the name of the new file
new_file_name = _file.namelist()[0]
# Extract the file and make it executable
_file.extractall()
driver_stat = os.stat(new_file_name)
os.chmod(new_file_name, driver_stat.st_mode | stat.S_IEXEC)
_file.close()
os.remove(filename)
return new_file_name
def setup_selenium(driver_path, options):
# Configures selenium to use a custom path
return webdriver.Chrome(executable_path=driver_path, options=options)
def get_webdriver():
"""
Ensure a webdriver is available
If Not, Download it.
"""
cwd = os.listdir(os.getcwd())
webdriver_regex = re.compile('chromedriver')
web_driver = list(filter(webdriver_regex.match, cwd))
if web_driver:
# check if a extracted copy already exists
if not os.path.isfile('chromedriver'):
# Extract file
extract_zip(web_driver[0])
return "{0}/chromedriver".format(os.getcwd())
else:
# Download it according to the current machine
chrome_webdriver = chrome_drivers.get(platform.system(), False)
if not chrome_webdriver:
raise UnknownOSException("Unknown Operating system platform")
global total_size
def show_progress(*res):
global total_size
pbar = None
downloaded = 0
block_num, block_size, total_size = res
if not pbar:
pbar = progressbar.ProgressBar(maxval=total_size)
pbar.start()
downloaded += block_num * block_size
if downloaded < total_size:
pbar.update(downloaded)
else:
pbar.finish()
puts(colored.yellow("Downloading Chrome Webdriver"))
file_name = chrome_webdriver.split('/')[-1]
response = urlretrieve(chrome_webdriver, file_name, show_progress)
if int(response[1].get('Content-Length')) == total_size:
puts(colored.green(f"DONE!"))
return "{0}/{1}".format(os.getcwd(), extract_zip(file_name))
else:
puts(colored.red("An error Occurred While trying to download the driver."))
# remove the downloaded file and exit
os.remove(file_name)
sys.stderr.write(NO_CHROME_DRIVER)
sys.exit(1)