XPath从两个子文本中获取父元素

时间:2017-02-26 16:47:34

标签: python selenium xpath

<div class="inner-article">
    <a style="height:150px;" href="this is a link"><img width="150" height="150" src="this is an image" alt="K1 88ahiwyu"></a>
    <h1><a class="name-link" href="/shop/jackets/pegroxdya/dao7kdzej">title</a></h1>
    <p><a class="name-link" href="/shop/jackets/pegroxdya/dao7kdzej">subtitle</a></p>
</div>

您好!

我需要找到一个XPath来通过两个“a”孩子的Title和Subtitle获得带有class =“inner-article”的“div”。我想要操作的网站有很多这些内部文章,我需要找到一个特定的,只有标题和副标题。

E.G。:该网站的内部文章标题为“Company®LeatherWork Jacket”,副标题的颜色为“Silver”。

现在我需要能够找到“div”元素,即使我只有标题的关键字“Work Jacket”和副标题的“Silver”。

这就是我想出来的:

    e1 = driver.find_element_by_xpath("//*[text()[contains(.,'" + kw + "')]]")

kw是一个字符串,其中包含标题的关键字,如果我将其打印出来,它正确响应“a”元素并点击它也有效,但它不够具体,因为有更多的对象也有这些关键字在他们的标题中,这就是为什么我还需要始终包含颜色的字幕(这里称为字符串“clr”):

    e2 = driver.find_element_by_xpath("//*[text()[contains(.,'" + clr + "')]]")

这也可以正确地点击字幕,但只有颜色也会返回网站上的多个对象。

这就是为什么我需要找到带有标题关键字和字幕颜色的“div”元素。

我试过这个,但它不起作用:

e1 = driver.find_element_by_xpath("//*[text()[contains(.,'" + kw + "') and contains(.,'" + clr + "')]]")

2 个答案:

答案 0 :(得分:1)

尝试

driver.find_element_by_xpath("//div[h1/a[contains(text(),'" + kw + "')] and p/a[contains(text(),'" + clr + "')]]")

答案 1 :(得分:0)

您可以了解更多xpath语法。Refer to this link

在您的情况下,您可以像这样使用xpath。

("//*[text()[contains(.,'" + kw + "')]]/parent::div[1]")