PuppeteerSharp 错误无法建立连接,因为目标机器主动拒绝它 127.0.0.1:Port
PuppeteerSharp error No connection could be made because the target machine actively refused it 127.0.0.1:Port
我有 PuppeteerSharp 项目,我需要保存 cookie,所以我使用以下代码:
browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
UserDataDir = Path.Combine(".", "user-data-dir"),
});
我得到这个错误
No connection could be made because the target machine actively
refused it 127.0.0.1:PortNumber
但是当我将 Headless 设置为 false 时,它 运行 没有任何问题。当我用谷歌搜索错误消息时,大多数解决方案都是关于防火墙的,所以我关闭了防火墙但没有任何变化。
看完这篇issue,看来我们应该用UserDataDir
的绝对路径,所以这个工作正常:
browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
UserDataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".local-chromium", "Win64-884014", "chrome-win", "UserData").Replace(@"\", @"\")
});
但是另一个问题出现了,因为浏览器没有保存任何cookie。
同样,github 上的一些问题表示应该关闭浏览器以保存 cookie。我试过这个:
await page.CloseAsync();
await browser.CloseAsync();
但它没有按预期工作,因为浏览器仍在后台 运行。我的最终解决方案是:
var chromes = System.Diagnostics.Process.GetProcesses().Where(x => x.ProcessName == "chrome").ToList();
foreach (var ch in chromes)
{
try
{
ch.Kill();
}
catch
{
}
}
以上代码将关闭所有 chrome 浏览器,因此可能需要进行一些更改才能仅关闭当前浏览器。
我有 PuppeteerSharp 项目,我需要保存 cookie,所以我使用以下代码:
browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
UserDataDir = Path.Combine(".", "user-data-dir"),
});
我得到这个错误
No connection could be made because the target machine actively refused it 127.0.0.1:PortNumber
但是当我将 Headless 设置为 false 时,它 运行 没有任何问题。当我用谷歌搜索错误消息时,大多数解决方案都是关于防火墙的,所以我关闭了防火墙但没有任何变化。
看完这篇issue,看来我们应该用UserDataDir
的绝对路径,所以这个工作正常:
browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
UserDataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".local-chromium", "Win64-884014", "chrome-win", "UserData").Replace(@"\", @"\")
});
但是另一个问题出现了,因为浏览器没有保存任何cookie。 同样,github 上的一些问题表示应该关闭浏览器以保存 cookie。我试过这个:
await page.CloseAsync();
await browser.CloseAsync();
但它没有按预期工作,因为浏览器仍在后台 运行。我的最终解决方案是:
var chromes = System.Diagnostics.Process.GetProcesses().Where(x => x.ProcessName == "chrome").ToList();
foreach (var ch in chromes)
{
try
{
ch.Kill();
}
catch
{
}
}
以上代码将关闭所有 chrome 浏览器,因此可能需要进行一些更改才能仅关闭当前浏览器。