MyModHeaven 发表于 2024-1-23 22:04

一键提交吾爱悬赏贴撤销申请

本帖最后由 MyModHeaven 于 2024-1-24 08:08 编辑


> 感觉原标题“吾爱悬赏贴一键撤销”有些歧义,容易让人误会,改成了“一键提交吾爱悬赏贴撤销申请”

# 介绍
我是一个把吾爱币都花在悬赏上的人,所以撤销未解答的悬赏贴就有点麻烦,就自己写了这个

用到了三个库:`datetime` `time` `selenium`

## slogn
一段简单的代码,实现一个简单的小功能
(这么贴心的功能,吾爱官方怎么没有呢?)
(看到管理误解了,我的意思不是自动撤销,而是自动获取用户未完结悬赏并在申请撤销悬赏专帖回复)

## 使用
1. 手动登录账号,控制台回车让程序继续运行
2. 程序会查找可以撤销的悬赏贴信息,根据要求的格式编写文本,并在2024年申请撤销悬赏专帖回复
3. 人工核对,手动提交

## 不足
1. 本人只有两页的悬赏贴子,所有有很多页悬赏贴的账号可能会有未知的错误
2. 功能过于简单
3. 感觉用油猴脚本是最简单的实现方式,奈何本人不会js


## 进化
这段代码是一年多以前写的,现在正在用`PySide6`重写,希望加上一些贴心小功能,而不是这么简单粗暴

# 代码

```python
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(' '))

# 获取需要撤销的帖子信息
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)
    textarea.send_keys(Keys.ENTER)
    textarea.send_keys('申请人ID:' + id)
    textarea.send_keys(Keys.ENTER)
    textarea.send_keys('悬赏发布时间:' + det)
    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('''
--------------------------------
手动提交后,回车结束程序
--------------------------------
''')

```

柒點 发表于 2024-1-23 22:16

撤销悬赏第一条:
如没有满意答案,请在撤销理由中写清具体情况。
不能用未解决作为通用理由哦{:301_998:}

Chanlong 发表于 2024-1-23 22:54

{:1_893:} 果然是52.没有做不到的。只有想不到的....
关于这个悬赏。看到版主也特地开贴,要求回复根据格式。。。
理由确实因为各种原因。时间久了帖子沉了,甚至超过几个月后无法回复更加烂尾了。。。
归根原因是提出来的需求有点高,也在不合适的时间,采用了不合适的标题。
天时地利人和。。。

莫奇 发表于 2024-1-23 22:13

这也有工具,厉害

wjqok 发表于 2024-1-23 22:40

能不能自问自答奖励给自己?

wojaiyh 发表于 2024-1-23 22:51

这个牛啊~!{:1_921:}{:1_921:}

277249 发表于 2024-1-24 00:11

Hmily 发表于 2024-1-24 00:41

柒點 发表于 2024-1-23 22:16
撤销悬赏第一条:

不能用未解决作为通用理由哦
关注下,恶意不结帖撤销的给违规,严重的禁言, 这种破坏规则不公平的事情需要严肃处理。

所以楼主你觉得我为啥不在帖子里加一个自动撤销功能,还要人工审核来?

turmasi1234 发表于 2024-1-24 07:34

学到了,感谢呆佬

dingqh 发表于 2024-1-24 07:49

好好好,这么玩是吧,都干到自己头上了...
页: [1] 2
查看完整版本: 一键提交吾爱悬赏贴撤销申请