diff --git a/deletefb/deletefb.py b/deletefb/deletefb.py index 484b5f9..20db6e3 100755 --- a/deletefb/deletefb.py +++ b/deletefb/deletefb.py @@ -114,7 +114,7 @@ def run_delete(): ) elif args.mode == "unlike_pages": - unlike_pages(driver) + unlike_pages(driver, args.profile_url) else: print("Please enter a valid mode") sys.exit(1) diff --git a/deletefb/tools/likes.py b/deletefb/tools/likes.py index c332ba0..be86926 100644 --- a/deletefb/tools/likes.py +++ b/deletefb/tools/likes.py @@ -2,13 +2,14 @@ from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC +from time import sleep from .common import SELENIUM_EXCEPTIONS, archiver, logger LOG = logger(__name__) -def load_likes(driver): +def load_likes(driver, profile_url): """ Loads the page that lists all pages you like @@ -19,24 +20,19 @@ def load_likes(driver): None """ - driver.refresh() - driver.get("https://www.facebook.com/pages/?category=liked") + driver.get("{0}/likes_all".format(profile_url)) wait = WebDriverWait(driver, 20) try: wait.until( - EC.presence_of_element_located((By.XPATH, "//button/div/div[text()='Liked']")) - ) - - wait.until( - EC.presence_of_element_located((By.XPATH, "//button/div/i[@aria-hidden=\"true\"]")) + EC.presence_of_element_located((By.CSS_SELECTOR, ".PageLikeButton")) ) except SELENIUM_EXCEPTIONS: LOG.exception("Traceback of load_likes") return -def unlike_pages(driver): +def unlike_pages(driver, profile_url): """ Unlike all pages @@ -49,40 +45,20 @@ def unlike_pages(driver): like_log, archive_likes = archiver("likes") + wait = WebDriverWait(driver, 20) actions = ActionChains(driver) - load_likes(driver) - - pages_list = driver.find_element_by_css_selector("#all_liked_pages") + load_likes(driver, profile_url) - actions.move_to_element(pages_list).perform() + pages = driver.find_elements_by_xpath("//li//div/div/a[contains(@class, 'lfloat')]") - unlike_buttons = pages_list.find_elements_by_xpath("//button/div/div[text()='Liked']/../..") - - while unlike_buttons: - for button in unlike_buttons: - try: - if "Liked" in button.text: - page_name = button.find_element_by_xpath("./../..").text.split("\n")[0] - - driver.execute_script("arguments[0].click();", button) - - archive_likes(page_name) + actions = ActionChains(driver) - print("{0} was unliked".format(page_name)) + page_urls = [page.get_attribute("href").replace("www", "mobile") for page in pages] - except SELENIUM_EXCEPTIONS: - continue + for url in page_urls: + driver.get(url) - load_likes(driver) - try: - pages_list = driver.find_element_by_css_selector("#all_liked_pages") - actions.move_to_element(pages_list).perform() - unlike_buttons = pages_list.find_elements_by_xpath("//button") - if not unlike_buttons: - break - except SELENIUM_EXCEPTIONS: - break # Explicitly close the log file when we're done with it like_log.close()