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

如何用Selenium处理带多属性div标签的下拉列表并选中指定选项

解决方案

你可以直接通过XPath的多属性匹配规则完成目标选项的定位,除了role属性之外,把你提到的data-makeup-index属性也加入匹配条件即可,还可以额外补充文本匹配规则进一步提高定位准确性,避免索引变动导致定位失效。

修正后的可运行代码
import bs4
from bs4 import BeautifulSoup
import selenium
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 注意要导入By类,否则会抛出未定义异常
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(ChromeDriverManager().install())
url = 'https://www.ebay.com/b/Food-Beverages/14308/bn_1642947?listingOnly=1&rt=nc'
driver.get(url)
# 增加显式等待,避免元素未加载完成就操作导致报错
wait = WebDriverWait(driver, 10)
button = wait.until(EC.element_to_be_clickable((By.ID, 'gh-shipto-click')))
button.click()

button2 = wait.until(EC.element_to_be_clickable((By.ID, 'gh-shipto-click-body-cnt')))
button2.click()

# 按data-makeup-index定位目标选项,修改target_index的值即可切换不同选项
target_index = "3"
target_option = wait.until(EC.element_to_be_clickable((By.XPATH, f"//div[@role='menuitemradio' and @data-makeup-index='{target_index}']")))
# 若需要按国家名称定位,可以替换为下面的XPath,修改引号内的国家名即可
# target_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@role='menuitemradio' and contains(normalize-space(text()),'China')]")))
target_option.click()
注意事项
  • 可根据实际需求修改target_index的取值,对应你要选择的选项的data-makeup-index属性值
  • 显式等待逻辑可以大幅降低页面加载慢、渲染延迟导致的操作失败概率,提高脚本稳定性
  • 若选项索引可能发生变动,建议同时匹配data-makeup-index和选项文本两个条件,进一步降低定位错误概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:30:05