XPath select 在 JavaScript 中设置了 link

XPath select a link set in JavaScript

我正在尝试使用 XPath 检索 link。 link 用于分页,设置在 JavaScript 中。该网站是 stocklot.com。 使用此代码:

$x("//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href")

我能得到这个:

[href="javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');”]

你知道我如何 select 只 link 而没有 JavaScript 部分吗?

以下解决方案假定字符串(如问题中 href 属性的值)以 3 个字符 ');.
结尾 对于简化示例

<root>
  <div class="pagination pagination-centered hidden-phone">
    <ul>
        <li>
           first
        </li>
        <li>
            <a href="javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');">link</a>
        </li>
    </ul>   
  </div>
</root>

XPath

string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href)

returns

javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');

要只得到link,XPath可以调整为:

substring(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),string-length(substring-before(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1,string-length(substring-after(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1)

结果:

http://www.stocklot.com/home/list/0/30/30.html

为了提高 XPath 的可读性,缩进并作为示例,使用 string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href) 检索的字符串写为 $string :

substring($string, string-length(substring-before($string,'http'))+ 1,
          string-length(substring-after($string,'http')) + 1)

补充说明:

substring(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),string-length(substring-before(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1)

结果

http://www.stocklot.com/home/list/0/30/30.html');

虽然可以获得 .html 的位置并在 .html 之后使用与 substring() 类似的 XPath,但 link 可能以.php 或包含参数(例如以 .html?id=10 结尾),因此上述方法只是切断最后 3 个字符。