diff --git a/app/helper/browser.py b/app/helper/browser.py index 5ade5e8d..84ada0dd 100644 --- a/app/helper/browser.py +++ b/app/helper/browser.py @@ -10,7 +10,7 @@ class PlaywrightHelper: def get_page_source(self, url: str, cookies: str = None, ua: str = None, - proxy: dict = None, + proxies: dict = None, headless: bool = True, timeout: int = 30) -> str: """ @@ -18,30 +18,33 @@ class PlaywrightHelper: :param url: 网页地址 :param cookies: cookies :param ua: user-agent - :param proxy: 代理 + :param proxies: 代理 :param headless: 是否无头模式 :param timeout: 超时时间 """ - with sync_playwright() as playwright: - browser = playwright[self.browser_type].launch(headless=headless) - context = browser.new_context(user_agent=ua, proxy=proxy) - page = context.new_page() - if cookies: - page.set_extra_http_headers({"cookie": cookies}) - try: - sync_stealth(page, pure=True) - page.goto(url) - res = sync_cf_retry(page) - if not res: - logger.warn("cloudflare challenge fail!") - page.wait_for_load_state("networkidle", timeout=timeout * 1000) - source = page.content() - except Exception as e: - logger.error(f"获取网页源码失败: {e}") - source = None - finally: - browser.close() - + source = "" + try: + with sync_playwright() as playwright: + browser = playwright[self.browser_type].launch(headless=headless) + context = browser.new_context(user_agent=ua, proxy=proxies) + page = context.new_page() + if cookies: + page.set_extra_http_headers({"cookie": cookies}) + try: + sync_stealth(page, pure=True) + page.goto(url) + res = sync_cf_retry(page) + if not res: + logger.warn("cloudflare challenge fail!") + page.wait_for_load_state("networkidle", timeout=timeout * 1000) + source = page.content() + except Exception as e: + logger.error(f"获取网页源码失败: {e}") + source = None + finally: + browser.close() + except Exception as e: + logger.error(f"获取网页源码失败: {e}") return source diff --git a/app/modules/indexer/spider.py b/app/modules/indexer/spider.py index 35acff1c..1011c636 100644 --- a/app/modules/indexer/spider.py +++ b/app/modules/indexer/spider.py @@ -222,7 +222,7 @@ class TorrentSpider: url=searchurl, cookies=self.cookie, ua=self.ua, - proxy=self.proxies + proxies=self.proxies ) else: # requests请求 diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index ed6b6317..945a23fe 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -138,7 +138,7 @@ class AutoSignIn(_PluginBase): site_cookie = site_info.get("cookie") ua = site_info.get("ua") render = site_info.get("render") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None if not site_url or not site_cookie: logger.warn(f"未配置 {site} 的站点地址或Cookie,无法签到") return "" @@ -154,7 +154,7 @@ class AutoSignIn(_PluginBase): page_source = PlaywrightHelper().get_page_source(url=checkin_url, cookies=site_cookie, ua=ua, - proxy=proxy) + proxies=proxies) if not SiteUtils.is_logged_in(page_source): if under_challenge(page_source): return f"【{site}】无法通过Cloudflare!" @@ -162,7 +162,7 @@ class AutoSignIn(_PluginBase): else: res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).get_res(url=checkin_url) if not res and site_url != checkin_url: logger.info(f"开始站点模拟登录:{site},地址:{site_url}...") diff --git a/app/plugins/autosignin/sites/52pt.py b/app/plugins/autosignin/sites/52pt.py index b67f0665..2df615fe 100644 --- a/app/plugins/autosignin/sites/52pt.py +++ b/app/plugins/autosignin/sites/52pt.py @@ -11,7 +11,7 @@ from app.utils.http import RequestUtils from app.utils.string import StringUtils -class FWpt(_ISiteSigninHandler): +class Pt52(_ISiteSigninHandler): """ 52pt 如果填写openai key则调用chatgpt获取答案 @@ -44,30 +44,32 @@ class FWpt(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") + proxies = settings.PROXY if site_info.get("proxy") else None # 判断今日是否已签到 - index_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url='https://52pt.site/bakatest.php') + html_text = self.get_page_source(url='https://52pt.site/bakatest.php', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) - if not index_res or index_res.status_code != 200: + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in index_res.text: + if "login.php" in html_text: logger.error(f"签到失败,Cookie失效") return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=index_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 没有签到则解析html - html = etree.HTML(index_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】签到失败' @@ -94,7 +96,7 @@ class FWpt(_ISiteSigninHandler): choice=choice, site_cookie=site_cookie, ua=ua, - proxy=proxy, + proxies=proxies, site=site) def __signin(self, questionid: str, @@ -102,7 +104,7 @@ class FWpt(_ISiteSigninHandler): site: str, site_cookie: str, ua: str, - proxy: dict) -> Tuple[bool, str]: + proxies: dict) -> Tuple[bool, str]: """ 签到请求 questionid: 450 @@ -122,7 +124,7 @@ class FWpt(_ISiteSigninHandler): sign_res = RequestUtils(cookies=site_cookie, ua=ua, - proxies=proxy + proxies=proxies ).post_res(url='https://52pt.site/bakatest.php', data=data) if not sign_res or sign_res.status_code != 200: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/__init__.py b/app/plugins/autosignin/sites/__init__.py index 60604cf1..6a78fe20 100644 --- a/app/plugins/autosignin/sites/__init__.py +++ b/app/plugins/autosignin/sites/__init__.py @@ -3,8 +3,12 @@ import re from abc import ABCMeta, abstractmethod from typing import Tuple +import chardet from ruamel.yaml import CommentedMap +from app.helper.browser import PlaywrightHelper +from app.log import logger +from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -34,6 +38,43 @@ class _ISiteSigninHandler(metaclass=ABCMeta): """ pass + @staticmethod + def get_page_source(url: str, cookie: str, ua: str, proxies: dict, render: bool) -> str: + """ + 获取页面源码 + :param url: Url地址 + :param cookie: Cookie + :param ua: UA + :param proxies: 代理 + :param render: 是否渲染 + :return: 页面源码,错误信息 + """ + if render: + return PlaywrightHelper().get_page_source(url=url, + cookies=cookie, + ua=ua, + proxies=proxies) + else: + res = RequestUtils(cookies=cookie, + ua=ua, + proxies=proxies + ).get_res(url=url) + if res is not None: + # 使用chardet检测字符编码 + raw_data = res.content + if raw_data: + try: + result = chardet.detect(raw_data) + encoding = result['encoding'] + # 解码为字符串 + return raw_data.decode(encoding) + except Exception as e: + logger.error(f"chardet解码失败:{e}") + return res.text + else: + return res.text + return "" + @staticmethod def sign_in_result(html_res: str, regexs: list) -> bool: """ diff --git a/app/plugins/autosignin/sites/btschool.py b/app/plugins/autosignin/sites/btschool.py index ac764221..63986463 100644 --- a/app/plugins/autosignin/sites/btschool.py +++ b/app/plugins/autosignin/sites/btschool.py @@ -5,7 +5,6 @@ from ruamel.yaml import CommentedMap from app.core.config import settings from app.log import logger from app.plugins.autosignin.sites import _ISiteSigninHandler -from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -37,37 +36,41 @@ class BTSchool(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") + proxies = settings.PROXY if site_info.get("proxy") else None logger.info(f"{site} 开始签到") - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://pt.btschool.club") + # 判断今日是否已签到 + html_text = self.get_page_source(url='https://pt.btschool.club', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) - if not html_res or html_res.status_code != 200: + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 已签到 - if self._sign_text not in html_res.text: + if self._sign_text not in html_text: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' - sign_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://pt.btschool.club/index.php?action=addbonus") + html_text = self.get_page_source(url='https://pt.btschool.club/index.php?action=addbonus', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) - if not sign_res or sign_res.status_code != 200: + if not html_text: logger.error(f"签到失败,签到接口请求失败") return False, f'【{site}】签到失败,签到接口请求失败' # 签到成功 - if self._sign_text not in sign_res.text: + if self._sign_text not in html_text: logger.info(f"签到成功") return True, f'【{site}】签到成功' diff --git a/app/plugins/autosignin/sites/chdbits.py b/app/plugins/autosignin/sites/chdbits.py index 3a85db3b..6d4a3355 100644 --- a/app/plugins/autosignin/sites/chdbits.py +++ b/app/plugins/autosignin/sites/chdbits.py @@ -45,30 +45,32 @@ class CHDBits(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 判断今日是否已签到 - index_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url='https://chdbits.co/bakatest.php') + html_text = self.get_page_source(url='https://chdbits.co/bakatest.php', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) - if not index_res or index_res.status_code != 200: + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in index_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=index_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 没有签到则解析html - html = etree.HTML(index_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】签到失败' @@ -95,7 +97,7 @@ class CHDBits(_ISiteSigninHandler): choice=choice, site_cookie=site_cookie, ua=ua, - proxy=proxy, + proxies=proxies, site=site) def __signin(self, questionid: str, @@ -103,7 +105,7 @@ class CHDBits(_ISiteSigninHandler): site: str, site_cookie: str, ua: str, - proxy: dict) -> Tuple[bool, str]: + proxies: dict) -> Tuple[bool, str]: """ 签到请求 questionid: 450 @@ -123,7 +125,7 @@ class CHDBits(_ISiteSigninHandler): sign_res = RequestUtils(cookies=site_cookie, ua=ua, - proxies=proxy + proxies=proxies ).post_res(url='https://chdbits.co/bakatest.php', data=data) if not sign_res or sign_res.status_code != 200: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/haidan.py b/app/plugins/autosignin/sites/haidan.py index c461e33f..e00bc238 100644 --- a/app/plugins/autosignin/sites/haidan.py +++ b/app/plugins/autosignin/sites/haidan.py @@ -5,7 +5,6 @@ from ruamel.yaml import CommentedMap from app.core.config import settings from app.log import logger from app.plugins.autosignin.sites import _ISiteSigninHandler -from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -37,26 +36,28 @@ class HaiDan(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 签到 - sign_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://www.haidan.video/signin.php") - if not sign_res or sign_res.status_code != 200: + html_text = self.get_page_source(url='https://www.haidan.video/signin.php', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in sign_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=sign_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._succeed_regex) if sign_status: logger.info(f"签到成功") return True, f'【{site}】签到成功' - logger.error(f"签到失败,签到接口返回 {sign_res.text}") + logger.error(f"签到失败,签到接口返回 {html_text}") return False, f'【{site}】签到失败' diff --git a/app/plugins/autosignin/sites/hares.py b/app/plugins/autosignin/sites/hares.py index 2f14534c..c7249c81 100644 --- a/app/plugins/autosignin/sites/hares.py +++ b/app/plugins/autosignin/sites/hares.py @@ -38,20 +38,23 @@ class Hares(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 获取页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://club.hares.top") - if not html_res or html_res.status_code != 200: + html_text = self.get_page_source(url='https://club.hares.top', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + + if not html_text: logger.error(f"模拟访问失败,请检查站点连通性") return False, f'【{site}】模拟访问失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"模拟访问失败,cookie失效") - return False, f'【{site}】模拟访问失败,cookie失效' + if "login.php" in html_text: + logger.error(f"模拟访问失败,Cookie失效") + return False, f'【{site}】模拟访问失败,Cookie失效' # if self._sign_text in html_res.text: # logger.info(f"今日已签到") @@ -63,7 +66,7 @@ class Hares(_ISiteSigninHandler): } sign_res = RequestUtils(cookies=site_cookie, headers=headers, - proxies=proxy + proxies=proxies ).get_res(url="https://club.hares.top/attendance.php?action=sign") if not sign_res or sign_res.status_code != 200: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/hdarea.py b/app/plugins/autosignin/sites/hdarea.py index 8ee533fe..22f4dd20 100644 --- a/app/plugins/autosignin/sites/hdarea.py +++ b/app/plugins/autosignin/sites/hdarea.py @@ -39,7 +39,7 @@ class HDArea(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None # 获取页面html data = { @@ -47,15 +47,15 @@ class HDArea(_ISiteSigninHandler): } html_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url="https://www.hdarea.co/sign_in.php", data=data) if not html_res or html_res.status_code != 200: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' if "login.php" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 判断是否已签到 # '已连续签到278天,此次签到您获得了100魔力值奖励!' diff --git a/app/plugins/autosignin/sites/hdchina.py b/app/plugins/autosignin/sites/hdchina.py index 768fd67f..cb424020 100644 --- a/app/plugins/autosignin/sites/hdchina.py +++ b/app/plugins/autosignin/sites/hdchina.py @@ -39,7 +39,7 @@ class HDChina(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None # 尝试解决瓷器cookie每天签到后过期,只保留hdchina=部分 cookie = "" @@ -52,22 +52,22 @@ class HDChina(_ISiteSigninHandler): cookie += sub_str + ";" if "hdchina=" not in cookie: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' site_cookie = cookie # 获取页面html html_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).get_res(url="https://hdchina.org/index.php") if not html_res or html_res.status_code != 200: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' if "login.php" in html_res.text or "阻断页面" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 获取新返回的cookie进行签到 site_cookie = ';'.join(['{}={}'.format(k, v) for k, v in html_res.cookies.get_dict().items()]) @@ -99,7 +99,7 @@ class HDChina(_ISiteSigninHandler): } sign_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url="https://hdchina.org/plugin_sign-in.php?cmd=signin", data=data) if not sign_res or sign_res.status_code != 200: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/hdcity.py b/app/plugins/autosignin/sites/hdcity.py index 9bb4de76..0069a2ad 100644 --- a/app/plugins/autosignin/sites/hdcity.py +++ b/app/plugins/autosignin/sites/hdcity.py @@ -5,7 +5,6 @@ from ruamel.yaml import CommentedMap from app.core.config import settings from app.log import logger from app.plugins.autosignin.sites import _ISiteSigninHandler -from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -39,28 +38,30 @@ class HDCity(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 获取页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://hdcity.city/sign") - if not html_res or html_res.status_code != 200: + html_text = self.get_page_source(url='https://hdcity.city/sign', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 判断是否已签到 # '已连续签到278天,此次签到您获得了100魔力值奖励!' - if self._success_text in html_res.text: + if self._success_text in html_text: logger.info(f"签到成功") return True, f'【{site}】签到成功' - if self._repeat_text in html_res.text: + if self._repeat_text in html_text: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' - logger.error(f"签到失败,签到接口返回 {html_res.text}") + logger.error(f"签到失败,签到接口返回 {html_text}") return False, f'【{site}】签到失败' diff --git a/app/plugins/autosignin/sites/hdsky.py b/app/plugins/autosignin/sites/hdsky.py index 764698ca..b92e5fdf 100644 --- a/app/plugins/autosignin/sites/hdsky.py +++ b/app/plugins/autosignin/sites/hdsky.py @@ -40,22 +40,24 @@ class HDSky(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 判断今日是否已签到 - index_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url='https://hdsky.me') - if not index_res or index_res.status_code != 200: + html_text = self.get_page_source(url='https://hdsky.me', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in index_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=index_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") @@ -67,7 +69,7 @@ class HDSky(_ISiteSigninHandler): while not img_hash and res_times <= 3: image_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url='https://hdsky.me/image_code_ajax.php', data={'action': 'new'}) if image_res and image_res.status_code == 200: @@ -112,7 +114,7 @@ class HDSky(_ISiteSigninHandler): # 访问签到链接 res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url='https://hdsky.me/showup.php', data=data) if res and res.status_code == 200: if json.loads(res.text)["success"]: diff --git a/app/plugins/autosignin/sites/hdupt.py b/app/plugins/autosignin/sites/hdupt.py index b3bf8eea..acb2835e 100644 --- a/app/plugins/autosignin/sites/hdupt.py +++ b/app/plugins/autosignin/sites/hdupt.py @@ -6,7 +6,6 @@ from ruamel.yaml import CommentedMap from app.core.config import settings from app.log import logger from app.plugins.autosignin.sites import _ISiteSigninHandler -from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -41,41 +40,44 @@ class HDUpt(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 获取页面html - index_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://pt.hdupt.com") - if not index_res or index_res.status_code != 200: + html_text = self.get_page_source(url='https://pt.hdupt.com', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in index_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=index_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 签到 - sign_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).post_res(url="https://pt.hdupt.com/added.php?action=qiandao") - if not sign_res or sign_res.status_code != 200: + html_text = self.get_page_source(url='https://pt.hdupt.com/added.php?action=qiandao', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - logger.debug(f"签到接口返回 {sign_res.text}") + logger.debug(f"签到接口返回 {html_text}") # 判断是否已签到 sign_res.text = ".23" - if len(list(map(int, re.findall(r"\d+", sign_res.text)))) > 0: + if len(list(map(int, re.findall(r"\d+", html_text)))) > 0: logger.info(f"签到成功") return True, f'【{site}】签到成功' - logger.error(f"签到失败,签到接口返回 {sign_res.text}") + logger.error(f"签到失败,签到接口返回 {html_text}") return False, f'【{site}】签到失败' diff --git a/app/plugins/autosignin/sites/opencd.py b/app/plugins/autosignin/sites/opencd.py index 8e7f0d41..d6d06082 100644 --- a/app/plugins/autosignin/sites/opencd.py +++ b/app/plugins/autosignin/sites/opencd.py @@ -41,36 +41,39 @@ class Opencd(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 判断今日是否已签到 - index_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url='https://www.open.cd') - if not index_res or index_res.status_code != 200: + html_text = self.get_page_source(url='https://www.open.cd', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in index_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - if self._repeat_text in index_res.text: + if self._repeat_text in html_text: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 获取签到参数 - sign_param_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url='https://www.open.cd/plugin_sign-in.php') - if not sign_param_res or sign_param_res.status_code != 200: + html_text = self.get_page_source(url='https://www.open.cd/plugin_sign-in.php', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' # 没有签到则解析html - html = etree.HTML(sign_param_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】签到失败' @@ -112,7 +115,7 @@ class Opencd(_ISiteSigninHandler): # 访问签到链接 sign_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url='https://www.open.cd/plugin_sign-in.php?cmd=signin', data=data) if sign_res and sign_res.status_code == 200: logger.debug(f"sign_res返回 {sign_res.text}") diff --git a/app/plugins/autosignin/sites/pterclub.py b/app/plugins/autosignin/sites/pterclub.py index 4336289e..601767f3 100644 --- a/app/plugins/autosignin/sites/pterclub.py +++ b/app/plugins/autosignin/sites/pterclub.py @@ -6,7 +6,6 @@ from ruamel.yaml import CommentedMap from app.core.config import settings from app.log import logger from app.plugins.autosignin.sites import _ISiteSigninHandler -from app.utils.http import RequestUtils from app.utils.string import StringUtils @@ -35,18 +34,20 @@ class PTerClub(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 签到 - sign_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://pterclub.com/attendance-ajax.php") - if not sign_res or sign_res.status_code != 200: + html_text = self.get_page_source(url='https://pterclub.com/attendance-ajax.php', + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,签到接口请求失败") return False, f'【{site}】签到失败,请检查cookie是否失效' - sign_dict = json.loads(sign_res.text) + sign_dict = json.loads(html_text) if sign_dict['status'] == '1': # {"status":"1","data":" (签到已成功300)","message":"
这是您的第237次签到, # 已连续签到237天。
本次签到获得300克猫粮。
"} diff --git a/app/plugins/autosignin/sites/tjupt.py b/app/plugins/autosignin/sites/tjupt.py index 1edc9f0f..d92c9601 100644 --- a/app/plugins/autosignin/sites/tjupt.py +++ b/app/plugins/autosignin/sites/tjupt.py @@ -55,35 +55,37 @@ class Tjupt(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 创建正确答案存储目录 if not os.path.exists(os.path.dirname(self._answer_file)): os.makedirs(os.path.dirname(self._answer_file)) # 获取北洋签到页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url=self._sign_in_url) + html_text = self.get_page_source(url=self._sign_in_url, + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) # 获取签到后返回html,判断是否签到成功 - if not html_res or html_res.status_code != 200: + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' - sign_status = self.sign_in_result(html_res=html_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 没有签到则解析html - html = etree.HTML(html_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】签到失败' img_url = html.xpath('//table[@class="captcha"]//img/@src')[0] @@ -98,7 +100,7 @@ class Tjupt(_ISiteSigninHandler): # 获取签到图片hash captcha_img_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).get_res(url=img_url) if not captcha_img_res or captcha_img_res.status_code != 200: logger.error(f"签到图片 {img_url} 请求失败") @@ -136,7 +138,7 @@ class Tjupt(_ISiteSigninHandler): return self.__signin(answer=value, site_cookie=site_cookie, ua=ua, - proxy=proxy, + proxies=proxies, site=site) except (FileNotFoundError, IOError, OSError) as e: logger.debug(f"查询本地已知答案失败:{e},继续请求豆瓣查询") @@ -179,7 +181,7 @@ class Tjupt(_ISiteSigninHandler): return self.__signin(answer=value, site_cookie=site_cookie, ua=ua, - proxy=proxy, + proxies=proxies, site=site, exits_answers=exits_answers, captcha_img_hash=captcha_img_hash) @@ -191,7 +193,7 @@ class Tjupt(_ISiteSigninHandler): # 没有匹配签到成功,则签到失败 return False, f'【{site}】签到失败,未获取到匹配答案' - def __signin(self, answer, site_cookie, ua, proxy, site, exits_answers=None, captcha_img_hash=None): + def __signin(self, answer, site_cookie, ua, proxies, site, exits_answers=None, captcha_img_hash=None): """ 签到请求 """ @@ -202,7 +204,7 @@ class Tjupt(_ISiteSigninHandler): logger.debug(f"提交data {data}") sign_in_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url=self._sign_in_url, data=data) if not sign_in_res or sign_in_res.status_code != 200: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/ttg.py b/app/plugins/autosignin/sites/ttg.py index bf731053..2aee59b4 100644 --- a/app/plugins/autosignin/sites/ttg.py +++ b/app/plugins/autosignin/sites/ttg.py @@ -42,32 +42,33 @@ class TTG(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 获取页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://totheglory.im") - if not html_res or html_res.status_code != 200: + html_text = self.get_page_source(url="https://totheglory.im", + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 判断是否已签到 - html_res.encoding = "utf-8" - sign_status = self.sign_in_result(html_res=html_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 获取签到参数 - signed_timestamp = re.search('(?<=signed_timestamp: ")\\d{10}', html_res.text).group() - signed_token = re.search('(?<=signed_token: ").*(?=")', html_res.text).group() + signed_timestamp = re.search('(?<=signed_timestamp: ")\\d{10}', html_text).group() + signed_token = re.search('(?<=signed_token: ").*(?=")', html_text).group() logger.debug(f"signed_timestamp={signed_timestamp} signed_token={signed_token}") data = { @@ -77,7 +78,7 @@ class TTG(_ISiteSigninHandler): # 签到 sign_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url="https://totheglory.im/signed.php", data=data) if not sign_res or sign_res.status_code != 200: diff --git a/app/plugins/autosignin/sites/u2.py b/app/plugins/autosignin/sites/u2.py index 890c157b..6b077cb9 100644 --- a/app/plugins/autosignin/sites/u2.py +++ b/app/plugins/autosignin/sites/u2.py @@ -48,7 +48,8 @@ class U2(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") now = datetime.datetime.now() # 判断当前时间是否小于9点 @@ -57,28 +58,28 @@ class U2(_ISiteSigninHandler): return False, f'【{site}】签到失败,9点前不签到' # 获取页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://u2.dmhy.org/showup.php") - if not html_res or html_res.status_code != 200: + html_text = self.get_page_source(url="https://u2.dmhy.org/showup.php", + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"签到失败,请检查站点连通性") return False, f'【{site}】签到失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"签到失败,cookie失效") - return False, f'【{site}】签到失败,cookie失效' + if "login.php" in html_text: + logger.error(f"签到失败,Cookie失效") + return False, f'【{site}】签到失败,Cookie失效' # 判断是否已签到 - html_res.encoding = "utf-8" - sign_status = self.sign_in_result(html_res=html_res.text, + sign_status = self.sign_in_result(html_res=html_text, regexs=self._sign_regex) if sign_status: logger.info(f"今日已签到") return True, f'【{site}】今日已签到' # 没有签到则解析html - html = etree.HTML(html_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】签到失败' @@ -105,7 +106,7 @@ class U2(_ISiteSigninHandler): # 签到 sign_res = RequestUtils(cookies=site_cookie, headers=ua, - proxies=proxy + proxies=proxies ).post_res(url="https://u2.dmhy.org/showup.php?action=show", data=data) if not sign_res or sign_res.status_code != 200: diff --git a/app/plugins/autosignin/sites/zhuque.py b/app/plugins/autosignin/sites/zhuque.py index be3f9400..0661cac8 100644 --- a/app/plugins/autosignin/sites/zhuque.py +++ b/app/plugins/autosignin/sites/zhuque.py @@ -36,22 +36,24 @@ class ZhuQue(_ISiteSigninHandler): site = site_info.get("name") site_cookie = site_info.get("cookie") ua = site_info.get("ua") - proxy = settings.PROXY if site_info.get("proxy") else None + proxies = settings.PROXY if site_info.get("proxy") else None + render = site_info.get("render") # 获取页面html - html_res = RequestUtils(cookies=site_cookie, - headers=ua, - proxies=proxy - ).get_res(url="https://zhuque.in") - if not html_res or html_res.status_code != 200: + html_text = self.get_page_source(url="https://zhuque.in", + cookie=site_cookie, + ua=ua, + proxies=proxies, + render=render) + if not html_text: logger.error(f"模拟登录失败,请检查站点连通性") return False, f'【{site}】模拟登录失败,请检查站点连通性' - if "login.php" in html_res.text: - logger.error(f"模拟登录失败,cookie失效") - return False, f'【{site}】模拟登录失败,cookie失效' + if "login.php" in html_text: + logger.error(f"模拟登录失败,Cookie失效") + return False, f'【{site}】模拟登录失败,Cookie失效' - html = etree.HTML(html_res.text) + html = etree.HTML(html_text) if not html: return False, f'【{site}】模拟登录失败' @@ -71,7 +73,7 @@ class ZhuQue(_ISiteSigninHandler): } skill_res = RequestUtils(cookies=site_cookie, headers=headers, - proxies=proxy + proxies=proxies ).post_res(url="https://zhuque.in/api/gaming/fireGenshinCharacterMagic", json=data) if not skill_res or skill_res.status_code != 200: logger.error(f"模拟登录失败,释放技能失败") diff --git a/app/plugins/sitestatistic/__init__.py b/app/plugins/sitestatistic/__init__.py index b0cbecfc..e3252a2e 100644 --- a/app/plugins/sitestatistic/__init__.py +++ b/app/plugins/sitestatistic/__init__.py @@ -109,7 +109,7 @@ class SiteStatistic(_PluginBase): html_text = PlaywrightHelper().get_page_source(url=url, cookies=site_cookie, ua=ua, - proxy=proxies) + proxies=proxies) else: # 普通模式 res = RequestUtils(cookies=site_cookie,