Преглед изворни кода

Google search 模块化到新文件中

mrh пре 1 година
родитељ
комит
3eaccf12ff
3 измењених фајлова са 61 додато и 34 уклоњено
  1. 1 1
      readme.md
  2. 1 33
      worker/search_engine/camoufox_broswer.py
  3. 59 0
      worker/search_engine/google_search.py

+ 1 - 1
readme.md

@@ -69,7 +69,7 @@ https://github.com/rebrowser/rebrowser-playwright-python
 
 0.98k ⭐  反机器人检测的浏览器
 https://github.com/daijro/camoufox
-
+浏览器启动信息: about:support
 
 机器人检测的网站,测试用
 https://www.browserscan.net/bot-detection

+ 1 - 33
worker/search_engine/camoufox_broswer.py

@@ -97,42 +97,14 @@ class BrowserCore(IBrowserCore):
     async def get_page_info(self) -> dict:
         pass
 
-# ------------------- Search Engine Implementation -------------------
-class GoogleSearchHandler(ISearchHandler):
-    """搜索引擎专用处理器(可继承扩展其他引擎)"""
-    def __init__(self, browser_core: BrowserCore):
-        self.core = browser_core
-        self.page = self.core.page
-    async def goto_home_page(self):
-        url = "https://www.google.com"
-        if self.page.url != url:
-            await self.page.goto(url)
-    async def search(self, query: str) -> dict:
-        """执行搜索操作"""
-        try:
-            await self.goto_home_page()
-            # 使用 aria-label 定位 textarea 并填入数据
-            await self.page.fill('textarea[aria-label="Search"]', query)
-            # 模拟按下回车键
-            await self.page.press('textarea[aria-label="Search"]', 'Enter')        
-            return await self.page.content()
-        except Exception as e:
-            logging.error(f"Search failed: {str(e)}")
-            return {"status": "error", "message": str(e)}
-
-    async def next_page(self) -> dict:
-        pass
-
 
 # ------------------- API Service -------------------
 async def aio_main(config: BrowserConfig = BrowserConfig()):
     """API服务主循环"""
     core = await BrowserCore.get_instance(config)
-    search_handler = GoogleSearchHandler(core)
     
     try:
-        await search_handler.search('python')
-        logging.info(f"API服务已启动 | 初始页面: {search_handler.page.url}")
+        logging.info(f"API服务已启动 | 初始页面: {core.page.url}")
         while core.status == 'running':
             await asyncio.sleep(5)
             
@@ -148,8 +120,4 @@ def main():
     asyncio.run(aio_main())
 
 if __name__ == "__main__":
-    config = BrowserConfig(
-        headless=True,
-        init_url="https://www.google.com"
-    )
     main()

+ 59 - 0
worker/search_engine/google_search.py

@@ -0,0 +1,59 @@
+import asyncio
+import logging
+from worker.search_engine.camoufox_broswer import BrowserCore,BrowserConfig
+
+# ------------------- Search Engine Implementation -------------------
+class GoogleSearchHandler():
+    """搜索引擎专用处理器(可继承扩展其他引擎)"""
+    def __init__(self, browser_core: BrowserCore):
+        self.core = browser_core
+        self.page = self.core.page
+    async def goto_home_page(self):
+        url = "https://www.google.com"
+        if self.page.url != url:
+            await self.page.goto(url)
+    async def search(self, query: str) -> dict:
+        """执行搜索操作"""
+        try:
+            await self.goto_home_page()
+            # 使用 aria-label 定位 textarea 并填入数据
+            await self.page.fill('textarea[aria-label="Search"]', query)
+            # 模拟按下回车键
+            await self.page.press('textarea[aria-label="Search"]', 'Enter')        
+            return await self.page.content()
+        except Exception as e:
+            logging.error(f"Search failed: {str(e)}")
+            return {"status": "error", "message": str(e)}
+
+    async def next_page(self) -> dict:
+        pass
+
+# ------------------- API Service -------------------
+async def aio_main(config: BrowserConfig = BrowserConfig()):
+    """API服务主循环"""
+    core = await BrowserCore.get_instance(config)
+    search_handler = GoogleSearchHandler(core)
+    
+    try:
+        await search_handler.search('python playwright')
+        logging.info(f"API服务已启动 | 初始页面: {core.page.url}")
+        while core.status == 'running':
+            await asyncio.sleep(5)
+            
+    except KeyboardInterrupt:
+        logging.info("接收到终止信号,关闭浏览器...")
+    except Exception as e:
+        logging.error(f"API服务异常: {str(e)}")
+    finally:
+        await core.close()
+        logging.info("API服务已停止")
+
+def main():
+    asyncio.run(aio_main())
+
+if __name__ == "__main__":
+    config = BrowserConfig(
+        headless=True,
+        init_url="https://www.google.com"
+    )
+    main()