You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA+Selenium ChromeDriver选择下拉框选项问题求助

解决VBA+Selenium无法选中Chrome下拉框选项的问题

问题分析

你遇到的问题核心是固定等待时间不可靠和元素定位逻辑不够稳定:

  • 固定Wait(10)无法保证下拉选项完全加载完成
  • 用nth-child(3)定位依赖元素顺序,一旦页面结构变动就会失效
  • 目标下拉是基于v-select的组件,需要确保选项元素处于可交互状态

修正后的代码

Sub FormChrome()
    Dim driver As New ChromeDriver
    Dim wait As New WebDriverWait
    
    ' 初始化显式等待,最长等待15秒,每500毫秒检查一次
    Set wait = New WebDriverWait
    wait.Timeout = 15
    wait.PollingInterval = 500
    
    ' 打开目标网站并最大化窗口
    driver.Get "https://fremtindservice.no/privat/bompengekalkulator/"
    driver.Window.Maximize
    
    ' 填写出发地、目的地、途经地(等待元素就绪后操作)
    wait.Until(ElementIsVisible("css:=label[for='origin'] ~ div .pac-target-input")).SendKeys "Oslo"
    wait.Until(ElementIsVisible("css:=label[for='destination'] ~ div .pac-target-input")).SendKeys "Rakkestad"
    wait.Until(ElementIsVisible("css:=label[for='via'] ~ div .pac-target-input")).SendKeys ""
    
    ' 等待下拉框可点击后打开
    wait.Until(ElementIsClickable("css:=div.dropdown.v-select.toll-road-calculator__vehicle-type.single.searchable")).Click
    
    ' 等待目标选项加载完成,通过文本精准定位并点击
    wait.Until(ElementIsClickable("css:=div.vs__dropdown-item:contains('Lastebil 3.5 tonn (Euro V og eldre)')")).Click
    
End Sub

关键改动说明

  • 替换固定等待为显式等待:使用WebDriverWait等待元素可见/可点击,避免因网络或页面加载慢导致的元素未就绪问题
  • 按文本定位选项:用:contains()匹配目标选项的文本,比nth-child更稳定,不受选项顺序变动影响
  • 清理冗余代码:移除重复注释和无效代码,简化逻辑

备选定位方案(如果CSS选择器失效)

若:contains()选择器无法生效,可改用XPath精准匹配文本:

wait.Until(ElementIsClickable("xpath:=//div[contains(@class,'vs__dropdown-item') and normalize-space(text())='Lastebil 3.5 tonn (Euro V og eldre)']")).Click

内容的提问来源于stack exchange,提问作者Michael Thøgersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:55:23