本帖最后由 MyModHeaven 于 2024-1-24 08:08 编辑
感觉原标题“吾爱悬赏贴一键撤销”有些歧义,容易让人误会,改成了“一键提交吾爱悬赏贴撤销申请”
介绍
我是一个把吾爱币都花在悬赏上的人,所以撤销未解答的悬赏贴就有点麻烦,就自己写了这个
用到了三个库:datetime time selenium
slogn
一段简单的代码,实现一个简单的小功能
(这么贴心的功能,吾爱官方怎么没有呢?)
(看到管理误解了,我的意思不是自动撤销,而是自动获取用户未完结悬赏并在申请撤销悬赏专帖回复)
使用
- 手动登录账号,控制台回车让程序继续运行
- 程序会查找可以撤销的悬赏贴信息,根据要求的格式编写文本,并在2024年申请撤销悬赏专帖回复
- 人工核对,手动提交
不足
- 本人只有两页的悬赏贴子,所有有很多页悬赏贴的账号可能会有未知的错误
- 功能过于简单
- 感觉用油猴脚本是最简单的实现方式,奈何本人不会js
进化
这段代码是一年多以前写的,现在正在用PySide6 重写,希望加上一些贴心小功能,而不是这么简单粗暴
代码
import datetime
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 计算可撤销的最晚发帖日期
deadline = datetime.datetime.today() - datetime.timedelta(days=5)
url = 'https://www.52pojie.cn/home.php?mod=space&do=reward&view=me'
browser = webdriver.Chrome()
browser.get(url)
# 首次登录
next = input('登录完毕后,回车继续')
# cookies = browser.get_cookies()
# with open('d:/cookies.txt', 'w', encoding='utf-8') as f:
# f.write(str(cookies))
# # cookie登录
# with open('d:/cookies.txt', 'r', encoding='utf-8') as f:
# cookies = eval(f.read())
# browser.delete_all_cookies()
# for cookie in cookies:
# browser.add_cookie(cookie)
browser.refresh()
# 获取账号id
id = browser.find_element(By.XPATH, "//div[@id='um']/p/strong/a").text
_total_page = browser.find_element(By.XPATH, '//input[@title="输入页码,按回车快速跳转"]/../span').get_attribute('title')
total_page = int(_total_page.split(' ')[1])
# 获取需要撤销的帖子信息
details = []
for page in range(total_page):
sleep(1) # 防止 429 Too Many Requests
browser.get(url + '&page=' + str(page + 1))
node_li = browser.find_elements(By.XPATH, "//ul[@class='rwdl cl']/li")
for li in node_li:
status = li.find_element(By.XPATH, "./div/em").text
if status == '已解决':
continue
link = li.find_element(By.XPATH, "./h4/a").get_attribute('href')
postDate = li.find_element(By.XPATH, "./p/span").text
# 判断帖子是否为 14 天内发布
day = datetime.datetime.strptime(postDate, '%Y-%m-%d')
if day > deadline:
continue
details.append((link, postDate))
# 打开申请撤销悬赏专帖
cancelUrl = 'https://www.52pojie.cn/thread-1875228-1-1.html'
browser.get(cancelUrl)
textarea = browser.find_element(By.XPATH, "//div[@id='fastposteditor']//textarea")
textarea.click()
# 判断当前年份
currentYear = datetime.datetime.now().year
if currentYear != 2024:
textarea.send_keys('注意,这是 2024 年的申请撤销悬赏专贴,请复制下面内容到本年的专贴下面回复')
textarea.send_keys(Keys.ENTER)
for det in details:
textarea.send_keys('申请撤销CB帖子地址:' + det[0])
textarea.send_keys(Keys.ENTER)
textarea.send_keys('申请人ID:' + id)
textarea.send_keys(Keys.ENTER)
textarea.send_keys('悬赏发布时间:' + det[1])
textarea.send_keys(Keys.ENTER)
textarea.send_keys('申请撤销理由:') # 理由请自行填写,需写清具体情况
textarea.send_keys(Keys.ENTER)
textarea.send_keys(Keys.ENTER)
# 展开评论内容,检查是否有错,修改撤销理由
browser.find_element(By.XPATH, "//div[@id='fastposteditor']/div/div/span/a").click()
next = input('''
--------------------------------
手动提交后,回车结束程序
--------------------------------
''')
|