简述:
我已成功使用VBA执行以下操作:
通过getElementsByName登录网站
选择生成报告的参数(使用getelementsby...)
- 在选择参数后生成报告,将结果数据集呈现在同一页面的iframe中
需要注意的是-该网站为客户端站点
以上是简单部分,困难部分如下:
点击iframe中的gif图像,将数据集导出为csv
我尝试了以下方法:
Dim idoc As HTMLDocument
Dim iframe As HTMLFrameElement
Dim iframe2 As HTMLDocument
Set idoc = objIE.document
Set iframe = idoc.all("iframename")
Set iframe2 = iframe.contentDocument
Do Until InStr(1, objIE.document.all("iframename").contentDocument.innerHTML, "img.gif", vbTextCompare) = 0
DoEvents
Loop
为了解释上面的逻辑 -
- 我访问了主框架
- 我通过名称元素访问了iframe
- 我访问了iframe中的内容
- 我试图找到需要点击以导出到csv的gif图像
就在这一行它失败并显示“对象不支持此属性或方法”
我还尝试通过a元素和href属性访问iframe gif,但是完全失败了。我还尝试从其源URL获取图像,但所有这些都只会带我到图像所在的页面。
注意:iframe没有ID,并且奇怪的是,gif图像没有“onclick”元素/事件
最后考虑 - 尝试使用R爬取iframe
访问iframe的HTML节点很简单,但是尝试访问iframe的属性,随后访问表格节点都没有成功。 它只返回“Character(0)”
library(rvest)
library(magrittr)
Blah <-read_html("web address redacted") %>%
html_nodes("#iframe")%>%
html_nodes("#img")%>%
html_attr("#src")%>%
#read_html()%>%
head()
Blah
一旦我包括了read_html,脚本就返回以下错误:如果(grepl ("<|>", x)),那么错误是 argument is of length zero。
我怀疑这指的是Character(0)。
非常感谢任何指导!
谢谢。
<div align="center">
<table id="table1" style="border-collapse: collapse" width="700" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td colspan="6"> </td>
</tr>
<tr>
<td colspan="6">
<a href="href redacted">
<img src="img.gif" width="38" height="38" border="0" align="right">
</a>
<strong>x - </strong>
</td>
</tr>
</tbody>
</table>
</div>