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