From 88facf781893478eb0fedfa214f785fac24e0c38 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Fri, 18 Nov 2022 14:13:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=9A=87=E5=90=8E=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=EF=BC=8C=E8=AF=B7=E6=B3=A8=E6=84=8F=EF=BC=8C=E4=B8=BA?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E5=87=BA=E9=94=99=EF=BC=8C=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=89=8D=E8=AF=B7=E5=85=88=E5=86=8D=E7=AB=99=E7=82=B9=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=3D>=20Opencd=3D>=20=E7=AB=99=E7=82=B9=E7=BD=91?= =?UTF-8?q?=E5=9D=80,=E5=B0=86=E2=80=9Chttps://open.cd/=E2=80=9C=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E4=BF=AE=E6=94=B9=E4=B8=BA=E2=80=9Chttps://www.open.c?= =?UTF-8?q?d/=E2=80=9C=EF=BC=8C=E4=B8=8D=E7=84=B6=E5=AE=B9=E6=98=93?= =?UTF-8?q?=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt_site/UtilityTool.py | 84 +++++++++++++++++++++++++++++++++++++++++- pt_site/apps.py | 14 +++---- 2 files changed, 90 insertions(+), 8 deletions(-) diff --git a/pt_site/UtilityTool.py b/pt_site/UtilityTool.py index 3f5c91f..f10699b 100644 --- a/pt_site/UtilityTool.py +++ b/pt_site/UtilityTool.py @@ -85,7 +85,8 @@ class PtSpider: """爬虫""" def __init__(self, browser='chrome', platform='darwin', - user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.28', + user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42', *args, **kwargs): self.browser = browser self.platform = platform @@ -654,6 +655,47 @@ class PtSpider: logger.info('签到失败!') return CommonResponse.error(msg='签到失败!') + def sign_in_opencd(self, my_site: MySite): + """皇后签到""" + site = my_site.site + url = site.url + site.page_sign_in.lstrip('/') + logger.info('# 开启验证码!') + res = self.send_request( + my_site=my_site, + method='get', + url=url) + logger.info(res.content.decode('utf-8')) + img_src = ''.join(self.parse(res, '//form[@id="frmSignin"]//img/@src')) + img_get_url = site.url + img_src + times = 0 + # imagestring = '' + ocr_result = None + while times <= 5: + ocr_result = self.ocr_captcha(img_get_url) + if ocr_result.code == StatusCodeEnum.OK.code: + imagestring = ocr_result.data + logger.info('验证码长度:{}'.format(len(imagestring))) + if len(imagestring) == 6: + break + times += 1 + time.sleep(1) + if ocr_result.code != StatusCodeEnum.OK.code: + return ocr_result + data = { + 'imagehash': ''.join(self.parse(res, '//form[@id="frmSignin"]//input[@name="imagehash"]/@value')), + 'imagestring': imagestring + } + logger.info('请求参数:{}'.format(data)) + result = self.send_request( + my_site=my_site, + method=site.sign_in_method, + url=site.url + 'plugin_sign-in.php?cmd=signin', data=data) + logger.info('皇后签到返回值:{} \n'.format(result.content)) + return CommonResponse.success( + status=StatusCodeEnum.OK, + data=result.json() + ) + def sign_in_hdsky(self, my_site: MySite, captcha=False): """HDSKY签到""" site = my_site.site @@ -906,6 +948,46 @@ class PtSpider: else: # 签到失败 return result + if 'open.cd' in site.url: + result = self.sign_in_opencd(my_site=my_site) + if result.code == StatusCodeEnum.OK.code: + res_json = result.data + if res_json.get('state') == 'success': + signin_today.sign_in_today = True + data = res_json.get('data') + message = "签到成功,您已连续签到{}天,本次增加魔力:{}。".format( + data.get('signindays'), + data.get('integral'), + ) + signin_today.sign_in_info = message + signin_today.save() + return CommonResponse.success( + status=StatusCodeEnum.OK, + msg=message + ) + elif res_json.get('state') == 'false' and len(res_json) <= 1: + # 重复签到 + message = '您今天已经在其他地方签到了哦!' + signin_today.sign_in_today = True + signin_today.sign_in_info = message + signin_today.save() + return CommonResponse.success( + msg=message + ) + # elif res_json.get('state') == 'invalid_imagehash': + # # 验证码错误 + # return CommonResponse.error( + # status=StatusCodeEnum.IMAGE_CODE_ERR, + # ) + else: + # 签到失败 + return CommonResponse.error( + status=StatusCodeEnum.FAILED_SIGN_IN, + msg=res_json.get('msg') + ) + else: + # 签到失败 + return result if 'hdarea.co' in site.url: res = self.send_request(my_site=my_site, method=site.sign_in_method, diff --git a/pt_site/apps.py b/pt_site/apps.py index 991390c..9795601 100644 --- a/pt_site/apps.py +++ b/pt_site/apps.py @@ -16,13 +16,13 @@ def app_ready_handler(sender, **kwargs): data = json.load(f) logger.info('正在初始化站点规则信息表') logger.info('更新规则中,返回结果为True为新建,为False为更新,其他是错误了') - btschool = Site.objects.filter(url='http://47.242.110.63/').first() - if btschool: - bt_school = Site.objects.filter(url='https://pt.btschool.club/').first() - if bt_school: - bt_school.delete() - btschool.url = 'https://pt.btschool.club/' - btschool.save() + opencd = Site.objects.filter(url='http://open.cd/').first() + if opencd: + opencd = Site.objects.filter(url='https://www.open.cd/').first() + if opencd: + opencd.delete() + opencd.url = 'https://www.open.cd/' + opencd.save() for site_rules in data: if site_rules.get('pk'): del site_rules['pk']