关键点:
我已成功使用 VBA 执行以下操作:
使用 getElementsByName 登录网站
为将生成的报告选择参数(使用 getelementsby …)
选择参数后生成报告,将生成的数据集呈现到同一页面上的 iframe 中
重要提示 - 该网站是客户端
上面是简单的部分,困难的部分如下:
在将数据集导出到 csv 的 iframe 中单击 gif 图像
我尝试了以下方法:
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
一旦 ai 包含 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>
原文由 mojo3340 发布,翻译遵循 CC BY-SA 4.0 许可协议
有时使用
iframes
会很棘手。基于html
你提供我已经创建了这个例子。哪个适用于本地,但它也适用于您吗?要到达
IFrame
可以使用frames
集合。希望您知道name
的IFrame
?然后去
image
我们可以使用querySelector
方法,例如:选择器
a[href^='https://stackoverflow.com']
选择anchor
具有以给定文本开头的href
属性。^
表示开始。然后,当我们有了图像时,只需简单地调用
click
在其父级上,这是所需的anchor
。 HTH完整示例: