0

如何仅解析这些代码块的文本部分?我在 java 中使用 Selenium 客户端驱动程序。

<li id="NOT_PUT_PREF_STORE" style="">
<span id="STORE_AVAIL" class="BodyLBoldGrey StockStat">Out of stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span>
</li>

或者

<li id="NOT_PUT_PREF_STORE" style="">
<span id="STORE_AVAIL" class="BodyLLtgry StockStat">Not carried</span> <span class="BodyLLtgry" id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span>
</li>

或者

<li id="NOT_PUT_PREF_STORE" style="">
<span id="STORE_AVAIL" class="BodyMBold StockStatGreen">In stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span>
</li>

我正在尝试解析 web 元素中每个变体中的文本部分(即:未携带、有货、缺货)。我是 selenium 和 html 解析的新用户,所以这对我来说很难发挥作用。

我在想它会是这样的

WebElement driver = new FirefoxDriver(profile);
driver.get(Url);
System.out.println(driver.getElement(By.id("STORE_AVAIL").getText());

不知道如何使用 cssSelector 做到这一点,但人们告诉我这更快。这行得通吗?

driver.getElement(By.xpath("//li[@id='NOT_PUT_PREF_STORE']./span[@id='STORE_AVAIL']").getText()
4

3 回答 3

0

当您“查看页面源代码”时,它只会显示原始 HTML 源代码。它不会显示 AJAX 调用所做的更改,这看起来就像沃尔玛页面正在更新该部分/元素。这个问题提供了更好的解释。

假设您使用的是 Firefox(基于您使用的驱动程序),您可以转到该页面并单击 Ctrl+Shift+I 以调出 Inspector 工具。选择您感兴趣的元素。然后单击 [HTML] 按钮(在 Inspector 菜单中)以查看当前源。

请注意,当您使用 selenium webdriver 获取元素时,它将获取当前值而不是页面源中看到的原始值。因此,您不必担心在页面源中看到的内容。

于 2012-04-26T04:07:08.050 回答
0

当我尝试在页面上查找元素时,我总是通过以下方式构建定位器:

  1. 身份证=driver.getElement(By.id("STORE_AVAIL").getText());
  2. CSS 选择器 =driver.getElement(By.css("span#STORE_AVAIL").getText());
  3. xpath =driver.getElement(By.xpath("//span[@id='STORE_AVAIL']").getText());

对于 webdriver 和我来说,id 似乎是最快和最简单的。id 在页面上应该是唯一的。

CSS 需要我做更多的调查工作,但 webdriver 处理得很好。

最后,xpath 有时是不可避免的(除非你给开发者买了一杯啤酒并很好地要求更改为应用程序以便你可以更快地找到它——毕竟,无论如何你都是在为它们进行测试)。使用 IE 通过 xpath 定位非常慢,编写复杂的 xpath 很麻烦。

Xpath 也很脆弱,对 dom 的一个小改动可能会使您的 xpath 无法使用。然后你可以调试/重写你的 xpath(听起来很有趣)。

我的建议是使用 Firefox 的 Firebug 和 FirePath 插件来帮助您制作定位器。

于 2012-04-27T14:24:52.763 回答
0

我尝试使用以下 html 代码片段

<li id="NOT_PUT_PREF_STORE" style="">
<span id="STORE_AVAIL" class="BodyLBoldGrey StockStat">Out of stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span>
</li>

我正在使用以下代码来解决它。我使用 XPath 获取 span 元素树,并解析其中的每一个以获取元素的文本。

driver.navigate().to("file:///C:/Users/abc/Desktop/test.html");
    List<WebElement> spanEle = driver.findElements(By.xpath("//li/span"));
    for (int i = 0; i < spanEle.size(); i++) {
             System.out.println(spanEle.get(i).getText());
于 2014-11-06T04:55:40.143 回答