HTML CODE
<div class="filterInfoContainer">
<div class="result-header-right">
<div class="show-soldout">
<label for="soldout-switch">Display sold out products</label>
<label class="switch xs">
<input type="checkbox" name="soldout-switch" id="soldout-switch">
<div class="switch-slider"></div>
</label>
</div>
<div class="sort-by">Sorted by:
<select id="sortByDropdown">
<option value="popularity">Popularity</option>
<option value="price">Lowest price</option>
<option value="discount">Highest discount</option>
<option value="year">Latest release</option>
</select>
</div>
</div>
Showing 323 products
<div class="clearfix"></div>
</div>
Xpath我试过
.//*[@id='filterInfo']/div
.//*[@id='filterInfo']/div/text()
我想获取文字显示323个产品,但我的xpath不会返回给我。由于这篇文章没有特别的 div ,我很难得到它。
我试过的硒代码
driver.findElement(By.xpath(".//*[@id='filterInfo']/div"));
driver.findElement(By.xpath(".//*[@id='filterInfo']/div/text()"));
获取异常:无效选择器
答案 0 :(得分:1)
您可以使用//div/text()
显示323个产品。
基本上它会返回未包含在标签中的文本。
请参阅此example。
所以在你的情况下:
//div[@class='filterInfoContainer']/text()
http://www.xpathtester.com/xpath/d06b22fb023db960d8fc619485759127
答案 1 :(得分:0)
尝试使用Chrome中的开发者工具查找&#34; filterInfo&#34;首先通过xpath组件,看看是否有效。
答案 2 :(得分:0)
只有当您的第二个Selenium
打算返回文本节点时,XPath
webelement
表达式才会返回XPath
。这就是为什么你得到Invalid Selector
例外。
此外,我在提供的div
示例中看到id="filterInfo"
没有HTML
。如果您需要获取"Showing 323 products"
,请尝试以下代码:
driver.findElement(By.xpath("//div[@class="filterInfoContainer"]/div[1]")).getText();
考虑更新的HTML
示例,这是另一种方法,当您需要获取不包含子元素文本的文本时:
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("return document.evaluate('//div[@class=\"filterInfoContainer\"]/div/following-sibling::text()', document, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;");