2

我可能错过了一个非常基本的东西,但我只是不明白为什么这不起作用。

我希望根据一些用户输入填写一些网络表单。

我已经在 vbscript 中写了这个,它可以完美地工作。现在我想将它导入到 VB。

我的 2 个主要问题 atm。

之前,我会有一段代码:

   For Each wnd In CreateObject("Shell.Application").Windows
  If InStr(1, wnd.FullName, "iexplore.exe", vbTextCompare) > 0 Then
    Set IE = wnd
    Exit For
  End If
Next

用于决定使用哪个 Internet Explorer 窗口。但是,如果我在 VB 中使用这种形式,我几乎会错过任何类型的事件处理。我不能使用 IsBusy,我不能使用 DocumentCompleted 或任何东西。

因此,我必须将 IE 声明为浏览器。

Dim IE As New WebBrowser

看起来不错..除了..现在我无法在任何地方导航,没有创建浏览器,没有任何事情发生。所以当我运行我的代码时:

IE.Navigate("www.awebwithusernameandpasswordform.org")
                IE.Visible = True



                Helem = IE.Document.GetElementById("username")
                Helem.Value = "xxxx"
                Helem = IE.Document.GetElementById("password")
                Helem.Value = "xxxx"
                Helem = IE.Document.Forms("signupForm")
                Helem.Submit()

它只是在元素“用户名”处失败,因为它永远无法导航到网站。

它就像它只是忽略了 IE.Navigate。我尝试使用 process.start() 运行一个新进程,但这也不起作用,它仍然没有为我打开网页或任何东西。

其次,当文档完全加载时,我在检查 vb 时遇到了重大问题。在 VBS 中我使用

Do while ie.readystate <> 4 or ie.busy or ie.document.readystate <> "complete" 
wscript.sleep 500 
Loop 
Do until ie.document.readystate = "complete" 
wscript.sleep 500 
Loop

这就像一个魅力。

在 VB 中,无法识别 ie.document.readystate,而且我似乎无法让 DocumentCompleted 事件处理工作。我从这个网站尝试了几件事,但要么他们只是让一切都挂起,要么由于各种原因它不起作用。我尝试了如何等待 WebBrowser 在 VB.NET 中完全加载中的 2 个解决方案?但他们都只是让脚本挂起。

任何提示将非常感谢..

4

1 回答 1

0

正在发生的事情是您的代码运行速度比浏览器可以导航的速度快,这意味着您尝试在加载任何元素之前获取元素,正如 Bjørn-Roger Kringsjå 试图说的那样。

您需要做的是在.Navigateand之间等待.GetElementById

IE.Navigate("www.awebwithusernameandpasswordform.org")

'WAIT BEFORE COMPLETION

'Continue
Helem = IE.Document.GetElementById("username")
Helem.Value = "xxxx"

但是,这确实很难在线进行,因此不推荐。DocumentCompleted加载页面后,最好使用浏览器控件的事件处理程序来运行代码。希望这足以清除它。

于 2015-03-05T11:05:51.600 回答