如何使用vb.net以编程方式单击javascript显示链接?

如何使用vb.net以编程方式单击javascript显示链接?,vb.net,Vb.net,我正在尝试为我们的vb.net订单输入系统开发一个新功能。目前,我提供了一个辅助paypal登录,它可以循环处理交易并复制交易。然后,我的程序查看这些数据并将其复制到文本框中。然后操作员批准并保存记录 编辑:我需要在PayPal中查看交易。 因此,我的代码使用IHTMLFormElement并循环表单元素并添加值。然而,我真的只使用这个登录到贝宝。查看我的代码 Dim theObject As Object = Nothing theObject = "https://www.paypal.co

我正在尝试为我们的vb.net订单输入系统开发一个新功能。目前,我提供了一个辅助paypal登录,它可以循环处理交易并复制交易。然后,我的程序查看这些数据并将其复制到文本框中。然后操作员批准并保存记录


编辑:我需要在PayPal中查看交易。

因此,我的代码使用
IHTMLFormElement
并循环表单元素并添加值。然而,我真的只使用这个登录到贝宝。查看我的代码

Dim theObject As Object = Nothing
theObject = "https://www.paypal.com/cgi-bin/webscr?cmd=_login-run"

WebBrowPayPal.AxWebBrowser1.Navigate2(theObject)

While WebBrowPayPal.AxWebBrowser1.ReadyState <> 
   tagREADYSTATE.READYSTATE_COMPLETE
  Application.DoEvents()
End While

Dim HtmlDoc As IHTMLDocument2 = CType(WebBrowPayPal.AxWebBrowser1.Document, 
    IHTMLDocument2)
Dim FormCol As IHTMLElementCollection = HtmlDoc.forms

Dim iForms As Integer = FormCol.length
Dim i As Integer
Dim x As Integer
For i = 0 To iForms - 1
 Dim oForm As IHTMLFormElement = CType(FormCol.item(CType(i, Object), 
     CType(i, Object)), IHTMLFormElement)

 For x = 0 To oForm.length - 1
  If oForm.elements(x).tagname = "INPUT" Then 
    If oForm.elements(x).name = "login_email" Then
      oForm.elements(x).value = "PayPal@mydomain.com"
    End If

    If oForm.elements(x).name = "login_password" Then
     oForm.elements(x).value = "mypassword"
    End If

    If oForm.elements(x).type = "submit" Or _
       oForm.elements(x).type = "SUBMIT" Then
      oForm.elements(x).click()
    End If
  End If 
 Next
Next i
Dim theObject As Object=Nothing
对象=”https://www.paypal.com/cgi-bin/webscr?cmd=_login-跑”
WebBrowPayPal.AxWebBrowser1.Navigate2(对象)
而WebBrowPayPal.AxWebBrowser1.ReadyState
tagREADYSTATE.READYSTATE\u完成
Application.DoEvents()
结束时
按IHTMLDocument2=CType(WebBrowPayPal.AxWebBrowser1.Document、,
IHTMLDocument2)
Dim FormCol作为IHTMLElementCollection=HtmlDoc.forms
将iForms设置为整数=FormCol.length
作为整数的Dim i
作为整数的Dim x
对于i=0到iForms-1
形式尺寸为IHTMLFormElement=CType,
CType(i,对象)),IHTMLFormElement)
对于x=0到形式长度-1
如果是form.elements(x).tagname=“INPUT”,则
如果是form.elements(x).name=“login\u email”,则
of form.elements(x).value=”PayPal@mydomain.com"
如果结束
如果是form.elements(x).name=“login\u password”,则
oForm.elements(x).value=“mypassword”
如果结束
如果是表单元素(x),则键入=“提交”或_
of form.elements(x).type=“SUBMIT”然后
of form.elements(x).单击()
如果结束
如果结束
下一个
接下来我
我现在正在尝试这个页面

这是历史页面,允许您搜索paypal交易id。 不幸的是,您需要单击“查找事务”,然后使用一些javascript显示post字段。所以问题是我需要使用的字段是隐藏的


如何在代码中单击此javascript链接?

我不确定这是否有帮助,但您可能希望尝试直接使用
IHTMLDocument2执行脚本(当您单击“查找事务”时会触发该脚本)。write
方法:

Dim HtmlDoc As IHTMLDocument2 = CType(WebBrowPayPal.AxWebBrowser1.Document, 
  IHTMLDocument2)
HtmlDoc.write("<script>[Search button event handler]</script>")
如果需要单击链接,只需将
HTMLInputElement
更改为
htmlinkElement
(在声明和强制转换操作中)

我想您没有使用WinForms,但如果您这样做,我建议您切换到WinForms

希望这对你有帮助


--Pavel

你不使用Paypal API有什么原因吗?@Jules-你真的应该使用Paypal API。我需要查看Paypal中的交易!我不确定这是否有效,也不确定搜索按钮处理程序是什么。@Jules:对不起,我没有有效的PayPal帐户,所以我无法重现您的问题。但我希望我的回答为你们指明了正确的方向。
    Imports mshtml

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim clicked As Boolean = False
        Dim doc As IHTMLDocument2 = Nothing
        Dim form As IHTMLFormElement = Nothing
        Dim input As HTMLInputElement = Nothing
        Dim forms As IHTMLElementCollection = Nothing

        AxWebBrowser1.Navigate2("http://www.google.com")

        While AxWebBrowser1.ReadyState <> SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE
            Application.DoEvents()
        End While

        doc = CType(AxWebBrowser1.Document, IHTMLDocument2)

        For i As Integer = 0 To doc.forms.length - 1
            form = CType(doc.forms.item(i, i), IHTMLFormElement)

            For j As Integer = 0 To form.length - 1
                If TypeOf (form.elements(j)) Is HTMLInputElement Then
                    input = CType(form.elements(j), HTMLInputElement)

                    If String.Compare(input.name, "btnI", StringComparison.InvariantCultureIgnoreCase) = 0 Then
                        input.click()
                        clicked = True
                        Exit For
                    End If
                End If
            Next

            If clicked Then
                Exit For
            End If
        Next
    End Sub
End Class