.net 不确定如何使用WaitForNavigationAsync()

fnatzsnv  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(238)

我有这个密码

public static async Task ClickSearchButton(IPage page)
{
    //await page.ClickAsync("#searchBtn");
    //Thread.Sleep(5000);

    await Task.WhenAll(page.ClickAsync("#searchBtn"), page.WaitForNavigationAsync(new NavigationOptions() { WaitUntil = new[] { WaitUntilNavigation.Networkidle0 } }));
}

注解掉的部分大部分时间都能正常工作,但我想删除Sleep的部分。我在寻找解决方案时尝试了许多不同的方法,但似乎无法让它正常工作。当我运行这段代码时,它返回:

System.TimeoutException: Timeout of 30000 ms exceeded

我已经尝试了所有的等待导航选项(加载、DOM内容加载、Networkidle0、Networkidle2)。
我尝试做的是在我填写完表单之后,我点击搜索按钮。一个全新的页面不会加载,它只是填充在表单选项下面。我假设运行的是JavaScript。

zbwhf8kr

zbwhf8kr1#

你得到的错误是说Puppeteer在等待元素时超时了。因为它有时会工作,你可以增加超时时间。
如果查看源代码,您可以看到以两种方式引用超时https://github.com/hardkoded/puppeteer-sharp/blob/master/lib/PuppeteerSharp/FrameManager.cs#L98
您可以全局执行此操作-这将用于所有导航查询

// Set the default timeout to 10 seconds
TimeoutSettings.NavigationTimeout = 10_000;

await page.ClickAsync("#searchBtn");
await page.WaitForNavigationAsync();

或者,您可以设置选择器调用的超时以仅影响此查询

await page.ClickAsync("#searchBtn");
await page.WaitForNavigationAsync(new NavigationOptions
{
    Timeout = 10_000
});

相关问题