#!/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