|
|
@@ -0,0 +1,56 @@
|
|
|
+import asyncio
|
|
|
+from playwright.async_api import async_playwright
|
|
|
+
|
|
|
+# 执行自动化浏览器操作的协程函数
|
|
|
+
|
|
|
+
|
|
|
+async def run(playwright):
|
|
|
+ # 启动 Chromium 浏览器(设置为非 headless 模式,方便观察)
|
|
|
+ browser = await playwright.chromium.launch(headless=False)
|
|
|
+ context = await browser.new_context() # 创建新的浏览器上下文
|
|
|
+ page = await context.new_page() # 打开一个新的标签页
|
|
|
+
|
|
|
+ # 访问百度首页
|
|
|
+ await page.goto('https://www.baidu.com')
|
|
|
+
|
|
|
+ # 等待搜索框加载完成并输入关键词
|
|
|
+ search_input_selector = 'input#kw' # 百度搜索输入框的 ID 是 kw
|
|
|
+ await page.wait_for_selector(search_input_selector) # 等待元素加载
|
|
|
+ await page.fill(search_input_selector, 'Playwright 自动化') # 填入搜索关键词
|
|
|
+
|
|
|
+ # 等待搜索按钮加载并点击
|
|
|
+ search_button_selector = 'input#su' # 百度搜索按钮的 ID 是 su
|
|
|
+ # 确保按钮可见
|
|
|
+ await page.wait_for_selector(search_button_selector, state='visible')
|
|
|
+ await page.click(search_button_selector) # 点击搜索
|
|
|
+
|
|
|
+ print("已在百度搜索 'Playwright 自动化'")
|
|
|
+
|
|
|
+ # 保持页面停留 5 秒以便查看结果
|
|
|
+ await asyncio.sleep(5)
|
|
|
+
|
|
|
+ # 关闭浏览器
|
|
|
+ await browser.close()
|
|
|
+
|
|
|
+# 主函数,用于启动 playwright 并调用 run 函数
|
|
|
+
|
|
|
+
|
|
|
+async def main():
|
|
|
+ async with async_playwright() as playwright:
|
|
|
+ await run(playwright)
|
|
|
+
|
|
|
+# 判断当前环境是否已经有事件循环在运行
|
|
|
+if __name__ == "__main__":
|
|
|
+ try:
|
|
|
+ # 尝试获取正在运行的事件循环(某些 IDE/Jupyter 会预先启动)
|
|
|
+ loop = asyncio.get_running_loop()
|
|
|
+ except RuntimeError:
|
|
|
+ loop = None
|
|
|
+
|
|
|
+ # 如果事件循环存在且正在运行(比如在 Jupyter Notebook 中)
|
|
|
+ if loop and loop.is_running():
|
|
|
+ print("检测到事件循环正在运行,使用 create_task 启动协程")
|
|
|
+ asyncio.create_task(main()) # 使用 create_task 异步运行
|
|
|
+ else:
|
|
|
+ # 否则,正常使用 asyncio.run 启动主协程
|
|
|
+ asyncio.run(main())
|