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

Python Selenium中如何给XPath传入多个变量?元素定位问题

如何在XPath中传入两个变量定位区间元素?

我正在编写Python代码,用XPath定位'SECTION A'与'SECTION B'之间的元素,原代码如下:

driver.find_elements("xpath", "//*[preceding-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'SECTION A')]] and following-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'SECTION B')]]]//span[normalize-space(text()) and contains(@class,'label')] ")

现在想要实现定位任意两个区间(比如SECTION B与SECTION C等)之间的元素,打算编写一个可传入起始section和结束section参数的函数,但不知道怎么修改代码让XPath支持传入两个变量。我知道可以用%s,但以为它仅支持单个变量,当前尝试的代码如下:

driver.find_elements("xpath", "//*[preceding-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'%s')]] and following-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'SECTION B')]]]//span[normalize-space(text()) and contains(@class,'label')] "%firstsection) #如何给'SECTION B'传入secondsection变量?

解决方法

其实%s支持传入多个变量,只需要在字符串末尾的元组里按顺序传入对应参数即可。除此之外,还可以用更简洁的f-string或者str.format()方法,以下是三种实现方式:

1. 多变量%s格式化

def get_elements_between_sections(driver, first_section, second_section):
    xpath = "//*[preceding-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'%s')]] and following-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'%s')]]]//span[normalize-space(text()) and contains(@class,'label')]" % (first_section, second_section)
    return driver.find_elements("xpath", xpath)

2. f-string格式化(Python 3.6+推荐)

这种方式可读性更强,直接在字符串里嵌入变量:

def get_elements_between_sections(driver, first_section, second_section):
    xpath = f"//*[preceding-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'{first_section}')]] and following-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'{second_section}')]]]//span[normalize-space(text()) and contains(@class,'label')]"
    return driver.find_elements("xpath", xpath)

3. str.format()方法

兼容性更好,适合Python 3.6之前的版本:

def get_elements_between_sections(driver, first_section, second_section):
    xpath = "//*[preceding-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'{}')]] and following-sibling::div[contains(@class,'titleWrap') and .//div[contains(@data-section-name,'{}')]]]//span[normalize-space(text()) and contains(@class,'label')]".format(first_section, second_section)
    return driver.find_elements("xpath", xpath)

使用时直接调用函数即可,比如:

elements = get_elements_between_sections(driver, "SECTION B", "SECTION C")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:05:36