如何在xpath上找到正确的链接?

时间:2014-02-23 15:28:42

标签: html css selenium xpath selenium-ide

您好我是selinium ide和xpath的新手,这就是我需要帮助的原因。我需要点击网站上的一些链接,我可以使它在1个链接中工作我不知道它将如何搜索并点击其他链接,因为它有不同的编号和帖子标题。链接看起来像这样。

http://imageshack.com/a/img27/328/zv17.png

<a href="/sample/15151-hey-you">post</a>
<a href="/sample/142151-im-okay">post</a>
<a href="/sample/512512-thats-fine">post</a>

我使用此xpath,它适用于第一个链接

//div[@id='main']/ul[2]/li[1][@class='notification-posted']/a[2]

点击1个链接和前面的链接

的正确xpath是什么

请帮我解决这个问题

修改
非常感谢你的第一个代码,但不是第二个代码。但是ul中的每个帖子都很重要,你的代码正在处理ul。

中的第一篇文章
<h5>20 seconds ago</h5>
<ul>
    <li class="notification-posted">
        <img height="15" alt="" src="/assets/images/icons/notification-posted.png" />
        <a href="/account/54351-wews">wews</a>
        send new
        <a href="/news/53235">post</a> <!--//li[@class='notification-posted'][1]/a[2]-->
    </li>
</ul>
<h5>3 minutes ago</h5>
<ul>
    <li class="notification-posted">
        <img height="15" alt="" src="/assets/images/icons/notification-posted.png" />
        <a href="/account/632323-yokol">yokol</a>
        submitted a new
        <a href="/news/253129-loss">post</a> <!--//li[@class='notification-posted'][2]/a[2]-->
    </li>
</ul>
<h5>4 minutes ago</h5>
<ul/>
<h3>6 minutes ago</h3>
<ul/>
<h5>7 minutes ago</h5>
<ul>
    <h2>8 minutes ago</h2>
    <ul />
    <li class="notification-posted" />
    <li class="notification-posted" />
    <li class="notification-posted" />
    <li class="notification-posted" />
    <li class="notification-posted" />
    <img height="15" alt="" src="/assets/images/icons/notification-posted.png" />
    <a href="/account/153316-problem">hey</a>
    send new
    <a href="/news/25151-helloworld">post</a> <!--***Problem was here***-->
</ul>

应该是

//li[@class='notification-posted'][6]/a[2] 

正确?但它解析其他链接。谢谢你的回答。

2 个答案:

答案 0 :(得分:0)

/ul[2]...应该返回第二个ul

的第一篇文章

假设每个ul的帖子数量都是可变的,也不重要(即你想要帖子而不管他们在哪个ul),那么你可以绕过{{1 }}

如果ul唯一标识帖子,您可以按如下方式引用3个链接:

<li class='notification-posted'>

需要(//li[@class='notification-posted'])[1]/a[2] (//li[@class='notification-posted'])[2]/a[2] (//li[@class='notification-posted'])[3]/a[2] (// ... )[n]/a[2] ,因为您在每个实例中的第二个链接之后。

如果这不够有选择性,您可以添加a[2]必须还包含li img图标的过滤器,该图标始终与超链接相关联:

notification-posted.png

和链接(//li[@class='notification-posted'][img src="/assets/images/icons/notification-posted.png"])[1]//a[2] [2]

相同

修改

您可以找到包含以下xpath的文本[3]的所有链接:

post

使用以下xsl测试(h //a[@href][normalize-space(.)='post'] 版本的html):

xhtml

给出:

<xsl:for-each select="//a[@href][normalize-space(.)='post']">
    <Link>
        <xsl:value-of select="@href"/>
    </Link>
</xsl:for-each>

答案 1 :(得分:0)

您可以找到以下所有链接:

//a[starts-with(@href,'/news/')]

或:

//a[starts-with(@href,'/news/')]/@href