如何用excel vba操控IE在按下网页上的按钮?

2025-06-22 09:29:07
推荐回答(2个)
回答1:

With IE

.navigate URL

.Visible = True

.document.forms(0).submit

End With

如果不是你想要的,说明目标网页不只有一个form,需要你去目标网页,点f12,找你想要的那个。当然你也可以通过更改forms(x)去一个个试,总能找到你要的那个。当然你也可以去找那个按钮的值,用按钮点击的方法。

ie.document.getElementById(按钮的值).click

ActiveSheet.WebBrowser1.Document.form1.Button1.Click

页面.webbrowser控件.网页.表单名.按钮名.点击

回答2:

一、前期准备

VBA并不能操作任意浏览器及网页,我们所能做的仅仅是对IE进行一些操作,就像Python用import、C#用using一样,VBA也需要引用一些库才能对IE进行操作,不过好在同属微软产品,所以我们能很简便的利用VBA自带的一些库。首先要做的就是在VBA中引用Micorsoft Internet Controls,看这个名字就知道是帮助我们控制IE页面用的。

1、打开网页

我们以在百度搜索“扯乎”关键词为例:

With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
'       .Quit
End With

代码很简单,先创建一个IE对象,然后给一些属性赋值。Visible是可见性,说的是在对网页进行操作时,这个网页是不是会被看见。熟练之后可以设置为False,不仅让程序在跑的时候有种神秘感(并没有),还能稍微加快一点速度。

不过有一点要记住,这个网页我们打开之后并没有关闭,也就是说程序结束后需要手动关闭,如果网页不可见是无法手动关闭的。代码中注释的部分就是关闭网页用的。Navigate不用多说就是URL。

我们必须要等网页完全加载完才能开始信息的抓取,这个时候使用到:(从这里开始,所有的代码都需要写在With代码块中)

While .ReadyState <> 4 Or .Busy
DoEvents
Wend

Busy是网页忙碌状态,ReadyState是HTTP的5种就绪状态,对应如下:

  • 0:请求未初始化(还没有调用 open())。

  • 1:请求已经建立,但是还没有发送(还没有调用 send())。

  • 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。

  • 3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。

  • 4:响应已完成;您可以获取并使用服务器的响应了。

2、获取信息

我们先把页面中的所有内容抓下来,后期筛选出有用的部分再慢慢给抓取添加条件。

Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i

这块代码和JS有些相似,需要从IE.Document.all中把页面上所有节点找出来。这里也提供其他几种方法: