Selenium+Python定位Booking.com货币选项报错问题求助
问题解决:Booking.com货币选择元素定位报错
核心错误原因
你触发InvalidSelectorException的根本问题是定位策略和语法不匹配:指定了By.CSS_SELECTOR,但写的是XPath表达式,Selenium无法识别这种混合写法。
无需遍历列表,直接修正定位方式即可
给你两种可行的正确定位方案:
方案1:用XPath定位(修正语法+匹配策略)
XPath的文本匹配需要给目标字符串加引号,同时要指定By.XPATH作为定位策略:
currency = 'USD' selected_currency_element = self.find_element(By.XPATH, f'//span[text()="{currency}"]') selected_currency_element.click()
如果目标文本可能带有前后空格,用normalize-space()处理会更稳妥:
selected_currency_element = self.find_element(By.XPATH, f'//span[normalize-space(text())="{currency}"]')
方案2:用CSS选择器定位(更高效稳定)
CSS选择器没有直接匹配文本的原生语法,但可以利用页面元素的属性(Booking的货币选项通常会带data-currency这类专属属性),比如:
selected_currency_element = self.find_element(By.CSS_SELECTOR, f'[data-currency="{currency}"]') selected_currency_element.click()
如果必须基于文本匹配,部分现代浏览器支持:contains()伪类(注意兼容性):
selected_currency_element = self.find_element(By.CSS_SELECTOR, f'span:contains("{currency}")')
额外提示
优先选择属性定位(比如data-currency),比文本定位更稳定——网站文本可能因翻译、格式调整变化,但属性值一般不会轻易改动。
内容的提问来源于stack exchange,提问作者hal9kaye
相关产品推荐
相关产品推荐

