Skip to content

状态码部分对于验证码模块的识别存在问题 #270

Description

@yigaiwujiangshui

问题描述与分析:

发现验证码出错时,无法正确触发相关的状态码识别和推送差分
push函数的传入中存在字段status_code,溯源得知其来源于mian.py中的这一部分:

result_msg = "\n".join(filter(None, return_data))
if "触发验证码" in result_msg:
    status_code = StatusCode.CAPTCHA_TRIGGERED.value

通过识别返回结果中是否存在“触发验证码”字符串来识别。经分析其中不会存在该字符。其中,return_data来源于多个任务返回结果的拼接。以run_mihoyobbs函数为例进行分析:
return_data = bbs.run_task()
使用的是从mihoyobb.py 中直接获取的返回结果。

def run_task(self):
    return_data = "米游社: "
    if self.task_do["sign"] and self.task_do["read"] and self.task_do["like"] and \
            self.task_do["share"]:
        return_data += "\n" + f"今天已经全部完成了!\n" \
                              f"一共获得 {self.today_have_get_coins} 个米游币\n目前有 {self.have_coins} 个米游币"
        log.info(f"今天已经全部完成了!一共获得 {self.today_have_get_coins} 个米游币,目前有 {self.have_coins} 个米游币")
        return return_data
    i = 0
    while self.today_get_coins != 0 and i < 2:
        if i > 0:
            wait()
            self.refresh_list()
        if self.bbs_config["checkin"]:
            self.signing()
        self.post_task()
        self.get_tasks_list()
        i += 1
    return_data += "\n" + f"今天已经获得 {self.today_have_get_coins} 个米游币\n" \
                          f"还能获得 {self.today_get_coins} 个米游币\n目前有 {self.have_coins} 个米游币"
    log.info(f"今天已经获得 {self.today_have_get_coins} 个米游币,"
             f"还能获得 {self.today_get_coins} 个米游币,目前有 {self.have_coins} 个米游币")
    wait()

可以发现return_data是一个函数内的局部变量,其全部来源是该函数内的信息拼接。
但,“触发验证码”仅会添加到log中,而不会添加到return_data中,

if data["retcode"] == 1034:
                log.warning("社区签到触发验证码")
                challenge = self.get_pass_challenge()
                if challenge is not None:
                    header["x-rpc-challenge"] = challenge

解决方案:

提升为类内的实例变量。然后,添加相应的信息到返回信息中(但似乎会有重复添加多个验证信息的问题)
或许可以添加一个self.captcha_state的状态实例变量,然后在run_task函数中添加相应的字段

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions