我有一个要抓取的html元素数组,需要添加到多维arrayList中以创建基本数据表。基本上,我有一个221 x 12元素的Web表,需要逐行添加(每行12个元素)。我有一个循环设置,通过xpath在行中查找每个元素,然后将它们添加到称为解析器的数组中。现在,我需要通过循环的每次迭代将解析器添加到名为data的多维arrayList中。当执行此操作时,我调用get和addAll,但出现索引超出范围错误。
我的假设是我没有在外部数组上正确初始化行,但是我不确定如何在内部数组中添加其他内容。我尝试删除get参数,但是当我这样做时,我收到类型参数编译错误。我还尝试使用空值1st初始化外部数组,但这仅用空值填充了数组。
我将添加所有元素为字符串,如果出于任何原因而重要(https://www.worldometers.info/coronavirus/),则为源。如果多维ArrayList并不是最好的方法,那么我也会接受其他选择。
这是我所拥有的:
public void elementLocator() {
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
try {
String prefix = "//*[@id=\"main_table_countries_today\"]/tbody[1]/tr[";
int j = 0;
for(int i = 1; i <= 222; i ++) {
try {
ArrayList<String> parser = new ArrayList<String>();
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[1]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[2]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[3]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[4]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[5]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[6]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[7]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[8]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[9]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[10]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[11]")).getText());
parser.add(driver.findElement(By.xpath(prefix + i + "]/td[12]")).getText());
data.get(0).addAll(j, parser); //Runtime error here
j++;
System.out.println(j);
//Skip blank rows
} catch (Exception e) {
j++;
e.printStackTrace();;
continue;
}
System.out.println(data);
}
Thread.sleep(3000);
closeBrowser();
//Catch specific exception for html element not found
} catch (NoSuchElementException e) {
System.out.println("Selected element not found");
error = true;
您调用data.get(0)
,但数据为空,因此出现OutOfBounds异常。您需要将数组添加到这样的数据中:data.add(parser)