《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的构成和部署方法。首先到腾讯微云找到我分享的SeleniumBasic.zip,下载并解压到方便找到的本地文件夹中(别放在桌面)。

  会看到8个文件,功能如下:

  • 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也依赖这两个库,因此也是必需的。
  • Config.xml:配置文件。由于Selenium可以创建多种类型的浏览器,具体是启动Chrome还是Firefox,由这个配置文件来指定。该文件中指定了浏览器的安装位置、驱动文件的位置、是否隐藏cmd窗口等。

我的压缩包中提供的Config.xml,可以用记事本打开查看。其中默认输入了4个浏览器的配置信息,需要注意的是V3创建浏览器时只读取最上面第一个browser的信息。

例如Chrome浏览器,binarylocation属性指明了浏览器的安装位置,driver的name和directory指明了驱动文件的位置等,如果某些属性不明确,可以设置为空字符串。

<config>
    <browser name="Chrome" binarylocation="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe">
        <driver name="chromedriver.exe" directory="E:\Selenium\Drivers"/>
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="Firefox" binarylocation="C:\Program Files\Mozilla Firefox\firefox.exe">
        <driver name="geckodriver.exe" directory="E:\Selenium\Drivers"/>    
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="Edge" binarylocation="">
        <!--"msedgedriver.exe" rename to "MicrosoftWebDriver.exe"-->
        <driver name="MicrosoftWebDriver.exe" directory="E:\Selenium\Drivers"/>     
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="IE" binarylocation="">
        <driver name="IEDriverServer.exe" directory="E:\Selenium\Drivers"/>    
        <options HideCommandPromptWindow="true"/>
    </browser>
</config>

了解了以上概念以后,接下来动手进行实际操作。

  • 第一步:注册dll

选中regasm.bat,右键菜单选中以管理员身份运行。稍后弹出一个黑色窗口,提示注册成功。

  

  • 第二步:VBA中添加引用

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

  

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

 

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

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

 

 

该类型库包含3个主要对象

WebDriver:浏览器对象

WebElement:网页元素对象

SelectElement:网页中特指select标签形成的下拉框元素

  •  第三步:书写代码 在VBA插入一个标准模块,顶部声明公有变量WD,下面的程序演示了定位百度一下的关键字文本框和按钮。
Public WD As SeleniumBasic.WebDriver
Sub Baidu()
    On Error GoTo Err1
    Set WD = New SeleniumBasic.WebDriver
    WD.Start
    WD.URL = "//www.baidu.com"
    Dim form As SeleniumBasic.WebElement
    Dim keyword As SeleniumBasic.WebElement
    Dim button As SeleniumBasic.WebElement
    Set form = WD.FindElementById("form")
    Set keyword = form.FindElementById("kw")
    keyword.Clear
    keyword.SendKeys "好看视频"
    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

代码虽然写完了,但是。。。

在您的电脑上运行上述过程,估计出不来浏览器,也看不到百度一下。别急,这是因为上面的操作只是把编码这一侧搞定了,浏览器和驱动,以及配置文件还没设置好呢,下节课再见。