【Web_UI自动化_Python3_豆瓣批量删帖_selenium&tqdm】登录豆瓣-进入详情-批量删除留言-批量删除帖子_20201130

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
'''
Author:leo
Date&Time:2020/11/20 11:11
Project:Python3  FileName:douban_comment.py
Comment:
背景介绍:之前在豆瓣发言有点凡尔赛体,想着批量删除评论,于是写了这个脚本。
主要流程:
1.登录;
2.进入-我的发帖;
3.进入-帖子详情;
4.依次删除评论(直接确定和页面确定)
'''
# -*- coding: utf-8 -*-
from selenium import webdriver
from tqdm import tqdm
import time

class AppDynamicsJob():
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'
    def __init__(self):
        self.driver = webdriver.Chrome(r"D:\Mytest\config\chromedriver.exe")
        self.driver.implicitly_wait(30)
    def isElementExitst(self,driver,element):
        self.driver.implicitly_wait(5)
        flag = True
        try:
            driver.find_element_by_xpath(element)
            return flag
        except:
            flag = False
            return flag
        self.driver.implicitly_wait(20)
    def wait_time_progress_bar(self, time_secend,message="等待时间"):
        pbar = tqdm([wait_second for wait_second in range(int(time_secend) + 1)][1:])
        for char in pbar:
            time.sleep(1) 
            pbar.set_description("----{} {:<2}".format(message, char))
    def test_login(self):
        print("\n----开始登陆----\n")
        driver = self.driver
        driver.get("https://accounts.douban.com/passport/login")
        print(driver.title)
        driver.find_element_by_xpath('//li[text()="密码登录"]').click()
        time.sleep(0.5)
        driver.find_element_by_id("username").clear()
        driver.find_element_by_id("username").send_keys("123")
        driver.find_element_by_id("password").clear()
        driver.find_element_by_id("password").send_keys("123")
        driver.find_element_by_xpath('//a[text()="登录豆瓣"]').click()
    def test_delete_post(self):
        print("\n----进入小组----\n")
        driver = self.driver
        mainWindows = driver.current_window_handle
        driver.find_element_by_xpath('//*[text()="小组"]').click()
        self.wait_time_progress_bar(1, "等待跳转")
        print(driver.title)
        for window in driver.window_handles:
            driver.switch_to.window(window)
            if window != mainWindows:
                break
        print(driver.title)
        send_list = driver.find_elements_by_xpath("//tbody/tr")
        # for page in range(3, len(send_list))[::1]:
        for page in [4]:
            while self.isElementExitst(self.driver, "//*[contains(text(),'发起')]")==False:
                time.sleep(1)
            driver.find_element_by_xpath("//*[contains(text(),'发起')]").click()
            while self.isElementExitst(self.driver, '//tr[last()]/td/a[@title]')==False:
                time.sleep(1)

            driver.find_element_by_xpath(f'//tr[{page}]/td/a[@title]').click()
            delete_button = self.isElementExitst(self.driver, "//*[text()='删除']")
            while delete_button:
                print("\n----开始删除----\n")
                print(driver.title)
                self.wait_time_progress_bar(1, "开始删除")
                mouseAddr = self.driver.find_element_by_xpath("//*[text()='删除']")
                driver.execute_script("arguments[0].click();", mouseAddr)
                driver.switch_to.alert.accept()
                self.wait_time_progress_bar(1, "等待跳转")
                cur_titile = driver.title
                if "删除小组讨论" in cur_titile:
                    driver.find_element_by_xpath('//input[@value="确定"]').click()
                    self.wait_time_progress_bar(1, "等待跳转")
                delete_button = self.isElementExitst(self.driver, "//*[text()='删除']")
            else:
                driver.get("https://www.douban.com/group/")
    def test_delete_replay(self):
        print("\n----进入小组----\n")
        driver = self.driver
        mainWindows = driver.current_window_handle
        driver.find_element_by_xpath('//*[text()="小组"]').click()
        self.wait_time_progress_bar(1, "等待跳转")
        print(driver.title)
        for window in driver.window_handles:
            driver.switch_to.window(window)
            if window != mainWindows:
                break
        print(driver.title)
        send_list = driver.find_elements_by_xpath("//tbody/tr")
        for page in range(1, len(send_list), 1):
            while self.isElementExitst(self.driver, "//*[contains(text(),'回应(')]")==False:
                time.sleep(1)
            driver.find_element_by_xpath("//*[contains(text(),'回应(')]").click()
            while self.isElementExitst(self.driver, '//tr[last()]/td/a[@title]')==False:
                time.sleep(1)
            driver.find_element_by_xpath(f'//tr[{page}]/td/a[@title]').click()
            delete_button = self.isElementExitst(self.driver, '//h4/a[text()="123"]/../../../../div[2]//a[text()="删除"]')
            while delete_button:
                try:
                    print("\n----开始删除----\n")
                    print(driver.title.encode("gbk", "ignore").decode("gbk"))
                    self.wait_time_progress_bar(1, "开始删除")
                    mouseAddr = self.driver.find_element_by_xpath('//h4/a[text()="123"]/../../../../div[2]//a[text()="删除"]')
                    driver.execute_script("arguments[0].click();", mouseAddr)
                    driver.switch_to.alert.accept()
                    self.wait_time_progress_bar(1, "等待跳转")
                    cur_titile = driver.title
                    if "删除小组讨论" in cur_titile:
                        driver.find_element_by_xpath('//input[@value="确定"]').click()
                        self.wait_time_progress_bar(1, "等待跳转")
                    delete_button = self.isElementExitst(self.driver, '//h4/a[text()="123"]/../../../../div[2]//a[text()="删除"]')
                except Exception as e:
                    print(e)
            else:
                driver.get("https://www.douban.com/group/")
            send_list = driver.find_elements_by_xpath("//tbody/tr")
if __name__ == "__main__":
    test = AppDynamicsJob()
    test.test_login()
    # test.test_delete_post()
    test.test_delete_replay()

D:\TestFiles\Python3\python.exe test_ui/douban_comment.py

----开始登陆----

登录豆瓣

----进入小组----

----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
豆瓣
我的小组讨论

----开始删除----

  0%|          | 0/1 [00:00<?, ?it/s]…
----开始删除 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]

----开始删除----


----开始删除 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]

----开始删除----


----开始删除 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]

----开始删除----


----开始删除 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]

----开始删除----


----开始删除 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]
----等待跳转 1 : 100%|██████████| 1/1 [00:01<00:00,  1.00s/it]

Process finished with exit code 0
 

 

猜你喜欢

转载自blog.csdn.net/denzeleo/article/details/110391859