Java 访问html页面中具有未知表数的所有表

Java 访问html页面中具有未知表数的所有表,java,htmlunit,Java,Htmlunit,我想访问网页中迭代的所有表,这些表的数量未知。我已经写了这个代码 import java.io.*; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlTable; import com.gargoylesoftware.htmlunit.html.HtmlTableRow; import com.gargoylesoftware.htmlunit.

我想访问网页中迭代的所有表,这些表的数量未知。我已经写了这个代码

import java.io.*; 
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
import com.gargoylesoftware.htmlunit.html.*;
import com.gargoylesoftware.htmlunit.WebClient;


public class test {

public static void main(String[] args) throws Exception {

            WebClient client = new WebClient();
            HtmlPage currentPage = client.getPage("http://www.mysite.com");
            client.waitForBackgroundJavaScript(10000);
            FileWriter fstream = new FileWriter("index.txt");
        BufferedWriter out = new BufferedWriter(fstream);

        for (int i=0;i<2;i++){
         final HtmlTable table =(HtmlTable)    currentPage.getByXPath("//table").get(i);
         for (final HtmlTableRow row : table.getRows()) {
                for (final HtmlTableCell cell : row.getCells()) {
                out.write(cell.asText()+',');
                }
         out.write('\n');
    }
}

out.close();
    client.closeAllWindows();

}
}

但不被接受。什么是正确的检查条件?

htmlunit.html.HtmlPage有一个方法 getElementsByTagName(字符串标记名)

您可以在其中传递“table”的标记名。然后以粗略的伪代码获取它返回的长度:

var x = getElementsByTagName("table");
var nTables = x.length

首先获取HTML表行的列表。然后获取HTMLTable列的列表,用于循环和迭代表,并检查所需的条件

List<HtmlTableRow> tableRows = table.getRows();
List tableRows=table.getRows();
我得到第0行是因为我想检查表头,如果需要,您可以随意更改

List<HtmlTableCell> tableColumns = table.getRow(0).getCells();

for (int row = 0; row < tableRows.size(); row++)
{
    for (int column = 0; column < tableColumns.size(); column++)
    {
        if (tableColumns.get(column).asText().equalsIgnoreCase("check your condition"))
        {
            // do what you want 
        } 
    }
}
List tableColumns=table.getRow(0.getCells();
对于(int row=0;row
1)删除所有多余的空行(我在发布的示例中为您做的)2)通过对代码块使用一致的逻辑缩进使其可读。3) 问一个不等同于“有人能帮我完成这个框架吗?”的具体问题。我同意第1点和第2点。但在第三点上不同意。我的问题不是很具体,因为我的问题是我没有知识或非常基本的知识。更重要的是,如果我能找到一份关于这个参数的令人满意的文档,我会非常高兴地说得更具体一些。标记名每次都会更改。你确定你指的是标记名吗?标记名是元素名。您要查找的元素是,而“table”是标记。我不确定它怎么会每次都改变
List<HtmlTableCell> tableColumns = table.getRow(0).getCells();

for (int row = 0; row < tableRows.size(); row++)
{
    for (int column = 0; column < tableColumns.size(); column++)
    {
        if (tableColumns.get(column).asText().equalsIgnoreCase("check your condition"))
        {
            // do what you want 
        } 
    }
}