DEV Community

drake
drake

Posted on

playwright通过CDP远程连接浏览器并且控制

import asyncio # Correct import: import async_playwright from playwright.async_api import async_playwright async def connect_and_control_playwright(): # Correct usage: async with async_playwright() as p:  async with async_playwright() as p: print("Playwright: Initializing...") try: # 连接到已开放 9222 端口的浏览器  # 注意:Playwright 默认连接到 'ws://localhost:9222/devtools/browser'  # 你可能需要根据实际情况调整 URL。  # 通常,连接到 HTTP 端口即可,Playwright 会自动发现 WebSocket URL。  browser = await p.chromium.connect_over_cdp("http://localhost:9222") print("Playwright: Successfully connected to browser via CDP.") # 获取默认的上下文(context)  # 对于 connect_over_cdp,通常会有一个默认的浏览器上下文  # 如果没有,则创建一个新的  if browser.contexts: context = browser.contexts[0] print("Playwright: Using existing browser context.") else: context = await browser.new_context() print("Playwright: Created a new browser context.") # 尝试获取现有页面,如果存在则复用,否则打开新页面  pages = context.pages if pages: page = pages[0] # 复用第一个现有页面  print("Playwright: Reusing existing page.") else: page = await context.new_page() # 如果没有页面,则打开新页面  print("Playwright: No existing pages found, opened a new page.") # 导航到指定 URL  await page.goto("https://www.google.com") print(f"Playwright: Navigated to {page.url}") # 获取页面标题  title = await page.title() print(f"Playwright: Page title is '{title}'") # 截图并保存  await page.screenshot(path="playwright_screenshot.png") print("Playwright: Screenshot saved as 'playwright_screenshot.png'") except Exception as e: print(f"Playwright Error: {e}") print("Please ensure your Chrome browser is running with --remote-debugging-port=9222.") print("Example: google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/my-chrome-profile") finally: # 确保在任何情况下都尝试关闭浏览器连接  if 'browser' in locals() and browser: await browser.close() print("Playwright: Disconnected from the browser.") if __name__ == "__main__": asyncio.run(connect_and_control_playwright()) 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)