我在下面有这个HTML代码,我想区分这两个PagePostsSectionPagelet
因为我只想从第一个 PagePostsSectionPagelet
中找到网页元素。我有什么方法可以不使用 <div id="PagePostsSectionPagelet-183102686112-0"
,因为价值不会总是一样吗?
<div id="PagePostsSectionPagelet-183102686112-0" data-referrer="PagePostsSectionPagelet-183102686112-0">
<div class="_1k4h _5ay5">
<div class="_5sem">
</div>
</div>
<div id="PagePostsSectionPagelet-183102686112-1" class="" data-referrer="PagePostsSectionPagelet-183102686112-1" style="">
<div class="_1k4h _5ay5">
<div class="_5dro _5drq">
<div class="clearfix">
<span class="_5em9 lfloat _ohe _50f4 _50f7">Earlier in 2015</span>
<div id="u_jsonp_3_4e" class="_6a uiPopover rfloat _ohf">
</div>
</div>
<div id="u_jsonp_3_4j" class="_5sem">
<div id="u_jsonp_3_4g" class="_5t6j">
<div class="_1k4h _5ay5">
<div class="_5sem">
</div>
</div>
尝试使用//div[@class='_1k4h _5ay5']//div[@class ='_5sem']
,但它会返回两者。
使用//div[@class='_5dro _5drq']//span[contains(@class,'_5em9 lfloat _ohe _50f4 _50f7') and contains(text(), '')]
可帮助我找到第二个PagePostsSectionPagelet
。
答案 0 :(得分:0)
我看到div id中的动态只是数字,所以你可以使用类似的东西:
WebElement element = driver.FindElements(By.XPath("//div[contains(.,'PagePostsSectionPagelet')])")[1];
这只会占用第一个网络元素。
答案 1 :(得分:0)
您需要使用以下xpath:
//div[contains(@class,'_1k4h') and contains(@class,'_5ay5')]
因为selenium在一个属性中搜索多个类时无法正常工作。 我的意思是By.Class(&#34; _1k4h _5ay5&#34;)在任何情况下都找不到任何东西和By.Xpath(&#34; // div [@class =&#39; _1k4h _5ay5&#39;]&# 34;)也可以在课堂上找不到任何东西&#34; _5ay5 _1k4h&#34;或&#34; _5ay5 _1k4h&#34;。(因为它们可能是自动生成的,它可能在页面重新加载时有不同的位置)
但是,对于性能和正确性的最佳结果,我认为将是以下xpath:
".//div[contains(@id, 'PagePostsSectionPagelet')][1]" -- for first div
".//div[contains(@id, 'PagePostsSectionPagelet')][2]" -- for second div
答案 2 :(得分:0)
尝试使用如下的css选择器,并根据需要进一步细化。 下面的代码返回一个匹配的WebElements列表,然后你抓住列表中的第一个。
List<WebElement> listOfElements = driver.findElements(By.cssSelector("div[data-referrer]"));
WebElement myElement = listOfElements.get(0);
提示:使用Chrome控制台直接测试您的css和xpath选择器。例如使用 控制台中的$$(&#34; div [data-referrer]&#34;)显示将被选中的内容。