2015-05-12 89 views
0

我有一个vb.net的Windows窗体。在表单中我正在运行Web浏览器控件。我试图用vb代码点击一个按钮。我发现这个直接调用js函数的例子,但我没有任何运气。 How can I click a js button on VBvb.net点击一个JavaScript按钮

为IS-

<input class="boldbutton" type="button" value="Verify" 
    onclick="this.form.knob.value='ReqVerify';this.form.verify.value=1;this.form.submit()"> 

我的VB代码是 -

WebBrowser1.Document.InvokeScript(
    "this.form.knob.value='ReqVerify';this.form.verify.value=1;this.form.submit()" 
) 

按钮的HTML我不知道我要去的地方错了。按下提交按钮后,会在网页上显示一条日志,显示活动。我在运行脚本时没有看到任何活动,仅当我手动从另一个浏览器(而不是Windows窗体中的)按下按钮时。

+0

为什么你想从* Windows Form *应用程序调用Web浏览器控件?两者都是不同的平台。 –

+0

我的表单在访问数据库上执行查询。它拉取结果并将它们存储为变量。它使用变量来打开正确的网页。一旦网页打开,它应该点击验证按钮。 –

回答

0

我能够得到这个工作。这是我的代码

For Each el As HtmlElement In WebBrowser1.Document.GetElementsByTagName("INPUT") 
      If (el.GetAttribute("value").Equals("Verify")) Then 
       el.InvokeMember("click") 
      End If 
     Next 
0

你的问题是你的vb.net的javascript调用没有this的参考点。当您单击Web浏览器中的按钮时,this引用该按钮。

当您拨打WebBrowser1.Document.InvokeScriptthis是指全球的东西,也许是窗口?

无论使用哪种方式,您都可以调用按钮单击。通过在按钮上添加一个ID,例如btnSubmit来做到这一点。然后做:

Dim search As HtmlElement = webBrowser1.Document.GetElementById("btnSubmit")  
If search IsNot Nothing Then   
     For Each ele as HtmlElement in search.Parent.Children 
      If ele.TagName.ToLower() = "input" AndAlso ele.Id.ToLower() = "btnSubmit" Then     
       ele.InvokeMember("click") 
       Exit For 
      End If 
     Next 
    End If 

从(C#)摘自:https://stackoverflow.com/a/5227644/1160796

另一个选项是修复你的JavaScript代码。通过将this.form更改为表单的ID来完成此操作。再次,如果没有身份证,则设置一个,例如frmMain。然后做:

WebBrowser1.Document.InvokeScript("frmMain.knob.value='ReqVerify';frmMain.verify.value=1;frmMain.submit()") 

如果您不必更改网站源的能力,然后使用document.forms。假设它是唯一的形式:

WebBrowser1.Document.InvokeScript("document.forms(0).knob.value='ReqVerify';document.forms(0).verify.value=1;document.forms(0).submit()") 
+0

要通过id获取元素,您是否需要查看id标签?我没有看到页面上列出的元素。我看到type =“”和value =“”但不是id。我误解了什么吗? –

+0

@JeremyTourville我的印象是你创建了你正在与之交互的网站。我的错。 – basher

+0

@JeremyTourville检查最新的编辑。 – basher

0

进口系统 进口System.Data 进口System.Data.OleDb

公共类Form1中 昏暗CON作为新的OleDbConnection(“供应商= Microsoft.ACE.OLEDB。 12.0;数据源= | DataDirectory目录| \ VulnScanData.accdb;坚持安全信息= TRUE;喷气OLEDB:数据库密码= ************“)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'opens connection to database 
    con.Open() 
    WebBrowser1.Navigate("https://fs-enterprise.my.private.url/") 
End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnLogin.Click 
    WebBrowser1.Document.GetElementById("name").SetAttribute("value", TextBox1.Text) 
    WebBrowser1.Document.GetElementById("password").SetAttribute("value", TextBox2.Text) 
    WebBrowser1.Document.GetElementById("Logon").InvokeMember("click") 
End Sub 

Private Sub BtnQuery_Click(sender As Object, e As EventArgs) Handles BtnQuery.Click 
    'open transaction object 
    Dim trans As OleDb.OleDbTransaction 
    trans = con.BeginTransaction 
    'define the command which allows you to read, write or update the db 
    Dim cmd As New OleDb.OleDbCommand 
    'define the query   
    cmd.CommandText = "SELECT [Ticket ID] AS Ticket_ID FROM [Table_Main] WHERE ([Ticket Days OverDue] >= 1)" 
    'assign the connection 
    cmd.Connection = con 
    'assign the transaction 
    cmd.Transaction = trans 
    'execte the command 
    Dim myreader As OleDb.OleDbDataReader 
    myreader = cmd.ExecuteReader 
    Do While myreader.Read 
     MsgBox(myreader.Item("Ticket_ID")) 
     Dim result As String = myreader.Item("Ticket_ID") 
     WebBrowser1.Navigate("https://fs-enterprise.my.private.url/remediation/ticket.exp?ticket=" & result) 
     Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete 
      Application.DoEvents() 
     Loop 
     '<input class="boldbutton" type="button" value="Verify" onclick="this.form.knob.value='ReqVerify';this.form.verify.value=1;this.form.submit()"></td> 
     'WebBrowser1.Document.InvokeScript("document.forms(0).knob.value='ReqVerify';document.forms(0).verify.value=1;document.forms(0).submit()") 
     WebBrowser1.Document.InvokeScript("this.form.knob.value='ReqVerify';this.form.verify.value=1;this.form.submit()") 
     MessageBox.Show("Submitting Ticket") 
    Loop 
    myreader.Close() 
    con.Close() 
End Sub 

末级