python实现网页端远程控制playwright打开的headless网页交互代码

代码语言:python

所属分类:其他

代码描述:python实现网页端远程控制playwright打开的headless网页交互代码,python通过playwright打开一个网页,然后通过http对外提供一个可以远程实时显示和控制playwright打开的网页的网址,别的用户打开这个网页后可远程控制这个playwright打开的headless网页,类似于远程桌面一样的体验,客户端通过webrtc来实时接收playwright发送过来的帧数据,将鼠标键盘等控制数据实时发送给playwright,适合ai agent虚拟浏览器可视化操作。

代码标签: python 网页 远程 控制 playwright 打开 headless 网页 交互 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

import asyncio
import json
import logging
import base64
import io

from PIL import Image
from aiohttp import web

# 核心库导入
from aiortc import RTCPeerConnection, RTCSessionDescription, VideoStreamTrack
from aiortc.mediastreams import VideoFrame
from aiortc.contrib.media import MediaRelay
from playwright.async_api import async_playwright, Error as PlaywrightError

# --- 配置 ---
HOST = "0.0.0.0"
PORT = 8080
TARGET_URL = "https://www.bing.com" # 您可以换成任何想远程交互的网站
VIEWPORT_WIDTH = 1280
VIEWPORT_HEIGHT = 720

# --- 前端页面 (无变化) ---
INDEX_HTML = f"""
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>远程交互式查看 Headless Chrome</title>
    <style>
        body {{ font-family: sans-serif; text-align: center; background-color: #f0f0f0; margin: 0; padding: 20px; }}
        h1 {{ color: #333; }}
        #video-container {{ position: relative; display: inline-block; }}
        video {{ 
            background: black; border: 1px solid #ccc; 
            width: {VIEWPORT_WIDTH}px; height: {VIEWPORT_HEIGHT}px; 
            
        }}
        button {{ font-size: 1.2em; padding: 10px 20px; cursor: pointer; border-radius: 5px; border: none; background-color: #007bff; color: white; transition: background-color 0.3s; }}
        button:disabled {{ background-color: #cccccc; cursor: not-allowed; }}
        button:hover:not(:disabled) {{ background-color: #0056b3; }}
    </style>
</head>
<body>
    <h1>远程交互式查看 Headless Chrome <button id="startButton">开始查看</button></h1>
   
    <div id="video-container">
        <video id="video" autoplay playsinline></video>
    </div>

    <script>
        const startButton = document.getElementById('startButton');
        const videoElement = document.getElementById('video');
        let pc = null;
        let dc = null;

        function sendControl(data) {{
            if (dc && dc.readyState === 'open') {{
                dc.send.........完整代码请登录后点击上方下载按钮下载查看

网友评论0