问题描述与分析:
发现验证码出错时,无法正确触发相关的状态码识别和推送差分
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函数中添加相应的字段
问题描述与分析:
发现验证码出错时,无法正确触发相关的状态码识别和推送差分
push函数的传入中存在字段status_code,溯源得知其来源于mian.py中的这一部分:
通过识别返回结果中是否存在“触发验证码”字符串来识别。经分析其中不会存在该字符。其中,return_data来源于多个任务返回结果的拼接。以run_mihoyobbs函数为例进行分析:
return_data = bbs.run_task()使用的是从mihoyobb.py 中直接获取的返回结果。
可以发现return_data是一个函数内的局部变量,其全部来源是该函数内的信息拼接。
但,“触发验证码”仅会添加到log中,而不会添加到return_data中,
解决方案:
提升为类内的实例变量。然后,添加相应的信息到返回信息中(但似乎会有重复添加多个验证信息的问题)
或许可以添加一个self.captcha_state的状态实例变量,然后在run_task函数中添加相应的字段