该页面有问题 C#Webview2

问题描述

我已经在VS 2019中构建了一个C#Windows窗体应用程序,其中包括Webview2(最新的预发行版)以创建浏览器。该应用程序加载页面并检查特定内容。如果内容不存在,它将重新加载页面。如果内容存在(尚未发生),它将填写一些字段并单击一个按钮。

该应用正常运行了一段时间。现在,每隔一段时间我就会在Webview2控件中得到以下内容:

此页面有问题。请稍后再回来

您还可以:打开一个新标签刷新页面

错误代码:STATUS_ACCESS_VIOLATION

我在调试模式下运行该应用程序以尝试捕获该错误。没有例外。而且,如果我在ContentLoading控件的Webview2事件中放置一个断点,则在看到此错误页面之前它不会触发。我不确定是什么触发它或如何停止它。

在Form_load中,我称以下内容:

async void checksites()
{
    await wv2Dig.EnsureCoreWebView2Async();
    wv2Dig.CoreWebView2.Navigate(strURL);
}

然后ContentLoading将调用下面的函数,该函数尝试在页面加载时检查内容,以便在页面完全加载之前做出决定。现在,它只是触发我们不想要的按钮。这是代码:

async Task DigPageCheck()
        {
            iDigCount += 1; //count of number of checks
            txtDig.Text = iDigCount.ToString(); //display count

            string strResult = await wv2Dig.CoreWebView2.ExecuteScriptAsync("document.documentElement.innerHTML;");  
            //get innerHTML
            strResult = Regex.Unescape(strResult);
            strResult = strResult.Remove(0,1);
            strResult = strResult.Remove(strResult.Length - 1,1);
            //check for button we want
            int loc = strResult.IndexOf("btn btn-primary btn-lg btn-block btn-leading-ficon add-to-cart-button"); 
            //check for button we want
            int loc2 = strResult.IndexOf("btn btn-disabled btn-lg btn-block add-to-cart-button"); x
            while (loc == -1 && loc2 == -1)
            {
                //while neither button exists wait and check again
                await Task.Delay(200);
                strResult = await wv2Dig.CoreWebView2.ExecuteScriptAsync("document.documentElement.innerHTML;");
                strResult = Regex.Unescape(strResult);
                strResult = strResult.Remove(0,1);
                strResult = strResult.Remove(strResult.Length - 1,1);
                loc = strResult.IndexOf("btn btn-primary btn-lg btn-block btn-leading-ficon add-to-cart-button");
                loc2 = strResult.IndexOf("btn btn-disabled btn-lg btn-block add-to-cart-button");

            }
            //the button we want has been found 
            if (loc != -1)
            {
                iDig += 1;
                string mSubj = "Found";
                try
                {
                    sendSMS(mSubj,strDigURL);
                }
                catch
                {
                    label3.Text = "Email Error";
                }
                var functionString = string.Format(@"document.getElementsByClassName('btn btn-primary btn-lg btn-block btn-leading-ficon add-to-cart-button')[0].click();");
                await wv2Dig.CoreWebView2.ExecuteScriptAsync(functionString);
                
            }
            else //button we don't want found
            {
                if (bRun) //app is in run state,it can be paused
                    wv2Dig.CoreWebView2.Reload(); //Reload the page and check again
            }
        }

在重新加载时似乎出现了错误页面。

以下内容通过删除WebView2 prelease 0.9.682和安装预发行版0.9.579解决了

我有一个随机弹出的新问题。该应用程序冻结在await wv2Dig.EnsureCoreWebView2Async();的函数Form_Load

解决方法

我在进行wv2Dig.CoreWebView2.Stop()之前添加了wv2Dig.CoreWebView2.Reload(),此后我再也没有发现问题。我认为这可能已经解决了问题。我说我认为是因为该程序运行了一段时间没有出现问题,然后开始出现问题。

在此过程中,我还降级了WebView2的预发行版本,因为WebView2完全停止工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...