PuppeteerSharp调用page.GoToAsync时触发Protocol error (Page.navigate): Invalid referrerPolicy错误求助
兄弟,我之前踩过这个坑,给你几个实用的排查和解决方向,你可以一步步试:
先查显式传递的referrerPolicy参数:你有没有在调用
GoToAsync时,通过NavigationOptions指定过ReferrerPolicy?比如写过类似下面的代码:await page.GoToAsync(fromURL.ToString(), new NavigationOptions { ReferrerPolicy = "xxx" });如果有的话,一定要确认这个值是Chrome认可的合法选项——比如
no-referrer、no-referrer-when-downgrade、origin、strict-origin-when-cross-origin这些,拼写半点儿都不能错,多打个空格或者拼错字母都会触发这个错误。要是你没显式指定过,那大概率是隐式传递的参数出问题了:比如当前页面的
document.referrer被改成了不合法的值,或者你用的PuppeteerSharp版本和Chrome/Chromium版本不兼容。老版本的PuppeteerSharp有时候对新的referrerPolicy值支持有bug,或者Chrome版本太新,PuppeteerSharp还没跟上CDP协议的变化。别被目标页面的referrer policy带偏:你说目标页面的Referrer Policy是
strict-origin-when-cross-origin,但这个是目标页面自己设置的响应头,和你发起导航请求时传的referrerPolicy参数完全是两码事!错误是Chrome在处理导航请求时,收到了不合法的referrerPolicy参数,问题出在请求发起方(你的代码或者PuppeteerSharp的内部处理),和目标页面的设置没关系。给你个临时解决的招:调用
GoToAsync时直接强制指定一个合法的referrerPolicy,比如就用你看到的那个strict-origin-when-cross-origin,代码这么写:await page.GoToAsync(fromURL.ToString(), new NavigationOptions { ReferrerPolicy = "strict-origin-when-cross-origin" });这样能绕过自动生成参数时可能出现的错误。
最后别忘了更个新:把PuppeteerSharp升级到最新稳定版,很多这类参数解析的小bug在新版本里都被修复了。
内容来源于stack exchange

