【发布时间】:2020-09-07 02:19:33
【问题描述】:
重点:
我已成功使用 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
只要 i 包含 read_html,脚本就会返回以下错误:
if (grepl("", x)) { : 参数长度为零时出错
我怀疑这是指 Character(0)
在这里感谢任何指导!
非常感谢,
HTML
<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>
【问题讨论】:
-
向我们展示 gif 周围的 HTML 代码。您已经可以通过 contentDocument 访问 iframe,对吧?现在只需要围绕 GIF 的 HTML。然后我们可以看到
-
@MacroMarc 需要查看html的哪一部分?
-
是href吗?
-
gif的父元素和gif本身...
标签: html excel vba iframe web-scraping