VB表格填写

时间:2015-01-07 00:15:44

标签: vb.net webforms readystate

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

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

我已经在vbscript中写了这个,它的工作完美无瑕。现在我想将它导入VB。

我的两个主要问题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 Explore窗口。但是,如果我在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事件处理工作。我从这个网站尝试了几件事,但要么他们只是让一切都挂起,要么它只是因为各种原因而无法工作。我尝试了How to wait until WebBrowser is completely loaded in VB.NET?的2个解决方案,但它们都只是让脚本挂起。

任何提示都将非常感谢..

1 个答案:

答案 0 :(得分:0)

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

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

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

'WAIT BEFORE COMPLETION

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

然而,在线进行这种非常非常棘手,不建议这样做。最好使用DocumentCompleted事件处理程序使浏览器控件在加载页面后运行代码。希望这能够彻底清除它。