获取表元素的旧值,如何获取新值?

时间:2019-06-12 11:55:13

标签: java selenium web-scraping html-table selenium-chromedriver

我正在尝试从whoscored.com网站上抓取一些数据。 (https://www.whoscored.com/Regions/81/Tournaments/6/Seasons/7406/Stages/16428/PlayerStatistics/Germany-Bundesliga-II-2018-2019

我单击详细选项卡,然后按分钟对德国第二个德甲联赛的球员进行排序。问题是,在单击这些选项卡之后,似乎成功获取了新表(代码的第一框)

celtext仍然为我提供了初始表的值,即单击“分钟和详细信息”选项卡之前的值。 (第二段代码)

如何检索取回Celtext时获得更新的信息?

想要的输出:

  1. 首先点击详细
  2. 点击分钟数
  3. 第一人称应该是Daniel Heurer Fernandes

实际输出:

  1. 首先单击详细(成功)
  2. 点击分钟数(玩家按分钟数排序)
  3. 获取Celtext(显示有关Philipp Klement的所有信息。...:()

非常感谢您的所有帮助!

尝试过的解决方案

我已经尝试将线程设置为在每次单击表后进入休眠状态8秒钟,但这不会影响结果。我知道这可能与元素未完全加载或单击不会导致影响数据的“硬单击”有关。但是,页面确实更改为我希望它位于的表。

代码

    WebElement detail = driver.findElement(By.xpath("//*[@id=\"detailed-statistics-tab\"]/a")); // selects detailed tab in stats
    ex.executeScript("arguments[0].click();", detail);

int ok_size1=driver.findElements(By.xpath("//*[@id=\"player-table-statistics-head\"]/tr/th[5]")).size(); // sorts by mins
    driver.findElements(By.xpath("//*[@id=\"player-table-statistics-head\"]/tr/th[5]")).get(ok_size1-1).click();


WebElement theTable = driver.findElement(By.xpath("//*[@id=\"player-table-statistics-body\"]"));

    List < WebElement > rows_table = theTable.findElements(By.tagName("tr"));
    rows_count = rows_table.size();
    for (int row = 0; row < rows_count; row++) {
        List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
        int columns_count = Columns_row.size();
        for (int column = 0; column < columns_count; column++) {
            String celtext =  Columns_row.get(column).getAttribute("innerHTML");

期望Daniel Heur Fernandes的输出,但获得Philipp Clement

1 个答案:

答案 0 :(得分:0)

问题是要在表中查找带有标签名的元素。 而是尝试以下解决方案以获取具有播放器链接的行元素列表,

List<WebElement> players = driver.findElements(By.xpath("//*[@id='statistics-table-detailed']//tr//a[@class='player-link']"));
for(WebElement player:players)
{
System.out.println(player.getText());
}