2015-06-06 72 views
0

我必须编写简单的程序来点击Internet Explorer,已经开始,但是由于我在编程方面的经验不足,被困住了。在第一页11.html我需要点击带有文字“Sign1”的按钮,在下一个“Sign2”上在Internet Explorer中点击

//11.html  
<input type="button" class="button" onclick="document.location='21.html'" value="Sign1"> 

//21.html  
<input type="button" class="button" onclick="document.location='31.html'" value="Sign2"> 

什么是错?第二个按钮不起作用。

Public Class Form1 Public ie = CreateObject("InternetExplorer.Application") 

Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click 
    ie.Visible = True 
    ie.navigate("http://....com/11.html") 
    Do 
    Loop Until ie.ReadyState = 4 
    Actions() 
End Sub 

Private Sub Actions() 
    Dim eInputs = ie.Document.GetElementsByTagName("input") 
    For Each eInput In eInputs 
     If eInput.GetAttribute("value") = "Sign1" Then 
      eInput.Click() 
      Exit For 
     End If 
    Next 

    Threading.Thread.Sleep(5000) 

    //here ie href is about:blank - WHY??? 
    eInputs = ie.Document.GetElementsByTagName("input") 
    For Each eInput In eInputs 
     If eInput.GetAttribute("value") = "Sign2" Then 
      eInput.Click() 
      Exit For 
     End If 
    Next 
End Sub 
End Class 
+2

我不之间放认为西里尔字母可以被硬编码。这就是它应该是错误的,编译器会将它们编译为“???????” –

+0

感谢您的回复西里尔字母不起到任何作用:如果eInput.GetAttribute(“值”)=“SIGN1”那......如果eInput.GetAttribute(“值”)=“SIGN2”那... –

+0

在第二部分,即变量的href属性是关于:空白。那就是问题所在。 –

回答

0

我可以看到两个问题在这里:

  • 西里尔字母:

    If eInput.GetAttribute("value") = "Подписать2" Then 
    

    我不认为你可以硬编码这些字符到源代码,
    因为它们不会被编译器读取。因此,getAttribute方法返回正确的字符串的可能性很大,但是它将它与??????进行比较,因此它找不到它。也许,你可能想从外部来源获得它们(一个txt文件,一个数据库等)。

  • 两个按键之间没有等待时间:

    至于你说第二个按钮是行不通的。(非常广泛的定义:正在做什么?提出错误?),我假设第一个是。因此,您可能已经找到了解决字母问题的方法。 所以我认为问题是你没有足够的时间在一次点击和另一次点击之间,所以当你想点击第二个按钮时,页面还没有加载。

    基本上是:

    1)您点击客户端按钮1(比方说,谷歌浏览器);

    2)按钮1点击后台调用一个动作,所以服务器将开始生成新的HTML文档,在其中查找按钮2;

    3)......但是,你不给服务器任何时候重新生成页面,所以你已经认准按钮2,这可能还不在你的客户,因为服务器没有结束再生存在。

    所以,这就是为什么它不起作用。如果是这样的情况下,添加一个命令来等待一些时间才去寻找按钮2.目前尚不清楚其中的语言,因为你所引用的所有.NET语言你正在开发,但看着我的代码可以识别VB。净。

因此,为了等待在VB.NET5秒运行的代码的第二部分之前:

Threading.Thread.Sleep(5000) 

到所述第一和第二For Loop

+0

西里尔字母不起任何作用: –

+0

感谢您的回复 西里尔字母不起任何作用: 如果eInput.GetAttribute(“value”)=“Sign1”然后... 如果eInput.GetAttribute(“值“)=”Sign2“然后... 我试图等待1和2部分,但第二部分仍然无法正常工作。这就像ie.Document保持不变,虽然第一次点击后url已经改变。任何想法? –

+0

在第二部分,即可变href属性是关于:空白 –