我使用selenium java搜索不同的网站,我知道查找特定的Web元素有不同的方法,如使用xpath、使用类或使用id。假设某个网站具有如下所示的html结构
<div id="column_left">
<div id="score_strength" class="box_analytics" style="margin-right:4px;">
<div class="score">1<span class="score_title">%</span></div>
<div class="score_title">strength</div>
</div>
<div id="score_sentiment" class="box_analytics">
<div class="score">43:1</div>
<div class="score_title">sentiment</div>
</div>
<div id="score_passion" class="box_analytics" style="margin-right:4px;">
<div class="score">75<span class="score_title">%</span></div>
<div class="score_title">passion</div>
</div>
<div id="score_reach" class="box_analytics">
<div class="score">12<span class="score_title">%</span></div>
<div class="score_title">reach</div>
</div>
现在,如果我想从类名为“score”和“score_title”的div中提取文本,即1%的强度、43:1的情绪、75%的激情和12%的到达,那么下面哪一个选项是最好的。
对xpath使用class=“box\u analytics”,然后循环遍历每个Web元素:
Lis<WebElement> elementList = driver.findElements(By.xpath("//*[@class='box_analytics']"));
对每个元素使用id=“核心力量”,id=“情感得分”,id=“激情得分”,id=“达成得分” WebElement element1 = driver.findElements(By.xpath("//*[@id='score_strength']"));
WebElement element2 = driver.findElements(By.xpath("//*[@id='score_passion']")); WebElement element3 = driver.findElements(By.xpath("//*[@id='score_reach']"));
2条答案
按热度按时间pxq42qpu1#
这取决于您的HTMLDOM。案例1:若您的dom是静态的,就像前面提到的那个样,并且总是有4个id,那个么您可以使用id标识元素并从中提取文本。案例2:如果您的dom是动态的(即每次都会更改,包括id的数量),那么您需要更喜欢使用类,并使用driver.findelements从中获取列表。稍后,您可以通过每个webelement迭代并执行gettext()。
gopyfrb32#
选择2更好,它是明确和海峡前进。在以后的时间点,更容易理解代码发生了什么。