VBA基于class的Selenium Edge打开网站

VBA Selenium Edge open website based on class

我正在尝试根据可以找到的 class 名称导航到网站。根据给定的 ID,它会打开第一个网站并搜索 3 个不同 class 名称中的一个。根据 class 名称匹配我想打开一个特定的网站。第一个网站总是有 3 个不同 class 名称中的一个。使用我当前的代码,当 VBA 找不到第一个 class 名称时,它会给我错误“找不到元素”并且不会继续到 ElseIf。如果找到第一个 class 名称,那么它工作正常并且没有错误。我如何才能让 VBA 忽略此错误或让它搜索所有 3 个 class 名称并根据找到的 class 名称决定要做什么?

代码:

    Dim appME As New WebDriver
    appME.Start "edge", ""
    Dim id
    id = 141765
      
    appME.Get "website 1" & id
    
    If (Not appME.FindElementByClass("Class1") Is Nothing) Then
         appME.Get "website 2" & id
    ElseIf (Not appME.FindElementByClass("Class2") Is Nothing) Then
         appME.Get "website 3" & id
    ElseIf (Not appME.FindElementByClass("Class3") Is Nothing) Then
         appME.Get "website 4" & id
    End If

我会在调用 FindElementByClass 之前添加 On Error Resume Next,之后添加 On Error GoTo 0

为了确保 appME.Get 中的错误不会被掩盖,最好将其放入它自己的函数中:

   Function MyFindElementByClass(appME as WebDriver, Byval classname as String) as WebElement
       Set MyFindElementByClass=Nothing
       On Error Resume Next
       Set MyFindElementByClass=appME.FindElementByClass(classname)
       On Error Goto 0
   End Function

通过在类名后添加 Raise:=False 解决了问题。

Dim appME As New WebDriver
    appME.Start "edge", ""
    Dim id
    id = 141765
      
    appME.Get "website 1" & id
    
    If (Not appME.FindElementByClass("Class1", Raise:=False) Is Nothing) Then
         appME.Get "website 2" & id
    ElseIf (Not appME.FindElementByClass("Class2", Raise:=False) Is Nothing) Then
         appME.Get "website 3" & id
    ElseIf (Not appME.FindElementByClass("Class3", Raise:=False) Is Nothing) Then
         appME.Get "website 4" & id
    End If