提问人:Freddy André Cuellar López 提问时间:1/24/2023 更新时间:1/24/2023 访问量:61
Python Selenium 搜索只有文本的 sebbling [object Text]
Python Selenium search for sibbling [object Text] that only have a text
问:
我想在 xpath 中获取一个表达式的文本,该表达式在其同级html_code中只有文本
我正在尝试这种方式,但它给了我一个错误,我不知道如何选择文本,因为它没有任何标签
driver.find_element('xpath','//li[@class="icon-feature"]//i[@class="icon-stotal"]//following-sibling::text()').text
错误:
InvalidSelectorException: invalid selector: The result of the xpath expression "//li[@class="icon-feature"]//i[@class="icon-stotal"]//following-sibling::text()" is: [object Text]. It should be an element.
我只想有“ 121 m2 总计”。
对此的任何帮助都是值得赞赏的。
答:
0赞
undetected Selenium
1/24/2023
#1
find_element()
返回一个 WebElement,它不能返回一个 Text Node。所以你不能使用:
//xpath_expression/text()
因此出现错误:
InvalidSelectorException: invalid selector
溶液
文本 121 m2 Total 位于文本节点内,并且 的减值值为 。因此,要提取文本,您需要诱导 WebDriverWait 获取 visibility_of_element_located(),并且可以使用以下任一定位器策略:<i class="icon-stotal">
使用 XPATH 和 text 属性:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li[@class='icon-feature']/i[@class='icon-stotal']"))).text)
使用 XPATH 和 :
get_attribute("textContent")
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li[@class='icon-feature']/i[@class='icon-stotal']"))).get_attribute("textContent"))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您可以在如何使用 Selenium 检索 WebElement 的文本 - Python 中找到相关讨论
评论
0赞
Freddy André Cuellar López
1/24/2023
那么,如何将其从文本节点转换为WebElement?,我尝试将这样的东西: '//li[@class=“icon-feature”]//i[@class=“icon-stotal”]//following-sibling::*' 但它不起作用
0赞
Freddy André Cuellar López
1/24/2023
这就是问题所在,121 m2 Total 不是 <i class=“icon-stotal”的 decesdent>是它的兄弟姐妹。链接
0赞
sound wave
1/24/2023
#2
find_element
必须返回 WebElement,并且不能将文本节点转换为 WebElement。
通常,若要获取未包含在任何标记中的文本,必须获取父项的文本并从中删除子项的文本。在这种情况下,只有一个孩子,所以
child = driver.find_element(By.XPATH, "//i[@class='icon-stotal']")
parent = driver.find_element(By.XPATH, "//i[@class='icon-stotal']/parent::li")
然后
>>> parent.text.replace(child.text,'')
' 121 m total'
评论