我正在尝试使用 .NET core 和我在下面共享的代码创建一个无头 Chrome。根据“https://developer.chrome.com/docs/chromium/new-headless”,它必须将 WebSocket URL 发送到标准输出。启动进程后,我创建了延迟以允许 chrome 启动。我已经阅读了标准输出和标准错误,但两者都是空的。我已经根据上面的链接尝试了一些尝试和错误,但仍然面临问题。
除此之外,对于使用 JS 修改 HTML 或在 .NET Core 中使用此 websocket URL 的网页抓取网站来说,使用“--dump-dom”是更好的方法
static void Main(string[] args)
{
StartBrowser().GetAwaiter().GetResult();
}
public static async Task StartBrowser()
{
using (var process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome";
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
string arguments = "--headless=new --remote-debugging-port=0 https://developer.chrome.com/";
process.StartInfo.Arguments = arguments;
Console.WriteLine("Start Time:" + DateTime.Now.ToString());
process.Start();
await Task.Delay(20000);
Task<string> output = process.StandardOutput.ReadToEndAsync();
Task<string> error = process.StandardError.ReadToEndAsync();
var task =await Task.WhenAll(output,error);
Console.WriteLine(process.StandardOutput.ReadToEnd());
Console.WriteLine(process.StandardError.ReadToEnd());
Console.WriteLine("End Time: " + DateTime.Now.ToString();
process.WaitForExit();
}
}
此外,当我尝试使用邮递员连接到 CDP 套接字并尝试执行一些命令(如“Page.enable”、Network.enable)时,许多或不起作用,只有“Target”相关命令正在工作。
ReadToEnd()
!你正在用它阻挡!并且在 chrome 退出之前不会得到输出!
您可以删除所有等待/任务/延迟等并使用它:
// your existing code till process.Start()
while (true)
{
string? stdErrorLine = process.StandardError.ReadLine();
if (stdErrorLine != null)
{
Console.WriteLine(stdErrorLine);
}
else
{
break;
}
}
Console.WriteLine("End Time: " + DateTime.Now.ToString();
process.WaitForExit();