我正在尝试从网页中的表格中提取数据,但我不断提取相同的信息。例如,我将每部电影都放在数组列表中,但我想将每部电影与相关的表数据进行匹配。问题是,每个表都有相同的类名。我可以打印每个电影标题,但我只提取 MovieOne 的表信息。以下是电影一和二的 HTML 示例:
<TH CLASS="ddtitle">MovieOne</TH>
<TABLE CLASS="datadisplaytable" ><CAPTION class="captiontext">Movies</CAPTION>
<TR>
<TH CLASS="ddheader" scope="col" >Genre</TH>
<TH CLASS="ddheader" scope="col" >Time</TH>
<TH CLASS="ddheader" scope="col" >Days</TH>
<TH CLASS="ddheader" scope="col" >Where</TH>
<TH CLASS="ddheader" scope="col" >Date Range</TH>
<TH CLASS="ddheader" scope="col" >Seating</TH>
<TH CLASS="ddheader" scope="col" >Actors</TH>
</TR>
<TR>
<TD CLASS="dddefault">Action</TD>
<TD CLASS="dddefault">10:00 am - 12:00 pm</TD>
<TD CLASS="dddefault">SMTWTHFSA</TD>
<TD CLASS="dddefault">AMC Showplace</TD>
<TD CLASS="dddefault">Aug 20, 2014 - Sept 12, 2014</TD>
<TD CLASS="dddefault">Reservations</TD>
<TD CLASS="dddefault">Will Ferrel (<ABBR title= "Primary">P</ABBR>) target="Will Ferrel" ></TD>
</TR>
</TABLE>
<TH CLASS="ddtitle">MovieTwo</TH>
<TABLE CLASS="datadisplaytable" ><CAPTION class="captiontext">Movies</CAPTION>
<TR>
<TH CLASS="ddheader" scope="col" >Genre</TH>
<TH CLASS="ddheader" scope="col" >Time</TH>
<TH CLASS="ddheader" scope="col" >Days</TH>
<TH CLASS="ddheader" scope="col" >Where</TH>
<TH CLASS="ddheader" scope="col" >Date Range</TH>
<TH CLASS="ddheader" scope="col" >Seating</TH>
<TH CLASS="ddheader" scope="col" >Actors</TH>
</TR>
<TR>
<TD CLASS="dddefault">Action</TD>
<TD CLASS="dddefault">11:00 am - 12:30 pm</TD>
<TD CLASS="dddefault">SMTWTHFSA</TD>
<TD CLASS="dddefault">Showplace Cinemas</TD>
<TD CLASS="dddefault">Aug 20, 2014 - Sept 12, 2014</TD>
<TD CLASS="dddefault">TBA</TD>
<TD CLASS="dddefault">Zach Galifinakis (<ABBR title= "Primary">P</ABBR>) target="Zach Galifinakis" ></TD>
</TR>
</TABLE>
这是我一直在尝试的(由我的另一个问题 Extract Text from BR tags 中的 Praveen 提供):
WebElement table =driver.findElement(By.xpath("//table[@class='datadisplaytable']"));
WebElement tbody=table.findElement(By.tagName("tbody"));
List<WebElement> rows=tbody.findElements(By.tagName("tr"));
System.out.println("Row size:"+rows.size());
ArrayList<String> list=new ArrayList<>();
for(int i=0;i<rows.size();i++)
{
WebElement column = tbody.findElement(By.xpath("//table[@class='datadisplaytable']/tbody/tr[2]/td"));
if(column.getText().trim().contains("."))
{
System.out.println("text : "+column.getText().trim());
list.add(column.getText().trim());
}
}
我还可以获取字符串中的表信息,但我需要将每个表元素分开。我可以使用子字符串,但信息不同,因此字符串长度也不同。我应该使用 xpath 来提取信息,还是有其他方法?
我想我正确理解了你的问题。您想要从网页中的所有表格中读取电影的名称。
- 阅读所有表格
- 循环它们,并在表格的每一行中获取第二列(假设有电影名称)
我还没有在我的机器上测试过这个。这是您可以尝试的代码。
List<WebElement> tables = driver.findElements(By.className("ddtitle"));
foreach(WebElement table : tables){
List<WebElement> rows = table.findElements(By.tagName("TR"));
foreach(WebElement row : rows){
WebElement movieName = row.findElements(By.tagName("TD")).get(2); // column # in row
System.out.println(movieName);
}
}
我是一名优秀的程序员,十分优秀!