div 中所有 //a[@href] 标记的 XPath,第一个 /li 标记文本 "Something"

XPath for all the //a[@href] tags in a div with the first /li tag text "Something"

我必须从某个页面的类别中找到所有 URL。类别是 <div> 标签中的第一个 <li> 标签。该页面如下所示。

    <div class="c1">
        <ui>
            <li class="d1"> someText </li>
            <div>
                <li> <a href="some url1"> 
            </div>
            <div>
                <li> <a href="some url2"> 
            </div>
            <div>
                 <li> <a href="some url3"> 
            </div>
        </ui>
    </div>

如何找到"someText"li标签对应的所有hrefs

您可以使用 xpath following-sibling 轴。

//div/ui/li[contains(text(), 'someText')]/following-sibling::div/li/a/@href

可以先通过"someText"文本定位到li元素,然后横向移动得到following sibling div元素:

//li[contains(., "someText")]/following-sibling::div/li/a 

或者,normalize-space()

//li[normalize-space(.) = "someText"]/following-sibling::div/li/a  

(不包括 @href 部分,因为您已经指出您正在使用 selenium - 您需要找到与 XPath 表达式匹配的元素并使用 [= 获取 href 属性18=])

试试这个 XPath-1.0 表达式:

//div[@class='c1']/ui[normalize-space(li[@class='d1'])='someText']/div/li/a/@href

它的输出是

some url1
some url2
some url3

How to find all the hrefs corresponding to the "someText" li tag?

Content-based选择

@alecxe's fine answer (+1),但你的标题和你问题的这一部分,

I have to find all the URLs from a page in categories. The categories are the first <li> tag in a <div> tag.

似乎更关心第一位置而不是内容...

Position-based选择

这个 XPath,

(//div[@class="c1"]//li[1]/following::a)[1]

选择第一个 a 元素,紧跟在第一个 li 元素之后的第一个 div 元素后代。