WPF浏览器:如何等待页面加载

时间:2013-05-24 03:39:55

标签: c# wpf webbrowser-control

我的WPF浏览器有问题。我想加载一个网页。 等待它完全加载,然后输入少量搜索输入,然后检索结果并将其放入excel中。

我无法这样做,主程序加载并在加载pagecomplete_event之前完成执行。场景是:

  1. 加载组件提供商网站
  2. 转到搜索选项并搜索我正在为EXCEL文件阅读的部件号
  3. 将部件号放在搜索栏中,然后点击搜索
  4. 下载详细信息
  5. 重复许多部分的步骤
  6. 我用WinForms完成了这项工作,效果很好。问题是调用DOEVENTS。它有时会使我的程序挂起,特别是如果在一个大的列表上运行。所以想在WPF中做到这一点。

    我已经发布了Load_Complete事件,但正如我所提到的那样,在主程序完成之后事件发生了。

    我搜索了这个链接:How to create and use WebBrowser in background thread。但它似乎没有帮助 - 在WPF中似乎没有System.Windows.Deployment - 我得到了红色波浪形的下划线。我找到的其他解决方案似乎也无济于事。

1 个答案:

答案 0 :(得分:0)

这让我困扰了一段时间,终于找到了解决方案。现在我对vb.net相当新,所以这可能不是最好的方式,但确实有效。这是在vb.net中,您可以轻松转换为c#。

AddHandler (webbrowser1.LoadCompleted), AddressOf WebpageLoaded
    webbrowser1.Navigate("http://www.myWebsite.net/admin/")

这会创建一个触发WebpageLoaded子的事件。

我用它来等待页面加载然后登录我的帐户。 我就是这样做的。

Private Sub WebpageLoaded()
    If webbrowser1.Url.ToString = "http://www.myWebsite.net/admin/" Then
        webbrowser1.Document.GetElementById("username").ScrollIntoView(True)
        webbrowser1.Document.GetElementById("username").SetAttribute("value", "myUsername")
        webbrowser1.Document.GetElementById("password").SetAttribute("value", "myPassword")
    End If
End Sub

我希望这会有所帮助。您可能不需要ScrollIntoView我只是使用它来查看进度,因为我终于让它工作了。