如何通过Selenium从指定HTML中提取文本变量'14'?
解决提取页面文本'14'的问题
之前两种方法的错误原因
- 第一种XPath错误:
find_element方法只能定位元素节点,而//div[@class='hale_sup']/text()[1]直接返回的是文本节点,不符合方法要求,因此报错。 - 第二种方法错误:
.text是元素的属性(不是方法),不能加();且<div class="hale_sup"></div>本身是空标签,没有任何文本内容,即使去掉()也无法获取目标值。
正确提取'14'的方法
目标文本'14'是紧跟在<div class="hale_2">后的独立文本节点,可通过以下两种方式获取:
方法1:通过JS执行XPath获取文本节点
Selenium原生的find_element无法直接获取文本节点,可借助execute_script执行XPath表达式提取:
# 执行JS获取目标文本节点的内容 total_pages = driver.execute_script(""" return document.evaluate( '//div[@class="hale_2"]/following-sibling::text()[2]', document, null, XPathResult.STRING_TYPE, null ).stringValue; """) # 去除多余空格后得到结果 total_pages = total_pages.strip() print(total_pages) # 输出:14
这里following-sibling::text()[2]表示选取hale_2节点后的第2个文本节点(第一个是'of',第二个是'14')。
方法2:通过父元素文本分割提取
如果这些元素和文本都属于同一个父容器,可先获取父容器的全部文本,再通过字符串处理提取目标值:
# 定位包含所有目标内容的父元素(需根据实际页面调整定位方式) parent_container = driver.find_element(By.TAG_NAME, "body") # 获取父元素的全部文本 full_text = parent_container.text # 分割文本并提取最后部分 total_pages = full_text.split("of")[-1].strip() print(total_pages) # 输出:14
内容的提问来源于stack exchange,提问作者Javier Soler Medina
相关产品推荐
相关产品推荐

