如何通过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




