【问题标题】:Clicking a drop down option in iFrame with VBA excel使用 VBA excel 在 iF​​rame 中单击下拉选项
【发布时间】:2020-03-08 09:24:24
【问题描述】:

我正在尝试单击以下代码中的下拉选项“批准交易”。我有扎实的 VBA 背景,但这是我第一次尝试使用 VBA excel 进行 HTML 自动化。到目前为止,我可以导航并登录网站,选择需要批准的交易,并显示下拉菜单。但是,我无法弄清楚如何单击下拉选项/触发事件。我相信我的差距在于处理 iFrame 和/或表格(到目前为止我还没有在代码中处理)

我已经测试了很多不同的网络发现代码,所以我不会重复我遇到的每一次复制/粘贴修改失败。下面是我试图与之交互的代码。 “批准交易”是我试图点击/触发的。

提前感谢您提供的任何建议!

编辑后包含 HTML 和我的代码如下。我一直在删除不工作的东西,只是插入和播放不同的选项。我发现的那块很可能是非常错误的。

    <IFRAME id=VCommonBlockerVxActionMenu_68_SUPPORT style="BORDER-TOP: 0px; HEIGHT: 62px; BORDER-RIGHT: 0px; WIDTH: 98px; BORDER-BOTTOM: 0px; POSITION: absolute; LEFT: 1402px; FILTER: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0); BORDER-LEFT: 0px; Z-INDEX: 12; DISPLAY: block; TOP: 98px; BACKGROUND-COLOR: #ffffff; 0: " src="javascript:false" frameBorder=0 scroll="no"></IFRAME>

<DIV id=VxActionMenu_68_SUPPORT class=VDropDown_support style="HEIGHT: 62px; WIDTH: 98px; LEFT: 1402px; Z-INDEX: 13; DISPLAY: inline; TOP: 98px"><TABLE id=VxActionMenu_68_OPTIONS class=VDropDown_options style="WIDTH: 100%" cellSpacing=0 cellPadding=0 border=0>
<COLGROUP>
<COL width=22></COL>
<COL width="100%"></COL>
<COL width=22></COL>
<TBODY>
<TR onmouseover=VPage.VxActionMenu_68.hilite(event); onmousedown=VPage.VxActionMenu_68.select(event); class="VDropDown_hiderow VDropDown_option" vvalue="null">
<TD class=VDropDown_leftimg>&nbsp;</TD>
<TD class=VDropDown_option>More Actions</TD>
<TD class=VDropDown_rightimg>&nbsp;</TD></TR>
<TR onmouseover=VPage.VxActionMenu_68.hilite(event); onmousedown=VPage.VxActionMenu_68.select(event); class="VDropDown_option VDropDown_select" vfixed="true" vupdateLabel="true" vjs="VxManager.invokeActionHandler('vx.actions.VxAgreement_CommitHandler,vx.actions.VxApprovable_Approve',{statusMsg: 'Approving...'}, {vx_wsid: 'WS3',okHandler:'vx.actions.VxAgreement_CommitHandler,vx.actions.VxApprovable_Approve',showDialog:'true',statusMsg:'Approving...'});">
<TD title="Approve the Deal" class=VDropDown_option colSpan=2><NOBR>Approve</NOBR></TD>
<TD class=VDropDown_rightimg><IMG src="http://venprd.na.odcorp.net/vendavo/images/icons/clear.gif" width=16 align=absBottom height=1></IMG></TD></TR>
<TR onmouseover=VPage.VxActionMenu_68.hilite(event); onmousedown=VPage.VxActionMenu_68.select(event); class=VDropDown_option vfixed="true" vupdateLabel="true" vjs="VxManager.invokeActionHandler('vx.actions.VxAgreement_CommitHandler,vx.actions.VxApprovable_Deny',{statusMsg: 'Denying...'}, {vx_wsid: 'WS3',okHandler:'vx.actions.VxAgreement_CommitHandler,vx.actions.VxApprovable_Deny',showDialog:'true',statusMsg:'Denying...'});">
<TD title="Deny the Deal" class=VDropDown_option colSpan=2><NOBR>Deny</NOBR></TD>
<TD class=VDropDown_rightimg><IMG src="http://venprd.na.odcorp.net/vendavo/images/icons/clear.gif" width=16 align=absBottom height=1></IMG></TD></TR>
<TR onmouseover=VPage.VxActionMenu_68.hilite(event); onmousedown=VPage.VxActionMenu_68.select(event); class=VDropDown_option vfixed="true" vupdateLabel="true" vjs="VxManager.invokeActionHandler('vx.publishing.VxPublishingDocActions_OpenOrNew',{statusMsg: 'Publishing...'}, {vx_wsid: 'WS3'});">
<TD title="Create a document from the deal" class=VDropDown_option colSpan=2><NOBR>Publish</NOBR></TD>
<TD class=VDropDown_rightimg><IMG src="http://venprd.na.odcorp.net/vendavo/images/icons/clear.gif" width=16 align=absBottom height=1></IMG></TD></TR></TBODY></TABLE></DIV>

我还有另一个工作子可以导航到网站并登录。

Sub VendavoApprove()
    Dim elmButton As MSHTML.IHTMLElement

    'Activate previously opened Vendavo page
    'Set shellWins = New SHDocVw.ShellWindows

    'For Each explorer In shellWins
    'If explorer.Name = "Internet Explorer" Then
    'Debug.Print explorer.LocationURL
    'Debug.Print explorer.LocationName
    'End If
    'Next

    'Set shellWins = Nothing
    'Set explorer = Nothing

    AppTitle = "Powered by Vendavo"

    AppActivate AppTitle

    Set oApp = CreateObject("Shell.Application")

    For i = 0 To 25

        strName = ""

        On Error Resume Next

        strName = oApp.Windows(i).document.URL

        If InStr(strName, "http://venprd.na.odcorp.net/vendavo/pc?page=vx.core.BasicPage&menuId=deals&folderId=quotes") Then

            Set oIE = oApp.Windows(i)

            Exit For

        End If

    Next

    oIE.Visible = True

    oIE.document.all("VTree_VxFolderNav_deals.13.icon").Click
    oIE.document.all("table_VxCanvasListing_inner_1_COL_1_FILTER").Click
    oIE.document.all("table_VxCanvasListing_inner_COL_1_FILTER").Click
    oIE.document.all("table_VxCanvasListing_inner_1_FILTER_VALUE1").Value = 9792365
    oIE.document.all("table_VxCanvasListing_inner_FILTER_VALUE1").Value = 9792365
    oIE.document.all("id1_label").Click
    oIE.document.all("table_VxCanvasListing_inner_1$x0_ROWHDR").Click
    'oIE.document.all("table_VxCanvasListing_inner_1_ActionMenus_LABEL").Click
    oIE.document.all("table_VxCanvasListing_inner_1$x0_1").FireEvent "ondblclick", 1, 2
    oIE.document.all("table_VxCanvasListing_inner$x0_1").FireEvent "ondblclick", 1, 2
    oIE.document.getElementById("VxActionMenu_68_LABEL").Click 'Dynamic
    oIE.document.getElementById("VxActionMenu_67_LABEL").Click 'Dynamic
    oIE.document.getElementById("VxActionMenu_237_LABEL").Click 'Dynamic
    'Approve the core - this is the part I'm working on
    Set htm = oIE.document.frames("VCommonBlockerVxActionMenu_68_SUPPORT").document
    Set frms = htm.forms("TargetForm")
    Set Class1 = frms.document.getElementsByTagName("VxActionMenu_68_OPTIONS")

    For Each inputelement In Class1
        If inputelement.getAttribute("title") = "Approve the Deal" Then
            inputelement.Click
            Exit For
        End If
    Next
    'ending here
    oIE.document.all("VxApprovableComments_71_COMMENT").Value = "Approved"
    oIE.document.all("id1_label").Click

End Sub

【问题讨论】:

  • 已更新。再次感谢您。
  • 抱歉 HTML 新手。我已经编辑了粘贴,我想我按照你需要的方式粘贴了它。

标签: html excel vba iframe web-scraping


【解决方案1】:

看起来 tr 在 iframe 之外并且有一个 mousedown 事件,您可以尝试附加和触发。我的目标是 tr 的 vjs 属性。

Dim evt As Object
Set evt = .document.createEvent("HTMLEvents")
evt.initEvent "mousedown", True, False

oIE.document.querySelector("[vjs*=VxApprovable_Approve]").dispatchEvent evt

【讨论】:

  • 试图实现这一点无济于事。在新的 HTML 粘贴之后,您还看到我遗漏的其他内容吗?
  • html 似乎仍然无效。顺便说一句,你能否给我更多关于尝试实施无济于事的细节。发生了什么?错误信息?
  • 嗯,好的,不确定我在复制/粘贴时省略了什么。我在第 2 行的 .document 上收到编译错误,引用无效或不合格。
  • 你能把这行粘贴到这里吗? .document前面应该有oIE
  • 是的,这是双向的。没有 oIE 的错误,没有任何反应。将 evt 作为对象集 evt = oIE.document.createEvent("HTMLEvents") evt.initEvent "mousedown", True, False oIE.document.querySelector("[vjs*=VxApprovable_Approve]").dispatchEvent
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多