我已经在网上搜索了一个解决方案来自动“自动更新”我的SeleniumEdgeDriver。对于那些使用SeleniumBasic的人来说,你知道当你的主主机浏览器得到一个重大更新时,经常从相应的网页手动下载驱动程序会很麻烦。
在我的网络搜索中,我发现支持其他语言“自动更新”这些驱动程序的版本,但VBA,像往常一样,缺乏支持。
现在我不认为这是完美的解决方案,但它至少是有效的。我能看到的问题是,在未来的每个网页的布局可能会改变,所以我欢迎更新,如果是这样的话,我会尝试更新。但在大多数情况下,它应该只是工作。
虽然这是一个自我回答的问题,但我绝对希望看到其他方法张贴在这里,供我自己和其他用户尝试。SeleniumBasic是某些应用程序的好工具,但通常缺乏社区支持,因为VBA在社区中的使用不如其他语言广泛-至少没有在更复杂的水平上。
4条答案
按热度按时间b5buobof1#
在开始之前,请务必在VBE中转到Tools〉References启用以下References:
接下来,您需要创建一个名为SeleniumWebDriver的类模块。
我决定把它做成一个类对象,因为我打算将来在它的基础上做一些构建。你可以根据自己的意愿添加你自己的属性和函数,但是所提供的代码只允许更新WebDrivers,至少现在是这样。
以下是完整的类模块代码:
现在您已经创建了Selenium类,您可以在标准模块中使用它,例如:
这个答案的其余部分将详细说明它的作用。如果你不关心,你现在可以离开了。
首先,和其他任何对象一样,我们必须初始化它,在上面的例子中,我们使用
With New SeleniumWebDriver
语句来初始化它,它在这里触发Class_Initialize()
事件:这样做的目的是设置SeleniumBasic文件夹和临时文件的默认文件路径。但是,如果您的文件夹位于其他位置,则该类具有一个属性,您可以手动将文件夹更改为该属性。只需使用 *
ClassObj
*.SeleniumFolderPath()
属性来建立新路径。TempZipFile
是一个类作用域变量,它将存储从各个网站下载的.zip文件。调用
UpdateDriver
方法时,该类将向相应驱动程序的网页发出GET请求,然后从该页面获取当前版本号,然后将此驱动程序版本传递给DownloadUpdatedDriver
例程,该例程存储每个相应驱动程序的下载链接。对于Chrome,该链接为:https://chromedriver.storage.googleapis.com/<Version#>/chromedriver_win32.zip
,对于Edge,则为:https://msedgedriver.azureedge.net/<Version#>/edgedriver_win64.zip
。如果您碰巧使用32位版本的Edge,则需要将URL更改为edgedriver_win32.zip
,这一点非常重要。此例程会将.zip文件下载到本地AppData的Temp文件夹。下载完文件后,我们继续调用
ExtractZipAndCopy
例程。这只是将.exe文件解压缩到Selenium文件夹,首先删除旧文件。Edge会做一些额外的维护工作,但现在基本上已经更新了!我希望这能帮助那些因为我不得不定期更新这些驱动程序而感到恼火的人,并且希望得到一个自动化的解决方案。如果需要进行微小的更改,例如URL损坏,请随时edit此答案。
11dmarpk2#
现在有一个API来检查ChromeDriver的最新版本。所以代码可以变得更短。此外,添加了一个功能,只有在当前的chrome版本与安装的chromeDriver版本不匹配时才运行更新。并使用管理员权限复制。我没有使用Edge,所以代码功能不在我的代码中。
ulydmbyx3#
由于我使用的是公司PC,因此我更新了代码,以便在锁定的PC上工作
yfwxisqw4#
我不得不修改上面由Jesper Martin Schumacher发布的代码,因为我们的IT部门已经将所有Office应用程序更新为64位。
该代码在“New”关键字的示例上失败,所以我研究并发现:
compile error User-defined type not defined at "oShell As WshShell"
建议使用“后期绑定”CreateObject方法,如下所示。