如何获取body标签属性并校验指定元素是否存在于body节点下
实现方案
核心逻辑是结合你预先存储的body class属性,筛选对应body节点后查找目标元素,以下是两种可直接使用的Python实现:
方法1:直接通过XPath筛选定位
直接在定位表达式中指定body的class属性,一步定位目标元素,适合快速校验:
from selenium.common.exceptions import NoSuchElementException # 你预先存储的body class变量 Body_class = driver.find_element_by_tag_name('body').get_attribute('class') try: # 定位规则:带有指定class的body下的第二个div元素,XPath同级元素索引从1开始计数 target_element = driver.find_element_by_xpath(f'//body[@class="{Body_class}"]/div[2]') # 若需要匹配元素文本,可修改XPath为如下格式: # target_element = driver.find_element_by_xpath(f'//body[@class="{Body_class}"]/div[text()="2nd element"]') print("指定元素存在") except NoSuchElementException: print("指定元素不存在")
方法2:先校验body属性再查找元素
如果需要先确认当前body属性和执行初期存储的一致,避免页面动态更新导致校验失效,可以用该方法:
# 获取当前body的class属性和存储值对比 current_body_class = driver.find_element_by_tag_name('body').get_attribute('class') if current_body_class != Body_class: print("body的class属性已变更,与初期存储值不一致") else: # 获取body下所有div元素 div_list = driver.find_element_by_tag_name('body').find_elements_by_tag_name('div') if len(div_list) >= 2: # find_elements返回的列表索引从0开始,第二个元素下标为1 second_div = div_list[1] # 可按需添加文本、属性等额外校验逻辑 if second_div.text == "2nd element": print("第二个指定元素存在") else: print("第二个div存在,但文本不符合预期") else: print("body下div元素不足2个,指定元素不存在")
注意事项
- 若body的class是多个空格分隔的类名,建议把XPath中的
@class=换成contains(@class, ),即f'//body[contains(@class, "{Body_class}")]/div[2]',避免多类名场景匹配失败 - 若目标元素不是div,只需修改XPath或查找的标签名即可
内容的提问来源于stack exchange,提问作者Jagriti Srivastava
相关产品推荐
相关产品推荐

