我正在尝试从此示例 HTML 中提取“479”:
<div data-testid="testid">
"479"
" Miles Away"
</div>
我在 Python 中使用以下 Selenium 代码:
xpath = 'html/body/div/text()[1]'
WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, xpath)))
distance = driver.find_element(By.XPATH, xpath)
print(distance)
返回以下错误:
'The result of the xpath expression "html/body/div/text()[1]" is: [object Text]. It should be an element.'
我尝试从 xpath 末尾删除 text()[1]
,理论上会打印出 HTML div 中包含的所有数据,但当我就是这么做的。
注意:我是一名业余爱好者并且自学成才(主要通过 Google、YouTube 和此网站),因此我的一些用词可能不正确。我提前道歉。
最佳答案
给定 html:
<div data-testid="testid">
"479"
" Miles Away"
</div>
文本479
和Miles Away
都有2个不同的 text nodes .
Selenium 不支持 text()
,因为它返回文本节点,如 Selenium期望返回 WebElement 。因此您会看到错误:
The result of the xpath expression "html/body/div/text()[1]" is: [object Text]. It should be an element.
解决方案
要提取文本479,您可以使用以下任一命令 locator strategies :
通过
execute_script()
和textContent使用xpath:print(driver.execute_script('return arguments[0].firstChild.textContent;', WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//div[@data-testid='testid']")))).strip())
通过
splitlines()
和get_attribute()
使用 xpath:print(WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//div[@data-testid='testid']"))).get_attribute("innerHTML").splitlines()[1])
关于python - xpath表达式 "html/body/div/text()[1]"的结果是: [object Text].它应该是使用Selenium打印元素文本的元素错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75482527/