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