问题描述
我已经在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完全停止工作。