gpt4 book ai didi

java - 使用 selenium 访问 值

转载 作者:行者123 更新时间:2023-11-29 03:30:23 24 4
gpt4 key购买 nike

使用 selenium 我试图读出一个动态生成的表,我得到了正确的元素(使用 findElement 方法)但使用 getText()在他们身上什么都不返回。

可能是因为 getText()返回“文本”时查找引号,但在 <td> 之间找不到任何引号标签。一些建议是使用 xpaths,但由于表是动态生成的,我需要的值的位置也会发生变化。

这是我试图从中获取 3 个数据点的表:

<table cellpadding="0" cellspacing="0" class="fleetinfo">
<tbody><tr>
<th colspan="2">Schepen:</th>
</tr>
<tr>
<td>Groot vrachtschip:</td>
<td class="value">
40 </td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<th colspan="2">Lading:</th>
</tr>
<tr>
<td>Metaal:</td>
<td class="value">
536.062 </td>
</tr>
<tr>
<td>Kristal:</td>
<td class="value">
289.008 </td>
</tr>
<tr>
<td>Deuterium:</td>
<td class="value">
92.750 </td>
</tr>
</tbody></table>

我感兴趣的是 <td class="value"> 里面的那些标签,但正如我之前所说,使用 getText()对它们返回 null。

关于如何访问这些值有什么想法吗?

编辑:我现在是这样做的

private int getMetalFromFleet(WebElement fleet)
{
int ret=0;

WebElement streak = fleet.findElement(By.className("starStreak"));
List<WebElement>fleetDetails = streak.findElements(By.tagName("tr"));

for(WebElement detail : fleetDetails)
{
List<WebElement> tabel = detail.findElements(By.tagName("td"));

if(tabel.size() != 2)
continue;

if(tabel.get(0).getText().equalsIgnoreCase("metaal:"))
{
ret = Integer.parseInt(tabel.get(1).getText());
break;
}
}

return ret;
}

编辑:这里是 html 的相关部分

<div id="fleet9965869" class="fleetDetails detailsOpened" data-mission-type="4" data-return-flight="false" data-arrival-time="1378241688">
<span class="timer tooltip" title="03.09.2013 22:54:48" id="timer_9965869">58m 48s</span>
<span class="absTime">22:54:48 Klok</span>
<span class="mission neutral textBeefy">Plaatsen</span>
<span class="allianceName"></span>
<span class="originData">
<span class="originCoords tooltip" title="killernerd"><a href="http://uni107.ogame.nl/game/index.php?page=galaxy&amp;galaxy=5&amp;system=213">[5:213:8]</a></span>
<span class="originPlanet">
<figure class="planetIcon planet tooltip js_hideTipOnMobile" title="planeet"></figure>k7 </span>
</span>
<span class="marker01"></span>
<span class="marker02"></span>
<span class="fleetDetailButton">
<a href="#bl9965869" rel="bl9965869" title="Vlootdetails" class="tooltipRel tooltipClose fleet_icon_forward">
</a>
</span>
<span class="reversal reversal_time" ref="9965869">
<a class="icon_link tooltipHTML" href="http://uni107.ogame.nl/game/index.php?page=movement&amp;return=9965869" title="Roep terug:| 04.09.2013&lt;br&gt;01:54:05">
<img src="http://gf2.geo.gfsrv.net/cdna2/89624964d4b06356842188dba05b1b.gif" height="16" width="16">
</a>
</span>
<span class="starStreak">
<div style="position: relative;">
<div class="origin fixed">
<img class="tooltipHTML" height="30" width="30" src="http://gf1.geo.gfsrv.net/cdnf0/af41c52dc08208b4463f4a4608e88c.png" title="" alt="">
</div>

<div class="route fixed">

<a href="#bl9965869" rel="bl9965869" title="Vlootdetails" class="tooltipRel tooltipClose basic2 fleet_icon_forward" id="route_9965869" style="margin-left: 220px;"></a>

<div style="display:none;" id="bl9965869">
<div class="htmlTooltip">
<h1>Vlootdetails:</h1>
<div class="splitLine"></div>
<table cellpadding="0" cellspacing="0" class="fleetinfo">
<tbody><tr>
<th colspan="2">Schepen:</th>
</tr>
<tr>
<td>Groot vrachtschip:</td>
<td class="value">
960 </td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<th colspan="2">Lading:</th>
</tr>
<tr>
<td>Metaal:</td>
<td class="value">
8.173.484 </td>
</tr>
<tr>
<td>Kristal:</td>
<td class="value">
6.325.966 </td>
</tr>
<tr>
<td>Deuterium:</td>
<td class="value">
7.474.821 </td>
</tr>
</tbody></table>
</div> </div>

</div>

<div class="destination fixed">
<img class="tooltipHTML" height="30" width="30" src="http://gf2.geo.gfsrv.net/cdnaa/af0b356fdbecc1cfc47130e990fa66.png" title="Aankomsttijd:| 03.09.2013&lt;br&gt;22:54:48" alt="">
</div>
</div>
</span><!-- Starstreak -->
<span class="destinationData">
<span class="destinationPlanet">
<span>
<figure class="planetIcon planet tooltip js_hideTipOnMobile" title="planeet"></figure>Hoelbrak </span>
</span>

<span class="destinationCoords tooltip" title="killernerd"><a href="http://uni107.ogame.nl/game/index.php?page=galaxy&amp;galaxy=1&amp;system=2">[1:2:6]</a></span>

</span>
<span class="nextTimer tooltip" title="04.09.2013 03:52:31" id="timerNext_9965869">5u 56m 31s</span>
<span class="nextabsTime">03:52:31 Klok</span>
<span class="nextMission friendly textBeefy">Keer terug</span>
<span class="openDetails">
<a href="javascript:void(0);" class="openCloseDetails" data-mission-id="9965869" data-end-time="1378241688">
<img src="http://gf3.geo.gfsrv.net/cdnb6/577565fadab7780b0997a76d0dca9b.gif" height="16" width="16">
</a>
</span>
</div>

我需要的值是“Metaal”、“kristal”和“deuterium”下的数值。

最佳答案

我建议在这种情况下使用 xpath 而不是依赖标记名;

private int getMetalFromFleet(WebElement fleet)
{
By identifier = By.xpath("td[contains(text(),'Metaal')]/following-sibling::td[contains(@class,'value')]");

return Integer.parseInt(fleet.findElement(identifier).getText());
}

显然,您会希望在其中进行一些错误处理,但希望这能让人明白这些循环并不总是必需的,而且 Xpath 并不总是像某些人认为的那样可怕。

编辑

以防万一有人感到困惑,如果选择器是在 WebElement 而不是 WebDriver 对象上执行的,则 XPath 没有前导斜杠是可以的。

如果在 WebDriver 对象上使用此选择器,则必须添加两个前导斜杠。

再次编辑!

Xpath 可能需要一些调整,但您应该了解该方法。我在您的 html 中看不到“StarStreek”,但它在您的代码中,因此将其添加到我的 xpath 中。

关于java - 使用 selenium 访问 <td> 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18581522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com