You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过CMD批处理或PowerShell访问并检查edge://translate-internals页面

如何通过CMD批处理或PowerShell访问并检查edge://translate-internals页面

嘿,我之前刚好研究过类似的需求,Edge的edge://translate-internals作为内部调试页面,确实没法直接用CMD或者PowerShell直接“访问”它的内容,但有几个可行的方向可以帮你实现自动化查询甚至修改,给你拆解下:

1. 利用Edge远程调试接口(最靠谱的动态数据方案)

Edge支持Chrome DevTools Protocol(CDP),这是浏览器自动化的标准方式。你可以通过启动Edge时开启调试端口,再用PowerShell通过WebSocket和浏览器通信,加载目标页面并获取内容。

步骤和示例脚本:

  • 先关闭所有Edge进程,避免调试端口冲突:
    Stop-Process -Name msedge -Force -ErrorAction SilentlyContinue
    
  • 启动Edge并开启远程调试:
    Start-Process "msedge.exe" --remote-debugging-port=9222
    
  • 用PowerShell连接调试接口,加载edge://translate-internals并获取页面内容:
    # 获取调试目标的WebSocket地址
    $debugTargets = Invoke-RestMethod -Uri "http://localhost:9222/json"
    $target = $debugTargets | Where-Object { $_.type -eq "page" } | Select-Object -First 1
    $wsUrl = $target.webSocketDebuggerUrl
    
    # 建立WebSocket连接
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $cts = New-Object System.Threading.CancellationTokenSource
    $connectTask = $ws.ConnectAsync([Uri]$wsUrl, $cts.Token)
    $connectTask.Wait()
    
    # 发送导航命令到translate-internals页面
    $navigateCmd = @{
        id = 1
        method = "Page.navigate"
        params = @{ url = "edge://translate-internals" }
    } | ConvertTo-Json
    $buffer = [System.Text.Encoding]::UTF8.GetBytes($navigateCmd)
    $sendTask = $ws.SendAsync([System.ArraySegment[Byte]]$buffer, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $cts.Token)
    $sendTask.Wait()
    
    # 等待页面加载完成,获取页面HTML内容
    $receiveBuffer = New-Object Byte[] 1024
    do {
        $receiveTask = $ws.ReceiveAsync([System.ArraySegment[Byte]]$receiveBuffer, $cts.Token)
        $receiveTask.Wait()
        $response = [System.Text.Encoding]::UTF8.GetString($receiveBuffer, 0, $receiveTask.Result.Count)
        $responseObj = $response | ConvertFrom-Json -ErrorAction SilentlyContinue
    
        # 页面加载完成后,执行JS获取HTML
        if ($responseObj.method -eq "Page.loadEventFired") {
            $getHtmlCmd = @{
                id = 2
                method = "Runtime.evaluate"
                params = @{ expression = "document.documentElement.outerHTML" }
            } | ConvertTo-Json
            $buffer = [System.Text.Encoding]::UTF8.GetBytes($getHtmlCmd)
            $sendTask = $ws.SendAsync([System.ArraySegment[Byte]]$buffer, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $cts.Token)
            $sendTask.Wait()
        }
    
        # 提取并输出HTML内容
        if ($responseObj.id -eq 2) {
            $htmlContent = $responseObj.result.result.value
            Write-Host "获取到的translate-internals页面内容:`n"
            Write-Host $htmlContent
            break
        }
    } while ($ws.State -eq [System.Net.WebSockets.WebSocketState]::Open)
    
    # 关闭连接
    $closeTask = $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "操作完成", $cts.Token)
    $closeTask.Wait()
    
    这个方法能获取页面的动态状态(比如翻译服务是否在线、当前会话的翻译记录等),适合需要实时数据的场景。

2. 直接读取Edge翻译配置文件(轻量静态配置方案)

Edge的翻译相关配置其实存在用户数据目录的JSON文件里,不用启动浏览器就能读取,非常适合快速查询基础配置。

  • Edge默认用户数据路径:C:\Users\<你的用户名>\AppData\Local\Microsoft\Edge\User Data\Default
  • 核心配置文件是Preferences,用PowerShell解析示例:
    $preferencesPath = "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Preferences"
    $preferences = Get-Content $preferencesPath -Raw | ConvertFrom-Json
    
    # 提取翻译相关配置
    $translateSettings = $preferences.translate
    Write-Host "翻译功能是否启用:" $translateSettings.enabled
    Write-Host "默认目标语言:" $translateSettings.target_language
    Write-Host "自动翻译开关状态:" $translateSettings.auto_translate
    
    这个方法不需要启动浏览器,速度快,但只能拿到静态配置,没法获取页面里的动态状态信息。

3. 关于程序化修改翻译配置

如果需要修改翻译设置,直接修改Preferences文件是可行的,但要注意先关闭Edge(否则文件会被浏览器锁定):

# 关闭Edge进程
Stop-Process -Name msedge -Force -ErrorAction SilentlyContinue

# 读取并修改配置
$preferencesPath = "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Preferences"
$preferences = Get-Content $preferencesPath -Raw | ConvertFrom-Json
$preferences.translate.auto_translate = $true  # 开启自动翻译
$preferences.translate.target_language = "zh-CN"  # 设置默认目标语言为中文

# 保存修改后的配置
$preferences | ConvertTo-Json -Depth 10 | Set-Content $preferencesPath -Encoding UTF8

# 重启Edge
Start-Process "msedge.exe"

注意:Preferences的JSON结构可能随Edge版本更新变化,使用前建议先检查对应版本的结构是否匹配。

最后总结

  • 要获取动态页面内容(比如实时服务状态),优先用远程调试接口方案;
  • 只需要查询基础配置,用读取配置文件的方法更高效;
  • 两种方案都不需要依赖第三方工具,纯PowerShell就能实现,CMD批处理的话可以调用PowerShell脚本执行。

备注:内容来源于stack exchange,提问作者Foad

火山引擎 最新活动