VBA IE自动化-找不到“导出”元素ID

时间:2018-09-21 19:18:38

标签: vba internet-explorer web-scraping automation excel-2010

我正在使用Microsoft Excel 2010 VBA,并且正在尝试自动执行pdf报告下载。我可以导航到需要的位置,但是我被困在最后一步;

有一个“导出”元素,其行为类似于链接。如果我单击它,它将启动pdf下载。我想自动执行此操作并将下载直接定向到指定的文件夹,但是当我检查元素时,它似乎没有可以用来调用它的元素ID(即getElementById()。Click)。

我是VBA IE自动化的新手。有人对如何启动该“导出”功能有建议吗?

我无法共享完整的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

1 个答案:

答案 0 :(得分:0)

您可以尝试以下CSS选择器来定位元素。我无法测试,也不知道是否有要导航的父框架/ iframe /表单标签。似乎至少有一个表单元素可见。如果可能,请提供包含此表单标签的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")