# -*- coding: utf-8 -*-

import re
import time
import urllib.request

from selenium import common, webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

USER_NAME = "把这里换成你的百度用户名"
PASSWORD = "把这里换成你的百度账号密码"

def login(username, password):
    print("正在启动")
    print("因为最近 Chrome 有大版本更新,如果出现错误请确认 ChromeDriver 已经升级到最新版本")

    urlusername = urllib.request.quote(username)
    driver.get("http://tieba.baidu.com/home/main?un=" + urlusername + "&fr=home")
    driver.find_element_by_class_name("u_login").click()
    time.sleep(2)

    pageSouce = driver.page_source
    elementidPrefix = re.findall(r"(TANGRAM__PSP_[0-9]{1,})__footerULoginBtn", pageSouce)[0]

    driver.find_element_by_id(elementidPrefix + "__footerULoginBtn").click()
    driver.find_element_by_id(elementidPrefix + "__userName").send_keys(username)
    driver.find_element_by_id(elementidPrefix + "__password").send_keys(password)
    driver.find_element_by_id(elementidPrefix + "__submit").click()

    print("等待输入验证码,输入完成确定后请在此处按回车")
    input()
    print("正在运行...")


def my_tie_collector():
    driver.get("http://tieba.baidu.com/i/i/my_tie")
    listOfLinks = list()
    listOfElements = driver.find_elements_by_class_name("thread_title")
    for i in range(0, len(listOfElements)):
        listOfLinks.append(listOfElements[i].get_attribute("href"))

    driver.get("http://tieba.baidu.com/i/i/my_tie?&pn=2")  #每天限制30贴,所以最多前两页就足够了
    listOfElements = driver.find_elements_by_class_name("thread_title")
    for i in range(0, len(listOfElements)):
        listOfLinks.append(listOfElements[i].get_attribute("href"))

    print("帖子链接收集完成")
    return listOfLinks


def my_reply_collector():
    driver.get("http://tieba.baidu.com/i/i/my_reply")
    listOfLinks = list()
    listOfElements = driver.find_elements_by_class_name("for_reply_context")
    for i in range(0, len(listOfElements)):
        listOfLinks.append(listOfElements[i].get_attribute("href"))

    driver.get("http://tieba.baidu.com/i/i/my_reply?pn=2")  #同上
    listOfElements = driver.find_elements_by_class_name("for_reply_context")
    for i in range(0, len(listOfElements)):
        listOfLinks.append(listOfElements[i].get_attribute("href"))

    print("帖子链接收集完成")
    return listOfLinks


def deleter_tie(listOfLinks, username):  #增加对楼中楼的删除功能
    print("正在删除...")
    for i in range(0, len(listOfLinks)):
        try:
            driver.get(listOfLinks[i])
            time.sleep(1)
            element = driver.find_element_by_class_name("p_post_del_my")
            driver.execute_script("arguments[0].scrollIntoView(false);", element)
            element.click()
            time.sleep(0.3)
            driver.find_element_by_class_name("dialogJanswers").find_element_by_tag_name("input").click()
            print("删除成功")
            continue
        except common.exceptions.NoSuchElementException:
            print("删除失败,尝试下一种搜寻方式")

        try:
            maincontent = driver.find_element_by_class_name("p_postlist")
            elements = maincontent.find_elements_by_link_text(username)
            for element in elements:
                ActionChains(driver).move_to_element(element).perform()
                try:
                    driver.find_element_by_link_text("删除").click()
                    break
                except common.exceptions.NoSuchElementException:
                    print("Fail to find element, try next herf")  #有可能别人@你导致选错元素,所以对每个超链接遍历一遍直到找到有删除按钮的
            time.sleep(0.3)
            driver.find_element_by_class_name("dialogJanswers").find_element_by_tag_name("input").click()
            print("删除成功")
        except common.exceptions.NoSuchElementException:
            print("仍然删除,可能是以匿名发表")


def deleter_follows():
    while True:
        driver.get("http://tieba.baidu.com/i/i/concern")
        try:
            driver.find_element_by_class_name("btn_unfollow").click()
            driver.find_element_by_class_name("dialogJbtn").click()
            time.sleep(0.5)
        except common.exceptions.NoSuchElementException:
            print("关注已经删除完毕")
            break


def deleter_fans():
    while True:
        driver.get("http://tieba.baidu.com/i/i/fans")
        try:
            element = driver.find_element_by_class_name("name")
            ActionChains(driver).move_to_element(element).perform()  #移动到名字否则取消关注不会出现
            driver.find_element_by_id("add_blacklist_btn").click()
            driver.find_element_by_class_name("dialogJbtn").click()
            time.sleep(0.5)
        except common.exceptions.NoSuchElementException:
            print("粉丝已经删除完毕")
            break


def deleter_BaIFollow():  #使用此功能需打开图片显示
    driver.get("http://tieba.baidu.com/i/i/forum")
    driver.find_element_by_class_name("pm_i_know").click()
    while True:
        try:
            driver.find_element_by_class_name("pt").click()
            driver.find_element_by_class_name("dialogJbtn").click()
            time.sleep(0.5)
        except common.exceptions.NoSuchElementException:
            print("关注的贴吧已经删除完毕")
            break


def Start_with_Chrome_without_images():
    chrome_options = webdriver.ChromeOptions()
    prefs = {
        "profile.managed_default_content_settings.images": 2
    }
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(chrome_options=chrome_options)
    return driver


def Start_with_Chrome():
    driver = webdriver.Chrome()
    return driver

#driver = Start_with_Chrome_without_images()  #不加载图片可以提高速度但是无法删除关注的贴吧
driver = Start_with_Chrome()
login(USER_NAME, PASSWORD)
deleter_tie(my_tie_collector(), USER_NAME)
deleter_fans()
deleter_follows()
deleter_BaIFollow()
print("全部完成")