java - 从表中将所有单元格值作为字符串抓取

标签 java selenium selenium-webdriver

我正在尝试从我之前建立的页面的成员(member)详细信息页面获取一些数据。

但是,并非所有这些页面看起来都一样。它们基本上是在后台创建表,如果数据存在则添加表,如果不存在则不添加表。

此外,表格没有固定长度,如果某些字段不存在则可以更改。

这样的 tables body 看起来像这样:

    <tbody><tr>
      <td style="width: 115px; vertical-align: top;">
        <img src="/Image/1231" alt="" style="width:100px;"><br>
        Hamburg<br>
        <br>
      </td>
      <td class="trenner_l" style="vertical-align: text-top;">
        <table style="width: 100%;">
          <tbody><tr>
            <td colspan="4" class="trenner_u"></td>
          </tr>
            <tr style="height: 8px;">
              <td style="vertical-align: middle;">
                  <img src="/Content/images/floasdfh_ain.png" title="memb" height="16">
&nbsp;
              </td>
              <td style="vertical-align: top;">
                vlg.&nbsp;minao
              </td>
              <td class="trenner_l">
                <a href="/memb/DetailSmall/daTB_iframe=true&amp;height=132&amp;width=420" class="thickbox" >
                  Cate1</a> (21.03.1928)
              </td>
              <td class="trenner_l" style="vertical-align: top;">
                UP,&nbsp;FORUM
              </td>
            </tr>
            <tr style="height: 8px;">
              <td style="vertical-align: middle;">
&nbsp;
              </td>
              <td style="vertical-align: top;">
                name.&nbsp;minao
              </td>
              <td class="trenner_l">
                <a href="/Verband/DetailSmall/jhkg?TB_iframe=true&amp;height=132&amp;width=420" class="thickbox" >Zone
                  1</a> 
              </td>
              <td class="trenner_l" style="vertical-align: top;">
                Z1,&nbsp;CV
              </td>
            </tr>
            <tr style="height: 8px;">
              <td style="vertical-align: middle;">
&nbsp;
              </td>
              <td style="vertical-align: top;">
                vlg.&nbsp;meno
              </td>
              <td class="trenner_l">
                <a href="/Verband/DetailSmall/asdfasd?TB_iframe=true&amp;height=132&amp;width=420" class="thickbox" >K.D.St.V.
                  Zone2</a> 
              </td>
              <td class="trenner_l" style="vertical-align: top;">
                Z1,&nbsp;Forum
              </td>
            </tr>

          <tr>
            <td colspan="4" class="trenner_o"></td>
          </tr>
            <tr>
              <td colspan="2">
                Mobiltelefon privat:&nbsp;
              </td>
              <td colspan="2" class="trenner_l">
                <a href="tel:+22341123124">+22341123124</a>
              </td>
            </tr>
            <tr>
              <td colspan="4" class="trenner_o"></td>
            </tr>
            <tr>
              <td colspan="2">email:
              </td>
              <td colspan="2" class="trenner_l">
                <a href="mailto:test.test@gmail.de">test.test@gmail.de</a>
              </td>
            </tr>
            <tr>
              <td colspan="4" class="trenner_o"></td>
            </tr>
            <tr>
              <td>
                <img src="/Content/images/icons/map.png">
              </td>
              <td style="vertical-align: top;">
                adress:&nbsp;
              </td>
              <td colspan="2" class="trenner_l" style="vertical-align: top;">
                Teststreet 2, 243423&nbsp;City, State 


              </td>
            </tr>
        </tbody></table>


        <br>
          <div class="TextSmall">online 12.04.2013</div>
      </td>
    </tr>
  </tbody>

因为我只需要可用的数据,所以我的想法是获取这样一个表中的所有字符串信息

我尝试了以下方法:

    for (int j = 0; j < list.size(); j++) {
        String link = list.get(i).getLinkToGVPage();
        openSite(link);
        //  
        List<WebElement> adresse = driver.findElements(By.xpath("//*[@id=\"ui-id-4\"]/table/tbody/tr/td"));
        for (int k = 0; k < adresse.size(); k++) {
            System.out.println(adresse.get(k).getText());
        }

                    WebElement adresse = driver.findElement(By.xpath("//*[@id=\"ui-id-4\"]/table/tbody/tr[6]/td"));
                    System.out.println(adresse.getText());
                } catch(Exception e) {
                    System.out.println("exceptions");
                    e.printStackTrace();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

但是,我什么也没得到。关于如何仅从表中获取字符串值的任何建议,以便我可以将它们保存在 string variable 中。

感谢您的回复!

最佳答案

我个人使用 Python 而不是 Java,但总体原则对我来说似乎是一样的:我会使用 if/elseif 结构分别检查每个字符串,然后将找到的字符串保存到一个变量中。

问题是,查看您的表格,这些字段似乎没有唯一标识符,这意味着很难正确识别它们。如果您能够调整生成页面的代码(或让某人为您执行此操作),我会给您希望能够检测其自己的类的每种类型的单元格。

关于java - 从表中将所有单元格值作为字符串抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812768/

相关文章:

java - map 正在加载,但在 Android 开发中看不到 map

python - 使用 Selenium 自动化测试选择本地文件

javascript - Htmlunit 驱动程序与 Javascript 有问题

java - 需要自定义 arraylist 值,如下所示

java - 如何在通过 Ant 运行的 Selenium 2 WebDriver TestNg 测试中设置日志级别

java - Hibernate:不能对 OFFSET 和 LIMIT 使用命名参数吗?

java - 在java中从parse.com转换时间戳

ruby - 如何在 goto 之前设置 cookie?

java - 尝试在 Android 中使用嵌套列表对 Json 进行排序

Python Selenium 与 TOR 浏览器绑定(bind)