我正在尝试引用下面 HTML 中的链接元素。
我尝试引用的元素是其中包含“WANT_TO_FIND_THIS_LINK”的元素。
使用它可以找到主 div 就好了:
var productHolder = driver.FindElements(By.XPath("//div[@data-partnumber='123456']"));
但是当我尝试访问该链接时,它什么也没返回。 我尝试了多种不同的方法,但它们都没有返回任何结果:
var productHolder = driver.FindElements(By.XPath("//div[@data-partnumber='123456']//div[@class='fc-image image-fit']//a"));
var productHolder = driver.FindElements(By.XPath("//div[@data-partnumber='123456']//div[contains(@class, 'fc-image')]"));
var productHolder = driver.FindElements(By.XPath("//div[@data-partnumber='123456']//div[@class='fc-image image-fit']//a"));
但是当我回到顶部时:
var productHolder = driver.FindElements(By.XPath("//div[@data-partnumber='123456']"));
效果很好。
在这里尝试一切:http://xpather.com/它找到了我需要的东西。我做错了什么,任何帮助都会很棒!
HTML 代码片段:
<div class="col-sm-3 col-xs-6 fg-products-product" data-partnumber="123456" data-kjs-app="products/product" data-kjs-entityid="71">
<input type="hidden" data-kjs-setting="initialize" value="1" data-kjs-datatype="bool">
<input type="hidden" data-kjs-setting="hideDescription" value="1" data-kjs-datatype="bool">
<input type="hidden" data-kjs-setting="partnumber" value="123456">
<input type="hidden" data-kjs-setting="bridgeKey" value="search/result/main-13-getProduct|type:products|aggregationName:pro">
<div data-kjs-view="main">
<div class="fc-wrapper">
<div data-kjs-view="wishlist">
<div data-kjs-app="wishlist/control" class="fg-wishlist-control" data-kjs-entityid="183">
<input type="hidden" data-kjs-setting="partnumber" value="123456">
<input type="hidden" data-kjs-setting="onWishlist" value="0" data-kjs-datatype="bool">
<div data-kjs-view="controls">
<a href="javascript:void(0);" class="fc-add" data-kjs-click="add" title="Add to wishlist"></a>
</div>
</div>
</div>
<div class="fc-image image-fit">
<a data-kjs-click="linkClicked" href="/uk/professional/maincat/subcat/producta.html">WANT_TO_FIND_THIS_LINK
<img src="/mam/123456/mainproduct/160440/d4.jpg" alt="main image"></a>
</div>
<div data-kjs-view="addedValue">
</div>
<div class="fc-details">
<h6 class="fc-label" style="min-height: 78px;">
<a data-kjs-click="linkClicked" id="producttitle-71-10516762" href="/uk/professional/maincat/subcat/producta.html">
Fun Toy
</a>
</h6>
<div class="fc-price" data-kjs-view="price" style="min-height: 20px;">
<div class="fg-products-price" data-kjs-app="products/price" data-kjs-entityid="184">
<input type="hidden" data-kjs-setting="price.price" value="">
<input type="hidden" data-kjs-setting="price.priceFormatted" value="">
<input type="hidden" data-kjs-setting="price.oldPrice" value="0">
<input type="hidden" data-kjs-setting="price.oldPriceFormatted" value="">
<input type="hidden" data-kjs-setting="price.recommendedRetailPrice" value="">
<input type="hidden" data-kjs-setting="price.recommendedRetailPriceFormatted" value="">
<input type="hidden" data-kjs-setting="price.priceSaving" value="">
<div data-kjs-view="price" style="min-height: 20px;">
</div>
</div>
</div>
<div class="fc-ratings">
<a data-kjs-click="linkClicked" href="/uk/professional/maincat/subcat/producta.html#ratings">
<span class="ff-cursor-overlay"></span>
</a>
</div>
<div class="fc-description">
</div>
<div class="fc-compare" data-kjs-app="products/comparison/control" data-kjs-entityid="185">
<input type="hidden" data-kjs-setting="productId" data-kjs-value="10516762">
<div class="fg-checkbox-custom" data-kjs-app="content/checkbox" data-kjs-entityid="186">
<input id="compare_10516762" type="checkbox" class="fc-checkbox-custom" data-kjs-change="products/comparison/control|toggleComparison">
<label for="compare_10516762">
Compare
</label>
</div>
</div>
</div>
<div data-kjs-view="button">
</div>
<div data-kjs-view="lowestPriceInfo">
</div>
</div>
</div>
</div>
给定提供的 HTML,此 CSS 选择器将找到 A 标签。
div[data-partnumber='123456'] div.fc-image a
如果您必须有一个 XPath,则相当于上面的内容是
//div[@data-partnumber='123456']//div[contains(@class,'fc-image')]/a
注意:如果这些仍然没有返回任何内容,您需要确保添加
WebDriverWait
并等待可点击。