autowrite.py 2.0 KB

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