From b5a04c3751cbfc2ae22a85ea91173312ea3398f0 Mon Sep 17 00:00:00 2001 From: zzx Date: Fri, 1 Aug 2025 18:10:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=A7=98=E5=A1=94ai?= =?UTF-8?q?=E6=90=9C=E7=B4=A2session=E6=A3=80=E6=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abs_spider.py | 8 +++++++- main.py | 2 +- spiders/ai_seo/metaso.py | 25 +++++++++++++++++++++---- utils/ai_seo_api_utils.py | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/abs_spider.py b/abs_spider.py index 432f1d9..2ed7303 100644 --- a/abs_spider.py +++ b/abs_spider.py @@ -72,6 +72,7 @@ class AbstractAiSeoSpider(ABC): if self.load_session: self.session_info = await get_spider_session(self.platform_id, id) if self.platform_id != 8: + print(self.session_info['session_path']) self.browser_content = await self.browser.new_context(storage_state=self.session_info['session_path']) else: self.browser_content = await self.browser.new_context() @@ -129,7 +130,12 @@ class AbstractAiSeoSpider(ABC): logger.error(f"[{self.get_platform_name()}]session状态无效! ❌ id: {session_id}") # 更新session状态 - await AiSeoApis.update_spider_session(session_id, 1 if result else 2) + status = None + if self.get_platform_id() != 13: + status = 1 if result else 2 + else: + status = 1 if result else 3 + await AiSeoApis.update_spider_session(session_id, status) return result diff --git a/main.py b/main.py index 73acdfa..f55a4c7 100644 --- a/main.py +++ b/main.py @@ -84,7 +84,7 @@ async def test(): await asyncio.sleep(config.TEST_INTERVAL * 6) async def test_check_session(): - sessions = await AiSeoApis.list_spider_session(1) + sessions = await AiSeoApis.list_spider_session(13) playwright, browser = await init_browser() for session in sessions: spider = get_spider(session['platform_id'], '你好', '品牌词', browser) diff --git a/spiders/ai_seo/metaso.py b/spiders/ai_seo/metaso.py index cae559a..999c659 100644 --- a/spiders/ai_seo/metaso.py +++ b/spiders/ai_seo/metaso.py @@ -112,10 +112,6 @@ class MetasoSpider(AbstractAiSeoSpider): def get_platform_name(self) -> str: return 'Metaso' - - - - async def __listen_response(self, response): url = response.url if response.status == 200: @@ -194,6 +190,7 @@ class MetasoSpider(AbstractAiSeoSpider): else: pass + def handle_listen_response_error(self, func): """ 装饰器 用于处理请求回调中的异常 @@ -214,6 +211,26 @@ class MetasoSpider(AbstractAiSeoSpider): return wrapper + async def do_check_session(self) -> bool: + try: + await self.browser_page.goto(self.get_home_url(), timeout=200000) + await asyncio.sleep(2) + info = await self.browser_page.wait_for_selector( + '#left-menu > div > div.LeftMenu_footer__qsJdJ > div > div > div > button', timeout=600000) + await info.click() + edu = self.browser_page.locator( + '//div[@aria-label="每天有100搜索额度"]/following-sibling::div[1]//span[contains(@class, "MuiTypography-root")]') + edu_txt = await edu.text_content() + if edu_txt == '0': + return False + # 开始操作 + chat_input_element = self.browser_page.locator("//textarea[contains(@class, 'search-consult-textarea')]") + # 输入提问词 + await chat_input_element.fill(self.prompt) + logger.info(f"[{self.get_platform_name()}]查询还剩{edu_txt} 次") + return True + except Exception: + return False async def run(): diff --git a/utils/ai_seo_api_utils.py b/utils/ai_seo_api_utils.py index 80c134b..cd8755e 100644 --- a/utils/ai_seo_api_utils.py +++ b/utils/ai_seo_api_utils.py @@ -180,7 +180,7 @@ class AiSeoApis: uri = '/api/third/getOneSpiderSession' url = AiSeoApis.build_full_url(uri) json_data = {**config.AI_SEO_API_AUTH, 'platform_id': platform_id} - if not id: + if id: json_data['id'] = id async with httpx.AsyncClient() as client: response = await client.get(url, params=json_data, timeout=60)