|
|
@@ -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()
|