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

查看 92|回复 8
作者:MyModHeaven   

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

介绍
我是一个把吾爱币都花在悬赏上的人,所以撤销未解答的悬赏贴就有点麻烦,就自己写了这个
用到了三个库:datetime time selenium
slogn
一段简单的代码,实现一个简单的小功能
(这么贴心的功能,吾爱官方怎么没有呢?)
(看到管理误解了,我的意思不是自动撤销,而是自动获取用户未完结悬赏并在申请撤销悬赏专帖回复)
使用
[ol]
  • 手动登录账号,控制台回车让程序继续运行
  • 程序会查找可以撤销的悬赏贴信息,根据要求的格式编写文本,并在2024年申请撤销悬赏专帖回复
  • 人工核对,手动提交
    [/ol]
    不足
    [ol]
  • 本人只有两页的悬赏贴子,所有有很多页悬赏贴的账号可能会有未知的错误
  • 功能过于简单
  • 感觉用油猴脚本是最简单的实现方式,奈何本人不会js
    [/ol]
    进化
    这段代码是一年多以前写的,现在正在用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('''
    --------------------------------
    手动提交后,回车结束程序
    --------------------------------
    ''')

    吾爱, 一键

  • Chanlong   

    撤销悬赏第一条:
    "

    不能用未解决作为通用理由哦
    莫奇   

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

    这也有工具,厉害
    wojaiyh   

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

    这个牛啊~!
    turmasi1234   


    柒點 发表于 2024-1-23 22:16
    撤销悬赏第一条:
    不能用未解决作为通用理由哦

    关注下,恶意不结帖撤销的给违规,严重的禁言, 这种破坏规则不公平的事情需要严肃处理。
    所以楼主你觉得我为啥不在帖子里加一个自动撤销功能,还要人工审核来?
    dingqh   

    学到了,感谢呆佬
    wojaiyh   

    好好好,这么玩是吧,都干到自己头上了...
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部