《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载
Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#、Java、Python等语言来操作Chrome、Firefox等浏览器。
VBA语言可以直接操作访问Microsoft Internet Explorer(IE)浏览器,但是IE浏览器的问题很多,最近不再受欢迎。
Chrome等浏览器有着速度快等优势,使用群体非常多。习惯用VBA编程的人们如何自动操作IE以外的浏览器呢?
在网上可以找到一个SeleniumBasic v2.0.9.0的软件,作者是Florent BREHERET。在电脑中安装了该软件后,可以在VBA、VBS、VB6等Basic系列的语言中调用Selenium的功能。
然而,在很多电脑上会出现“无法创建对象”、“自动化错误”等异常,再加上这个软件一直没更新,于是最近我自己从头开发了SeleniumBasic 3.141.0.0,以下简称V3。
在该系列文章中我会陆续讲解工具的部署、Selenium环境的搭建、使用VBA操作浏览器的基本语法、Selenium中高级技巧等知识。
友情提示:Selenium是一项繁琐而强大的技术,如果你没足够的耐心,请绕道,以免浪费您的时间。
SeleniumBasic 3.141.0.0
- 支持的编程语言:VBA、VB6、VBS等。同时支持32和64位VBA。
- 支持的浏览器:Chrome、Firefox、Microsoft Edge、Internet Explorer、Opera、Safari、QQ和360等浏览器。
- 主要功能:创建浏览器、定位元素、窗口和框架切换等最常用功能。
- 适用人群:熟悉VBA方面的语言,有Selenium部署和开发经验更佳。
接下来讲一下V3的构成和部署方法。
下载途径1:SeleniumBasic.zip
下载途径2:https://share.weiyun.com/5dpcNqx
在Tools文件夹里面找到我分享的SeleniumBasic.zip.选中并下载它

下载并解压到方便找到的本地文件夹中(别放在桌面)。

会看到7个文件,功能如下:
- SeleniumBasic.dll和SeleniumBasic.tlb:这两个是类型库,提供了VBA环境中用到的SeleniumBasic命名空间中的对象、成员。在VBA工程中需要添加引用SeleniumBasic.tlb。
- RegAsm.bat:用于注册dll,因为释放到你电脑以后,只是把文件放到磁盘上了,要让dll和tlb发挥作用,还需要向注册表中写入内容。因此需要用管理员权限运行该bat文件。
- UnRegAsm.bat:反注册。当你不再需要V3时,用管理员权限运行这个bat,可以从注册表中移除写入的内容。相当于软件的卸载。
- WebDriver.dll和WebDriver.Support.dll:.NET语言所需的动态链接库,V3也依赖这两个库,因此也是必需的。
接下来进行实际操作。
- 第一步:选中regasm.bat,右键菜单选中以管理员身份运行。稍后弹出一个黑色窗口,提示注册成功。

- 第二步:VBA中添加引用
启动Excel或其他Office组件,打开VBA编程环境,点击菜单“工具/引用”,在引用对话框中点击“浏览”。

弹出的选择文件对话框中,过滤器换成“所有文件”,找到前文所述的SeleniumBasic.tlb,打开。

这样,引用中就出现了一条SeleniumBasic

VBA中按下F2,对象浏览器中切换到SeleniumBasic,可以看到很多类型和方法。

这里的类看起来有些多,刚开始可以先从如下2个主要对象开始学起。
- IWebDriver:浏览器对象
- IWebElement:网页元素对象
如果你的电脑中Chrome浏览器及其驱动文件已经配置的很好了,环境变量也设置好了,那么可以用如下十来行代码就可以把谷歌浏览器启动起来。
Private WD As SeleniumBasic.IWebDriver
Sub Baidu()
On Error GoTo Err1
Set WD = New SeleniumBasic.IWebDriver
WD.New_ChromeDriver
WD.URL = "https://www.baidu.com"
MsgBox "下面退出浏览器。"
WD.Quit
Exit Sub
Err1:
MsgBox Err.Description, vbCritical
End Sub
实际上,Selenium启动浏览器之前,可以设置浏览器和驱动属性,详细代码为:
Private WD As SeleniumBasic.IWebDriver
Sub Baidu()
On Error GoTo Err1
Dim Service As SeleniumBasic.ChromeDriverService
Dim Options As SeleniumBasic.ChromeOptions
Set WD = New SeleniumBasic.IWebDriver
Set Service = New SeleniumBasic.ChromeDriverService
With Service
.CreateDefaultService driverPath:="E:\Selenium\Drivers"
.HideCommandPromptWindow = True
End With
Set Options = New SeleniumBasic.ChromeOptions
With Options
.BinaryLocation = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
'.AddExcludedArgument "enable-automation"
'.AddArgument "--start-maximized"
'.DebuggerAddress = "127.0.0.1:9999" '不要与其他几个混用
End With
WD.New_ChromeDriver Service:=Service, Options:=Options
WD.URL = "https://www.baidu.com"
Dim form As SeleniumBasic.IWebElement
Dim keyword As SeleniumBasic.IWebElement
Dim button As SeleniumBasic.IWebElement
Set form = WD.FindElementById("form")
Set keyword = form.FindElementById("kw")
Set button = form.FindElementById("su")
button.Click
Debug.Print WD.Title, WD.URL
Debug.Print WD.PageSource
MsgBox "下面退出浏览器。"
WD.Quit
Exit Sub
Err1:
MsgBox Err.Description, vbCritical
End Sub
对于尚未安装浏览器,尚未下载驱动文件的同学,可以继续学习下一节。
学习交流与资料下载:SeleniumBasic 3.141.0.0的QQ群324399884
《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载的更多相关文章
- VBA中操作XML
OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现. 先学习一下VBA中操作XML的方法 先引用Microsoft XML ...
- 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条
目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...
- 【转】使用iTextSharp在Asp.Net中操作PDF
使用iTextSharp在Asp.Net中操作PDF操作 使用iTextSharp在Asp.Net中操作PDF系列文章目录 实战 iTextSharp iTextSharp 合并多个PDF文件 C#生 ...
- JavaScript中的两个“0” -0和+0
JavaScript中的两个“0”(翻译) 本文翻译自JavaScript’s two zeros JavaScript has two zeros: −0 and +0. This post e ...
- VBA中find的一些使用方法
用excel处理数据的时候,无论是使用VBA还是函数,查找和引用都是两大主要的工作,VBA中的find系列的方法(find.findnext.Range.FindPrevious)返回range对象, ...
- 『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗
目录 1.操作浏览器自带弹窗 2.操作浏览器页面自定义弹窗 1.操作浏览器自带弹窗 (1)说明: webdriver中处理JavaScript所生成的alert.confirm 以及prompt 弹窗 ...
- 未能从程序集“mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Runtime.CompilerServices.TuppressIldasmAttribute”。已解决
"/"应用程序中的服务器错误. 未能从程序集"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77 ...
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...
- vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)
[编译中遇见的问题] ①在用vc 6.0去调用MySQL中的数据时,出现中文乱码 ②不明白mysql中的码制 [开始解决问题] ①打开mysql控制台 ...
随机推荐
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
- C#LeetCode刷题之#414-第三大的数(Third Maximum Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3710 访问. 给定一个非空数组,返回此数组中第三大的数.如果不存 ...
- C#LeetCode刷题之#840-矩阵中的幻方(Magic Squares In Grid)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3752 访问. 3 x 3 的幻方是一个填充有从 1 到 9 的不 ...
- LeetCode 392. Is Subsequence 详解
题目详情 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 & ...
- Java并发---并发理论
一.如何理解线程安全 在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题? 我的认识是.在多线程下代码执行的结果和预期的正确的结果不一致,该代码就是线程不安全的,否则就是线程安全的 在深 ...
- Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer
Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer 目录 Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer 0x00 ...
- 图论算法(二)最短路算法:Floyd算法!
最短路算法(一) 最短路算法有三种形态:Floyd算法,Shortset Path Fast Algorithm(SPFA)算法,Dijkstra算法. 我个人打算分三次把这三个算法介绍完. (毕竟写 ...
- 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解
废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...
- topic的相关操作
1.建立topic cd 进入kafka的安装根目录的bin目录下 执行:./kafka-topics.sh --zookeeper ip:port,ip:port,ip:port/kafka-tes ...
- 一个简单的例子让你很轻松地明白JavaScript中apply、call、bind三者的用法及区别
JavaScript中apply.call.bind三者的用法及区别 引言 正文 一.apply.call.bind的共同用法 二. apply 三. call 四. bind 五.其他应用场景 六. ...