我在 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 并安装 prerelease 0.9.579 解决了以下问题
我有一个随机弹出的新问题。应用程序冻结
await wv2Dig.EnsureCoreWebView2Async();
在一个调用的函数中Form_Load