1

我正在尝试通过 vba-excel 为以下链接创建 IEautomation。

网址:http: //qpldocs.dla.mil/search/default.aspx

该代码包括搜索字符串“QPL-631”,然后单击相应的java脚本链接MIL-I-631D(6)。当我检查“MIL-I-631D(6)”链接时,我发现以下源代码href 标签的

<a href="javascript:__doPostBack('search_list$DG$ctl03$ctl00','')">MIL-I-631D(6)</a>

所以链接没有点击选项href,手动点击href链接的地址与href地址完全不同。所以我卡在这里。我想添加一个点击“MIL-I-631D(6)”的代码和输出结果。

我已经尝试了下面的代码,到目前为止,无法继续进行。

Private Sub IE_Autiomation()

Dim i As Long

Dim IE As Object

Dim objElement As Object

Dim objCollection As Object

Dim ae As HTMLLinkElement

Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True
IE.navigate "http://qpldocs.dla.mil/search/default.aspx"
Application.StatusBar = "Loading. Please wait..."

Do While IE.Busy = True Or IE.readyState <> 4: DoEvents: Loop

Application.StatusBar = "Search form submission. Please wait..." IE.document.getElementById("Search_panel1_tbox").Value = "QPL-631" IE.document.getElementById("Search_panel1_btn").Click Do While IE.Busy = True Or IE.readyState <> 4: DoEvents: Loop

631 链接

4

2 回答 2

1

这是一个临时解决方案,因为您已经在对产品代码“QPL-631”进行硬编码,所以您可以直接跳到在 URL 字符串中使用它来返回结果。

注意:我已经从该页面中提取了表 ID:

html.getElementById("Lu_gov_DG")

您可能想探索这是否是跨产品的共同主题(我怀疑是)。会让生活轻松很多。您甚至可以完全取消 IE,而采用更快的 XHR 解决方案。

Option Explicit

Private Sub IE_Automation()

    'References Internet Controls and HTML Object library

    Dim i As Long
    Dim IE As Object
    Dim html As HTMLDocument

    Dim product As String
    product = "QPL-631"

    Dim url As String

    url = "http://qpldocs.dla.mil/search/parts.aspx?qpl=1528&param=" & product & "&type=256"

    Set IE = CreateObject("InternetExplorer.Application")

    With IE

        .Visible = True

        .navigate url                            '"http://qpldocs.dla.mil/search/default.aspx"

        Application.StatusBar = "Loading. Please wait..."

        Do While .Busy = True Or .readyState <> 4: DoEvents: Loop

        Set html = .Document

        Dim allRowOfData As Object

        Set allRowOfData = html.getElementById("Lu_gov_DG")

        Dim r As Long, c As Long

        Dim curHTMLRow As Object

        For r = 1 To allRowOfData.Rows.Length - 1

            Set curHTMLRow = allRowOfData.Rows(r)

            For c = 0 To curHTMLRow.Cells.Length - 1
                Cells(r + 1, c + 1) = curHTMLRow.Cells(c).innerText
            Next c

        Next r

        .Quit

    End With

    Application.StatusBar = False 'And tidy up our change to the status bar

End Sub

这里有回发的例子,我会看看。

参考:

  1. 如何重置 Application.StatusBar
于 2018-03-01T09:35:37.587 回答
0

您有多种选择。有关可能性的非常全面的列表,请参见下文。

尝试获取锚标签的集合,使用:

GetElementsByTagName("a")

然后,使用尽可能多的逻辑迭代该集合,以确保您单击的是正确的按钮。

对于 ie.document.getElementsByTagName("a") 中的每个 l

If l.ClassName = "hqt_button" Then
    l.Click
    Exit For
Next

如果有多个具有相同类名的锚点,您可以这样做:

If l.ClassName = "hqt_button" AND l.Href = ""javascript:void(0): onclick=HeaderBox.trySubmit()" Then
    l.Click
    Exit For
Next

或者

如果您使用的是 IE9+,则可以使用 GetElementsByClassName 方法。

GetElementsByClassName("hqt_button") 

如何使用excel vba点击网页上的链接

于 2018-03-04T03:51:22.660 回答