Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Webbrowser.document不会更新_.net_Visual Studio - Fatal编程技术网

.net Webbrowser.document不会更新

.net Webbrowser.document不会更新,.net,visual-studio,.net,Visual Studio,我正在尝试开发一个必须与网页交互的应用程序 我使用内置的webbrowser来填写第一张表格并提交。没问题 单击此表单时,页面将加载不同的html代码,这是在具有相同页面的表单上执行的第二步。它不会触发document completed事件,更糟糕的是,它不会更改文档项。documenttext项具有新代码,页面在表单上完美显示,但document项仍保留旧代码。没有文档,我无法单击第二个按钮 所以,有两个问题 有没有办法强制文档加载新的html代码,这样我就可以单击它 有没有办法不使用Htm

我正在尝试开发一个必须与网页交互的应用程序

我使用内置的webbrowser来填写第一张表格并提交。没问题

单击此表单时,页面将加载不同的html代码,这是在具有相同页面的表单上执行的第二步。它不会触发document completed事件,更糟糕的是,它不会更改文档项。documenttext项具有新代码,页面在表单上完美显示,但document项仍保留旧代码。没有文档,我无法单击第二个按钮

所以,有两个问题

有没有办法强制文档加载新的html代码,这样我就可以单击它

有没有办法不使用Htmlelement.InvokeMember单击该按钮

Private Sub login()
  Browser.Navigate("website")
  docflag.WaitOne()
  docflag.Reset()
  Dim inputs As HtmlElementCollection = document.GetElementsByTagName("input")
  Dim login As HtmlElement = Nothing
  For Each item As HtmlElement In inputs
    Select Case item.Id
      Case "nick"
        item.SetAttribute("value", TBUsuario.Text)
      Case "pass"
        item.SetAttribute("value", TBPass.Text)
      Case ""
        Dim src As String = item.GetAttribute("src")
        If src.IndexOf("/login.gif") <> -1 Then
         login = item
        End If
    End Select
  Next
  Conecta(True)
  login.InvokeMember("click")
  docflag.WaitOne()
   docflag.Reset()
  'msg(document.Body.OuterHtml) returns code of the first page
  'msg(document.documenttext) returns code of the actual page   
  document.GetelementById("identrar" + TBCodigo.Text).InvokeMember("click")
  docflag.WaitOne()
  docflag.Reset()
End Sub

Private Sub Browser_DocumentCompleted(sender As Object, e As      WebBrowserDocumentCompletedEventArgs) Handles Browser.DocumentCompleted
document = Browser.Document
docflag.Set()
msg("Pagina cargada")
End Sub

编辑以包含一些代码。我在试图解决这个问题时读到,在使用webbrowser时,我应该使用一个线程,但这似乎不是问题。我在一个线程上尝试过,文档也没有改变。首先使用webbrowser。Navigateabout:blank

我真的做不到。也许我没有解释清楚。我加载第一个页面,然后使用item.invokemember,然后加载第二个页面。如果我在中间加载:blank,我将无法调用它。到目前为止,您尝试了什么?你能提供一些没有按你想要的方式工作的示例代码吗?编辑以包含一些代码。现在我完全迷路了,因为我看到的使用此元素的唯一替代选项是自己发送post消息,这会很快变得混乱——你不能在UI线程上调用WaitOne。阻止UI线程可防止触发DocumentCompleted事件。您的代码需要移动到DocumentCompleted事件。使用变量跟踪状态。我不会在ui线程中调用Waitone。子登录在不同的线程中工作。代码运行良好,我可以加载每个页面。问题是,当页面上有可变内容时,我会得到一个名为variable content的空div的初始代码,文档不会改变以反映任何更改,因此我不能使用variable content divEditing中声明的任何元素来表示解决的不是StackOverflow的工作方式。如果你自己已经找到了一个解决方案,你应该把它作为一个答案发布。在这里回答你自己的问题是非常好的,并且在关于发布答案的部分中提到了这一点。你甚至可以认为自己的答案是正确的。这两个方面你都不会赢得任何声誉,但它清楚地表明你已经找到了一个解决方案,并提供给未来的读者。出于这个原因,我正在回滚您上次的编辑。