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

Selenium VBA实现国籍下拉框精准选择及匹配问题解决

Selenium VBA 操作网页国籍下拉框的精准匹配问题

问题背景

我需要通过Selenium VBA在Excel中操作网页的国籍选择下拉框,相关元素及选项的HTML结构如下:

下拉框触发元素HTML

<div class="base-select-control-wrapper"><div class="mobile-select-open"></div><div class="base-select-control"><span class="base-select-control__label">Nationality</span><input type="text" class="base-select-control__input" mousedown.prevent="" style="display: none;"><div class="base-select-control__input" role="combobox" style=""></div><!----><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="base-select-control__icon" icon="arrow"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.29289 8.29289C5.68342 7.90237 6.31658 7.90237 6.70711 8.29289L12 13.5858L17.2929 8.29289C17.6834 7.90237 18.3166 7.90237 18.7071 8.29289C19.0976 8.68342 19.0976 9.31658 18.7071 9.70711L12.7071 15.7071C12.3166 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70711C4.90237 9.31658 4.90237 8.68342 5.29289 8.29289Z" fill="#778A99" fill-opacity="0.8"></path></svg></div></div>

下拉选项HTML

<ul class="base-select-options"><li class="base-select__option" data-id="004"><img data-v-410fcf0a="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAeCAYAAABXNqCcxnCHhBAmMZAv5aAkeAegZg68ARBZSB7cA7wDBgVhhoA/gGeA8o3x4A3YIaax6vgRkAAAAASUVORK5CYII=" class="country-flag"> Afghanistan</li>

页面操作路径:访问https://qic.online/en/visitors,点击Buy Policy,选择日期并继续,选择时长后即可看到国籍选择框。

我尝试过定位Nationality标签元素但点击失败,也尝试过操作mobile-select-open元素但无法使用SendKeys方法。

目前使用以下代码可运行但存在匹配问题:

sNationality = Cells(iRow, "N").Value
.FindElementByCss("[class*=nationalities]").Click
.FindElementByXPath("//*[@class='base-select-options']//*[contains(.,'" & sNationality & "')]").Click

当sNationality为INDIA时,会错误匹配到BRITISH INDIAN OCEAN,请问如何解决此精准匹配问题?

解决方法

方法1:使用文本完全匹配的XPath

将原代码中的contains替换为完全匹配逻辑,同时用normalize-space处理选项文本前后的空格,避免因空格导致的匹配失败:

sNationality = Cells(iRow, "N").Value
.FindElementByCss("[class*=nationalities]").Click
.FindElementByXPath("//ul[@class='base-select-options']/li[normalize-space(text())='" & sNationality & "']").Click

normalize-space(text())会自动去除文本前后的空格及中间的多余空格,确保和目标国籍名称完全匹配,避免部分匹配的错误。

方法2:通过data-id属性精准定位

如果能提前整理国籍与data-id的对应关系,可以直接通过唯一的data-id定位选项,这是最稳定的方式:

' 假设已根据sNationality获取到对应的dataId
sNationality = Cells(iRow, "N").Value
dataId = GetNationalityDataId(sNationality) ' 自定义函数获取对应data-id
.FindElementByCss("[class*=nationalities]").Click
.FindElementByXPath("//li[@class='base-select__option' and @data-id='" & dataId & "']").Click

方法3:优化下拉框触发点击逻辑

如果原点击[class*=nationalities]不稳定,可以换更精准的触发元素,比如点击下拉控件的主体部分:

.FindElementByCss("div.base-select-control-wrapper div.base-select-control").Click

或者直接点击下拉箭头图标:

.FindElementByCss("svg.base-select-control__icon").Click

内容的提问来源于stack exchange,提问作者YasserKhalil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:44:59