![](/img/trans.png)
[英]Adding click event to button to fire javascript, through VB.NET
[英]vb.net click a javascript button
我有一个vb.net Windows表格。 在表单中,我正在运行Web浏览器控件。 我试图使用VB代码单击一个按钮。 我发现了直接调用js函数的示例,但是我没有任何运气。 如何在VB上单击js按钮
该按钮的html是-
<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()"
)
我不确定我要去哪里错。 按下提交按钮后,网页上会显示一条日志,显示活动。 仅当我从另一浏览器(而不是Windows窗体中的浏览器)手动按下按钮时,运行脚本时我没有看到任何活动。
你的问题是,你的vb.net的javascript调用有没有参考点this
。 当您单击Web浏览器的按钮, this
指的是按钮。
当您调用WebBrowser1.Document.InvokeScript
this
是指全局的东西,也许是窗口?
无论哪种方式,您都可以调用按钮单击。 为此,请向按钮添加一个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来实现。 同样,如果没有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()")
导入系统导入System.Data导入System.Data.OleDb
作为新OleDbConnection(“ Provider = Microsoft.ACE.OLEDB.12.0; Data Source = | DataDirectory | \\ VulnScanData.accdb;公共安全信息= True; Jet OLEDB:Database Password = ******* *****“)
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
末级
我能够使它工作。 这是我的代码
For Each el As HtmlElement In WebBrowser1.Document.GetElementsByTagName("INPUT")
If (el.GetAttribute("value").Equals("Verify")) Then
el.InvokeMember("click")
End If
Next
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.