作者:wenxuanlee | 来源:互联网 | 2022-12-13 11:38
我试图以与Puppeteer在NodeJS中相同的方式连接到Chromium 。
在NodeJS中,这看起来非常简单。您向stdio数组添加了另外两个参数,并且有了管道。
我无法在Puppeteer-Sharp中实现相同的逻辑。我花了一些时间在这里阅读许多问题和答案。我读到有关AnonymousPipeServerStream的信息,但并不高兴。
这是一个我无法使其工作的示例:
AnonymousPipeServerStream streamReader = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable);
AnonymousPipeServerStream streamWriter = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable);
var chromeProcess = new Process();
chromeProcess.EnableRaisingEvents = true;
chromeProcess.StartInfo.UseShellExecute = false;
chromeProcess.StartInfo.FileName = "/.local-chromium/MacOS-536395/chrome-mac/Chromium.app/Contents/MacOS/Chromium";
chromeProcess.StartInfo.Arguments =
"--MANY-MANY-ARGUMENTS " +
"--remote-debugging-pipe " +
"--user-data-dir=/var/folders/0k/4qzqprl541b74ddz4wwj_ph40000gn/T/mz0trgjc.vlj " +
"--no-sandbox " +
"--disable-dev-shm-usage " +
streamReader.GetClientHandleAsString() +
streamWriter.GetClientHandleAsString();
chromeProcess.Start();
streamReader.DisposeLocalCopyOfClientHandle();
streamWriter.DisposeLocalCopyOfClientHandle();
Task task = Task.Factory.StartNew(async () =>
{
var reader = new StreamReader(streamReader);
while (true)
{
var respOnse= await reader.ReadToEndAsync();
if (!string.IsNullOrEmpty(response))
{
Console.WriteLine(response);
}
}
});
Console.ReadLine();
许多示例表明,您必须将GetClientHandleAsString()
as作为参数传递,但是我看不到它如何连接到进程。
这是完整示例的要点