Java 如何使用Selenium逐个解析网页,同时单击下一步按钮?

Java 如何使用Selenium逐个解析网页,同时单击下一步按钮?,java,selenium,Java,Selenium,我需要一页一页地解析,而下一步按钮是可点击的。默认情况下,我连接到第一个页面,并解析此页面中的最后一个元素: driver.get("https://www.scimagojr.com/journalrank.php?country=UA&page=1"); 我将从第一页获取所有元素: WebElement tableId = driver.findElement(By.tagName("table")); List<WebElement> trElements

我需要一页一页地解析,而下一步按钮是可点击的。默认情况下,我连接到第一个页面,并解析此页面中的最后一个元素:

  driver.get("https://www.scimagojr.com/journalrank.php?country=UA&page=1");
我将从第一页获取所有元素:

  WebElement tableId = driver.findElement(By.tagName("table"));
  List<WebElement> trElements = tableId.findElements(By.xpath("./tbody/tr"));
由于以下原因解决:

完成元素后,单击();您的DOM将被重建,因此在此之后 让你的元素充满了陈腐的元素

driver.get(“https://www.scimagojr.com/journalrank.php?country=UA&page=1");
List journalList=new ArrayList();
//...
对于(int i=0;i
在执行完元素之后,单击();将重建DOM,以便
让你的元素充满了陈腐的元素

driver.get(“https://www.scimagojr.com/journalrank.php?country=UA&page=1");
List journalList=new ArrayList();
//...
对于(int i=0;i对于(int id=1;id有什么问题?有什么错误?@dev,如何正确实现它的问题。它只在第一次工作,但我需要在单击“下一步”按钮时解析所有页面。
By.xpath(“./tbody/tr”)
它没有识别任何东西为什么你要遍历所有的元素列表?没有做任何事情…我建议你检查
如果(list.size()==50)
我已经用.xpath(“/tbody/tr”)的部分
更新了一个位代码,让它有意义。
(list.size()==50)
的意思是固定检查,但无论“下一步”按钮有多少页,我都希望进行动态检查。问题是什么?错误是什么?@dev,问题是如何正确实现它。它仅第一次起作用,但我需要在单击“下一步”按钮时解析所有页面。
By.xpath(“./tbody/tr”)
它没有识别任何东西为什么你要遍历所有的元素列表?没有做任何事情…我建议你检查
如果(list.size()==50)
我已经用.xpath(“/tbody/tr”)的部分
更新了一个位代码,让它有意义。
(list.size()==50)
表示固定检查,但无论“下一步”按钮有多少页,我都希望进行动态检查。
        WebElement nextButton = driver.findElement(By.xpath("//img[contains(@title,'next')]"));

        if(isClickable(nextButton, driver)) {
            for (int id = 1; id <= trElements.size(); id++) {
                for (WebElement element : trElements) {
                    //...
                    id++;
                }
            }
        } else {
            nextButton.click();
        }
public static boolean isClickable(WebElement el, WebDriver driver) {
    try {
        WebDriverWait wait = new WebDriverWait(driver, 1);
        wait.until(ExpectedConditions.elementToBeClickable(el));
        return true;
    } catch (Exception e) {
        return false;
    }
}
        driver.get("https://www.scimagojr.com/journalrank.php?country=UA&page=1");
        List<Journal> journalList = new ArrayList<>();

        //...

        for (int i = 0; i < countOfPages; i++) {
            WebElement tableId = driver.findElement(By.tagName("table"));
            List<WebElement> trElements = tableId.findElements(By.xpath("./tbody/tr"));

            for (int id = 1; id <= trElements.size(); id++) {
                WebElement element = trElements.get(id);
                String title = element.findElement(By.xpath("./td[2]/a")).getText();
                String country = "Ukraine";
                journalList.add(new Journal(id, title, country));

            }
            WebElement element = driver.findElementByXPath("(//div[@class='pagination_buttons']/a)[2]");
            element.click();
        }