Html代码看起来像这样。
<div>
<span>Title</span>
<input value="a">
</div>
<div>
<span>Price</span>
<input value="">
</div>
我需要检查Span是否为价格,然后插入价格值等...
基本上,我可以访问所有输入,例如
for el in driver.find_elements(by=By.XPATH, value="//input"):
try:
if el.parent.span... == 'Price': #HERE I NEED TO ADD MISSING PART
el.send_keys('10')
except:
pass
但那时我无法确定上层节点的值。
也试过:
driver.find_element(by=By.XPATH, value="//input/preceding-sibling::span[contains(.,'Price')]")
像这样,我可以找到Span元素,但我需要在INPUT中插入价格。
因为这只是一个更大的代码片段,其中类名位置等是动态生成的。我需要这样做。
1条答案
按热度按时间wnavrhmk1#
您可以根据
span
同层级文字内容值来寻找input
元素,如下所示:(有更多方法可以做到这一点)。
因此,您的Selenium代码可以如下所示:
在
<span>Price</span>
是父div
的直接子的情况下,我们可以使定位器更精确,如下所示:简要说明:
使用XPath,我们可以通过任何it属性来定位元素。
这里我们可以根据
div
包含一个直接的span
子元素(包含Price
文本)来定位父元素div
。因此,
span[contains(text(),'Price')]
会将span
与Price
文本内容匹配,而//div[./span[contains(text(),'Price')]]
的字面意思是:“在
//
的某个地方找到一个具有div
标记名称的元素,以便在该元素内部(这就是为什么在那里使用点.
)有一个直接子元素/
是span
,其文本内容是Price
“。一旦我们有了这个
div
,我们就可以找到它的input
子级。就这么简单。