Playwright .NET中点击导航时WaitForURLAsync的竞态问题
Playwright .NET绑定SPA导航竞态问题
问题重现
使用Playwright .NET绑定时,点击元素触发导航存在竞态问题,示例代码如下:
await page.ClickAsync(".foo"); // 间接触发页面导航 await page.WaitForNavigationAsync(); // 因竞态条件导致超时
该问题继承自Puppeteer(Playwright基于其分叉开发),当时针对C#-JS互操作特性,推荐的解决方式是先启动等待导航的任务,再执行点击操作:
var task = page.WaitForNavigationAsync(); await page.ClickAsync(".foo"); await task;
WaitForURLAsync的异常表现
Playwright后续推出了WaitForURLAsync方法,官方宣称可解决此类竞态问题,示例代码如下:
await page.ClickAsync(".foo"); await page.WaitForURLAsync();
但我在爬取单页应用(SPA)时,使用上述代码仍会出现竞态超时;而改用旧模式先启动等待任务再点击,问题就消失了:
var task = page.WaitForURLAsync(); await page.ClickAsync(".foo"); await task;
疑问
由于涉及保密内容无法提供具体复现网站,想了解:
- .NET版本的
WaitForURLAsync实现逻辑是否与Node.js版本完全一致? - 是否有其他用户遇到过相同问题?对应的可行解决办法有哪些?
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

