webBrowser1_DocumentCompleted 事件后单击按钮
Click button after webBrowser1_DocumentCompleted event
我有一个 C# 4.0 WinForms 应用程序,它有一个 WebBrowser 控件和两个按钮。
单击第一个按钮会向浏览器发送 URL 以导航到指定的网站。
单击第二个按钮解析 webBrowser1.Document 的 OuterHtml,寻找“https://...”link 进行文件下载。
代码然后使用 webClient.DownloadFileAsync 提取文件以在应用程序中进一步使用。
以上代码成功运行,如果 我手动点击那些按钮。
为了为最终用户自动执行此操作,我放置了第一个按钮的点击事件,即 btnDisplayWeb.PerformClick();在表单的 Form1_Load 事件中。这也有效,允许 webBrowser1 使用所需的网站填充其文档。
但是,我无法以编程方式单击第二个按钮来获取用于文件下载的网络 link。
我尝试将第二个按钮的单击事件放在浏览器的 DocumentCompleted 事件中,如下所示。
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
btnMyUrl.PerformClick();
}
但是,根据我在 Whosebug 和其他网站上阅读的内容,这个特定事件有可能被调用不止一次,因此失败了。
我也曾尝试循环数秒,甚至使用 Thread.Sleep(xxxx),但浏览器 window 无法填充,直到睡眠或计时器停止。
我尝试使用在如下所示的 Whosebug 网站上找到的建议。
如何在C#中使用WebBrowser控制DocumentCompleted事件?
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string url = e.Url.ToString();
if (!(url.StartsWith("http://") || url.StartsWith("https://")))
{
// in AJAX
}
if (e.Url.AbsolutePath != this.webBrowser.Url.AbsolutePath)
{
// IFRAME
}
else
{
// REAL DOCUMENT COMPLETE
}
}
但是,在解析 OuterHtml 时,前两部分没有返回任何内容,而在第三部分中,返回了其他元素,而不是所需的“https://...” link文件下载。
有趣的是,如果我使用一个webBrowser1.ReadyState事件,如下图,并在DocumentCompleted中放置一个MessageBox,这似乎可以让浏览器文档完成,因为点击确定按钮后,解析成功.
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
MessageBox.Show("waiting", "CHECKING");
btnMyUrl.PerformClick();
}
但是,我很难找到一种方法来单击 MessageBox 的“确定”按钮。
在 DocumentCompleted 事件之后是否还有另一个事件发生。
或者,有人可以建议如何以编程方式关闭 MessageBox 吗?
如果这可以在代码中完成,那么我可以在该段代码中执行第二个按钮的 buttonClick()。
在发现添加 MessageBox 允许 webBrowser1.Document 完成,并在 webBrowser_DocumentCompleted 事件中使用 webBrowser1.ReadyState 事件后,我需要做的就是找到一个以编程方式关闭 MessageBox 的方法。
在 Whosebug 上进一步搜索后发现以下站点上的解决方案。
Close a MessageBox after several seconds
实施 AutoClosingMessageBox 并设置时间间隔,关闭 MessageBox 并允许我单击按钮,即 btnMyUrl.PerformClick();成功解析 OuterHtml,现在代码可以正常工作。
希望,如果其他人发现在 webBrowser_DocumentCompleted 事件中放置 MessageBox 可以完成文档;前面提到的 AutoClosingMessageBox 也会帮助他们。
我有一个 C# 4.0 WinForms 应用程序,它有一个 WebBrowser 控件和两个按钮。
单击第一个按钮会向浏览器发送 URL 以导航到指定的网站。
单击第二个按钮解析 webBrowser1.Document 的 OuterHtml,寻找“https://...”link 进行文件下载。
代码然后使用 webClient.DownloadFileAsync 提取文件以在应用程序中进一步使用。
以上代码成功运行,如果 我手动点击那些按钮。
为了为最终用户自动执行此操作,我放置了第一个按钮的点击事件,即 btnDisplayWeb.PerformClick();在表单的 Form1_Load 事件中。这也有效,允许 webBrowser1 使用所需的网站填充其文档。
但是,我无法以编程方式单击第二个按钮来获取用于文件下载的网络 link。
我尝试将第二个按钮的单击事件放在浏览器的 DocumentCompleted 事件中,如下所示。
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
btnMyUrl.PerformClick();
}
但是,根据我在 Whosebug 和其他网站上阅读的内容,这个特定事件有可能被调用不止一次,因此失败了。
我也曾尝试循环数秒,甚至使用 Thread.Sleep(xxxx),但浏览器 window 无法填充,直到睡眠或计时器停止。
我尝试使用在如下所示的 Whosebug 网站上找到的建议。
如何在C#中使用WebBrowser控制DocumentCompleted事件?
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string url = e.Url.ToString();
if (!(url.StartsWith("http://") || url.StartsWith("https://")))
{
// in AJAX
}
if (e.Url.AbsolutePath != this.webBrowser.Url.AbsolutePath)
{
// IFRAME
}
else
{
// REAL DOCUMENT COMPLETE
}
}
但是,在解析 OuterHtml 时,前两部分没有返回任何内容,而在第三部分中,返回了其他元素,而不是所需的“https://...” link文件下载。
有趣的是,如果我使用一个webBrowser1.ReadyState事件,如下图,并在DocumentCompleted中放置一个MessageBox,这似乎可以让浏览器文档完成,因为点击确定按钮后,解析成功.
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
MessageBox.Show("waiting", "CHECKING");
btnMyUrl.PerformClick();
}
但是,我很难找到一种方法来单击 MessageBox 的“确定”按钮。
在 DocumentCompleted 事件之后是否还有另一个事件发生。 或者,有人可以建议如何以编程方式关闭 MessageBox 吗?
如果这可以在代码中完成,那么我可以在该段代码中执行第二个按钮的 buttonClick()。
在发现添加 MessageBox 允许 webBrowser1.Document 完成,并在 webBrowser_DocumentCompleted 事件中使用 webBrowser1.ReadyState 事件后,我需要做的就是找到一个以编程方式关闭 MessageBox 的方法。
在 Whosebug 上进一步搜索后发现以下站点上的解决方案。
Close a MessageBox after several seconds
实施 AutoClosingMessageBox 并设置时间间隔,关闭 MessageBox 并允许我单击按钮,即 btnMyUrl.PerformClick();成功解析 OuterHtml,现在代码可以正常工作。
希望,如果其他人发现在 webBrowser_DocumentCompleted 事件中放置 MessageBox 可以完成文档;前面提到的 AutoClosingMessageBox 也会帮助他们。