VBA IE 自动化 - 找不到 "export" 元素 ID
VBA IE Automation - cannot find "export" element ID
我在 Microsoft Excel 2010 VBA 工作,我正在尝试自动下载 pdf 报告。我可以导航到我需要去的地方,但我卡在了最后一步;
有一个 "Export" 元素的行为类似于 link。如果我单击它,它将启动 pdf 下载。我想自动执行此操作并将下载定向到指定的文件夹,但是当我检查该元素时,它似乎没有我可以调用它的元素 ID(即 getElementById().Click)。
我是 VBA IE 自动化的新手。有人对如何启动 "Export" 功能有建议吗?
我无法分享完整的 HTML 详细信息,因为这是一个包含敏感数据的网站,但下面是 HTML、我的 VBA 代码的片段,以及有问题的 HTML 部分的屏幕截图:
<DIV style="FONT-SIZE: 8pt; HEIGHT: 30px; FONT-FAMILY: Verdana; DISPLAY: inline"><TABLE style="DISPLAY: inline" cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD height=28><SELECT id=PrintFormat><OPTION value="">Select a format</OPTION><OPTION selected value=Pdf>Acrobat (PDF) file</OPTION></SELECT></TD>
<TD width=4></TD>
<TD height=28><A onclick="if (document.getElementById('PrintFormat').value != '') {var url = document.getElementById('PrintFormat').value + 'Stream.aspx'; document.location.href = url;}" style="FONT-SIZE: 8pt; TEXT-DECORATION: none; FONT-FAMILY: Verdana" href="#" shape="">Export</A></TD></TR></TBODY></TABLE></DIV>
我的vba代码;
Sub pdfdownloadautomation()
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.navigate Sheet3.Range("A1").Value 'A1 contains url
objIE.document.getElementById("PrintFormat").Value = "Pdf"
'works fine to this point - just not sure how to call the export
objIE.document.getElementById("?").Click
End Sub
screenshot of inspected element in IE
您可以尝试使用如下所示的 CSS 选择器来定位元素。我无法测试,也不知道是否有父 frame/iframe/form 标签可以导航。似乎至少有一个表单元素可见。如果可能,请提供包含此表单标签的 html。我已经给出了没有父 form
并且包括父 form
的变体(看起来是这样) - 父 form
元素的假设是它是第一个 form
页面上的元素。
ie.document.querySelector("td a[onclick^='if']").Click
可能会变成:
ie.document.getElementsByTagName("form")(0).querySelector("td a[onclick^='if']").Click
CSS 选择器可能比要求的更复杂,但我正在尝试使用图像中的可见提示进行本地化,即有一个带有 a
标签的元素,它具有 onclick
属性以 'if'
开头,并且在父 td
标记内。
您还可以收集所有 a 标签元素并循环直到找到 Export
innerText:
Dim list As Object, item As Object
Set list = ie.document.getElementsByTagName("a")
For Each item In list
If item.innerText = "Export" Then
item.Click
Exit For
End If
Next
同样,这可能会变成
Set list = ie.document.getElementsByTagName("form")(0).getElementsByTagName("a")
我在 Microsoft Excel 2010 VBA 工作,我正在尝试自动下载 pdf 报告。我可以导航到我需要去的地方,但我卡在了最后一步;
有一个 "Export" 元素的行为类似于 link。如果我单击它,它将启动 pdf 下载。我想自动执行此操作并将下载定向到指定的文件夹,但是当我检查该元素时,它似乎没有我可以调用它的元素 ID(即 getElementById().Click)。
我是 VBA IE 自动化的新手。有人对如何启动 "Export" 功能有建议吗?
我无法分享完整的 HTML 详细信息,因为这是一个包含敏感数据的网站,但下面是 HTML、我的 VBA 代码的片段,以及有问题的 HTML 部分的屏幕截图:
<DIV style="FONT-SIZE: 8pt; HEIGHT: 30px; FONT-FAMILY: Verdana; DISPLAY: inline"><TABLE style="DISPLAY: inline" cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD height=28><SELECT id=PrintFormat><OPTION value="">Select a format</OPTION><OPTION selected value=Pdf>Acrobat (PDF) file</OPTION></SELECT></TD>
<TD width=4></TD>
<TD height=28><A onclick="if (document.getElementById('PrintFormat').value != '') {var url = document.getElementById('PrintFormat').value + 'Stream.aspx'; document.location.href = url;}" style="FONT-SIZE: 8pt; TEXT-DECORATION: none; FONT-FAMILY: Verdana" href="#" shape="">Export</A></TD></TR></TBODY></TABLE></DIV>
我的vba代码;
Sub pdfdownloadautomation()
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.navigate Sheet3.Range("A1").Value 'A1 contains url
objIE.document.getElementById("PrintFormat").Value = "Pdf"
'works fine to this point - just not sure how to call the export
objIE.document.getElementById("?").Click
End Sub
screenshot of inspected element in IE
您可以尝试使用如下所示的 CSS 选择器来定位元素。我无法测试,也不知道是否有父 frame/iframe/form 标签可以导航。似乎至少有一个表单元素可见。如果可能,请提供包含此表单标签的 html。我已经给出了没有父 form
并且包括父 form
的变体(看起来是这样) - 父 form
元素的假设是它是第一个 form
页面上的元素。
ie.document.querySelector("td a[onclick^='if']").Click
可能会变成:
ie.document.getElementsByTagName("form")(0).querySelector("td a[onclick^='if']").Click
CSS 选择器可能比要求的更复杂,但我正在尝试使用图像中的可见提示进行本地化,即有一个带有 a
标签的元素,它具有 onclick
属性以 'if'
开头,并且在父 td
标记内。
您还可以收集所有 a 标签元素并循环直到找到 Export
innerText:
Dim list As Object, item As Object
Set list = ie.document.getElementsByTagName("a")
For Each item In list
If item.innerText = "Export" Then
item.Click
Exit For
End If
Next
同样,这可能会变成
Set list = ie.document.getElementsByTagName("form")(0).getElementsByTagName("a")