首页 > 解决方案 > VBA:如何在图像上没有 ID 或名称的情况下触发 onclick 事件?

问题描述

我正在尝试使用 VBA 在 IE 中为想象触发 onclick 事件。Image 只有 Onclick、alt 和 src。我不知道如何循环到图像然后触发 onclick。

我已经尝试过几种不同的方式循环,但没有一个解决方案适用于我的具体情况。通常,它们涉及具有内部文本,而我没有。

Excel VBA(这是错误的,但我想要这样的东西)

  Dim elements As Object, element As Object
    Set elements = ieDoc.getElementsByTagName("img")

    For Each element In elements
    If element.innerText = "Export to Excel" Then
        element.Click
    End If
    Next

JavaScript

function fnForecast_Export() {
    try {
        var sSearch = txtSearch.value.trim().sqlEscape().xmlToSpecial();
        if (sSearch === "") {fnGlobal_Alert(g_sBLANKSEARCH); return;}

        var sSQL = "qryGetCustomerForecastList 'SearchExport','" + fnSQLWild(sSearch, false) + "','" +
            txtStartDate.value + "','" + txtEndDate.value + "'," + drpCustomer.value + "," +
            drpPlant.value + "," + g_iPageID + ",'" + drpSortOrder.value + "'," + drpSortDirection.value;

        var sURL = g_sAppPath + "forecasting/ForecastExportWindow.asp" +
            "?Rnd=" + Math.random() +
            "&PageName=Customer" +
            "&SQL=" + sSQL +
            "&StartDate=" + g_sStartDate +
            "&EndDate=" + g_sEndDate;

        top.fraHeader.fnWait("Exporting...", "", 15000);

        var oFrame = document.getElementById("fraExportFrame");

        if (oFrame !== null) {
            oFrame.src = sURL;
        } else {
            var oNewFrame = document.createElement("IFRAME");
            oNewFrame.id = "fraExportFrame";
            oNewFrame.src = sURL;
            oNewFrame.style.height = "0px";
            oNewFrame.style.width = "0px";
            document.appendChild(oNewFrame);
        }
    } catch(e) {
        fnErrorHandler(e, "");
    }}

HTML

<TD id=tdBlock class=tdCriteriaBlock noWrap>&nbsp;
<IMG onclick=fnForecast_Search(); alt=Search src="/PE372/images/search.gif">&nbsp;&nbsp;
<IMG onclick=fnForecast_Export(); alt="Export to Excel" src="/PE372/images/excel.gif">&nbsp;&nbsp;
<IMG onclick=fnForecast_SearchClear(); alt="Clear Search Criteria" src="/PE372/images/eraser.gif">&nbsp;&nbsp;</TD>

我想运行网页 javascript 中的“fnForecast_Export()”函数。

标签: javascripthtmlexcelvbaweb-scraping

解决方案


如果您不能使用 querySelector,那么您将需要尝试使用循环并考虑在框架标签中。

Dim imgs As Object, img As MSHTML.HTMLImg
Set imgs = ieDoc.getElementsByTagName("frame")(0).contentDocument.getElementsByTagName("img") 'you may need to change index from 0 to appropriate one.
For Each img In imgs
    If img.hasAttribute("alt") Then
        If img.getAttribute("alt") = "Export to Excel" Then
            ''choose your option
            img.Click
            'img.FireEvent "onclick"
            Exit For
        End If
    End If
Next

推荐阅读