【问题标题】:PuppeteerSharp error No connection could be made because the target machine actively refused it 127.0.0.1:PortPuppeteerSharp 错误 No connection could be made because the target machine主动拒绝它 127.0.0.1:Port
【发布时间】:2021-09-27 16:26:04
【问题描述】:

我有 PuppeteerSharp 项目,我需要保存 cookie,所以我使用以下代码:

browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
        Headless = true,
        UserDataDir = Path.Combine(".", "user-data-dir"),
});

我收到错误这个错误

无法建立连接,因为目标机器主动 拒绝它 127.0.0.1:PortNumber

但是当我将 Headless 设置为 false 时,它​​运行没有任何问题。当我在谷歌上搜索错误消息时,大多数解决方案都提到了防火墙,所以我关闭了防火墙但没有任何变化。

【问题讨论】:

  • 您是否考虑过使用 Fiddler 来找出请求之间的差异?我过去也看到过类似的问题,标题因Headless 而异。

标签: c# puppeteer-sharp


【解决方案1】:

读完这个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浏览器,所以可能需要做一些修改才能只关闭当前的浏览器。

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 2018-01-22
    • 2020-07-05
    • 2016-07-25
    • 2022-01-23
    • 2019-02-01
    • 2018-12-16
    • 2020-12-11
    • 2018-11-02
    相关资源
    最近更新 更多